`
jueyue
  • 浏览: 195593 次
社区版块
存档分类
最新评论

google根据地址获取经纬度

阅读更多
第一个百度的,百度是根据key做限制的,地址解析不做限制,但是关键字查询要限制1000个
package com.jueyue;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.stream.JsonReader;

/**
 * 获取经纬度通过
 * 
 * @author jueyue 返回格式:Map<String,Object> map map.put("status",
 *         reader.nextString());//状态 map.put("result", list);//查询结果
 *         list<map<String,String>>
 *  密钥:f247cdb592eb43ebac6ccd27f796e2d2
 */
public class GetLatAndLngByBaidu {
	/**
	 * @param addr
	 *            查询的地址
	 * @return
	 */
	public Map<String, Object> getCoordinate(String addr) {
		String address = null;
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			address = java.net.URLEncoder.encode(addr, "UTF-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		String key = "f247cdb592eb43ebac6ccd27f796e2d2";
		String url = String
				.format("http://api.map.baidu.com/geocoder?address=%s&output=json&key=%s",
						address, key);
		URL myURL = null;
		URLConnection httpsConn = null;
		try {
			myURL = new URL(url);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		try {
			httpsConn = (URLConnection) myURL.openConnection();// 不使用代理
			if (httpsConn != null) {
				InputStreamReader insr = new InputStreamReader(
						httpsConn.getInputStream(), "UTF-8");
//				BufferedReader br = new BufferedReader(insr);
//				String data = null;
//				while((data= br.readLine())!=null){
//					System.out.println(data);
//				}
				JsonReader reader = new JsonReader(insr);
				reader.beginObject();
				while (reader.hasNext()) {
					String tagName = reader.nextName();
					if (tagName.equals("result")) {
						reader.beginObject();
						List<Map<String, String>> list = new ArrayList<Map<String, String>>();
						while (reader.hasNext()) {
							Map<String, String> map_temp = new HashMap<String, String>();
								tagName = reader.nextName();
								if (tagName.equals("location")) {
									reader.beginObject();
									while (reader.hasNext()) {
										map_temp.put(reader.nextName(),
												//(Double.valueOf(reader.nextString())-0.05+""));
												reader.nextString());
									}
									reader.endObject();
								} else if(tagName.equals("precise")) {
									map_temp.put("precise", reader.nextString());
									//reader.skipValue();
								}
							list.add(map_temp);
						}
						map.put("result", list);
						reader.endObject();
					} else if (tagName.equals("status")) {
						map.put("status", reader.nextString());
					}
				}
				insr.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
	
	
	public void getCoordinate(String longitude ,String latitude){
		String url = String.format(
				"http://api.map.baidu.com/geocoder?output=json&" +
				"location=%s,%s%s&key=f247cdb592eb43ebac6ccd27f796e2d2",
				latitude, "%20",longitude);
		URL myURL = null;
		URLConnection httpsConn = null;
		try {
			myURL = new URL(url);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		try {
			httpsConn = (URLConnection) myURL.openConnection();
			if (httpsConn != null) {
				InputStreamReader insr = new InputStreamReader(
						httpsConn.getInputStream(), "UTF-8");
				BufferedReader br = new BufferedReader(insr);
				String data = null;
				while ((data = br.readLine()) != null) {
					System.out.println(data);
				}
				insr.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}




然后是google的,google是根据ip做限制的,可以使用代理,但是我测试代理效果不好
package com.jueyue;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.stream.JsonReader;

/**
 * 获取经纬度通过google
 * 
 * @author jueyue 返回格式:Map<String,Object> map map.put("status",
 *         reader.nextString());//状态 map.put("result", list);//查询结果
 *         list<map<String,String>>
 */
public class GetLatAndLngByGoogle {
	/**
	 * @param isProxyip
	 *            是否使用代理
	 * @param addr
	 *            查询的地址
	 * @return
	 */
	public Map<String, Object> getCoordinate(String addr, Boolean isProxyIp) {
		String address = null;
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			address = java.net.URLEncoder.encode(addr, "UTF-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		int ipPort = (int) Math.round((Math.random() * 190));
		PostPortConst.getInstance();
		InetSocketAddress addrss = new InetSocketAddress(
//				PostPortConst.getProxyip()[ipPort][0],
//				Integer.valueOf(PostPortConst.getProxyip()[ipPort][1]));
				"118.97.103.82",8080);
		System.out.println(PostPortConst.getProxyip()[ipPort][0]+"        "+
				Integer.valueOf(PostPortConst.getProxyip()[ipPort][1]));
		Proxy proxy = new Proxy(Proxy.Type.HTTP, addrss);
		String key = "zh-CN";
		String url = String
				.format("http://ditu.google.cn/maps/api/geocode/json?address=%s&sensor=false&language=%s",
						address, key);
		URL myURL = null;
		URLConnection httpsConn = null;
		try {
			myURL = new URL(url);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		try {
			if (isProxyIp) {
				httpsConn = (URLConnection) myURL.openConnection(proxy);// 使用代理
			} else {
				httpsConn = (URLConnection) myURL.openConnection();// 不使用代理
			}
			if (httpsConn != null) {
				InputStreamReader insr = new InputStreamReader(
						httpsConn.getInputStream(), "UTF-8");
				JsonReader reader = new JsonReader(insr);
				reader.beginObject();
				while (reader.hasNext()) {
					String tagName = reader.nextName();
					if (tagName.equals("results")) {
						reader.beginArray();
						List<Map<String, String>> list = new ArrayList<Map<String, String>>();
						while (reader.hasNext()) {
							reader.beginObject();
							Map<String, String> map_temp = new HashMap<String, String>();
							while (reader.hasNext()) {
								tagName = reader.nextName();
								if (tagName.equals("address_components")) {
									reader.skipValue();
								} else if (tagName.equals("formatted_address")) {
									map_temp.put("address", reader.nextString());
								} else if (tagName.equals("geometry")) {
									reader.beginObject();
									while (reader.hasNext()) {
										tagName = reader.nextName();
										if (tagName.equals("location")) {
											reader.beginObject();
											while (reader.hasNext()) {
												map_temp.put(reader.nextName(),
														reader.nextString());
											}
											reader.endObject();
										} else {
											reader.skipValue();
										}
									}
									reader.endObject();
								} else {
									reader.skipValue();
								}
							}
							list.add(map_temp);
							reader.endObject();
						}
						map.put("result", list);
						reader.endArray();
					} else if (tagName.equals("status")) {
						map.put("status", reader.nextString());
					}
				}
				insr.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
}



接下来是高德的,这个高德的一个测试接扣,没有做限制,使用还可以,如果有谁是做高德系还是用这个比较好
package com.jueyue;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * 高的的地图
 * @author jueyue
 *
 */
public class GetLatAndLngByGaoDeMap {
	/**
	 * @param addr
	 *            查询的地址
	 * @return
	 */
	public Map<String, Object> getCoordinate(String addr) {
		String address = null;
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			address = java.net.URLEncoder.encode(addr, "UTF-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		String url = String
				.format("http://api.amap.com:9090/geocode/simple?resType=json&" +
						"encode=utf-8&range=300&roadnum=3" +
						"&crossnum=2&poinum=2&retvalue=1" +
						"&key=undefined&sid=7000&" +
						"address=%s&rid=89616", address);
		URL myURL = null;
		URLConnection httpsConn = null;
		try {
			myURL = new URL(url);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		try {
			httpsConn = (URLConnection) myURL.openConnection();// 不使用代理
			if (httpsConn != null) {
				InputStreamReader insr = new InputStreamReader(
						httpsConn.getInputStream(), "UTF-8");
				BufferedReader br = new BufferedReader(insr);
				String data = null;
				while ((data = br.readLine()) != null) {
					data = data.substring(data.indexOf("{"));
					JSONObject obj = null;
					try {
						obj = JSONObject.fromObject(data);
					} catch (Exception e) {
						e.printStackTrace();
					}
					//map.put("message", obj.getString("message"));
					map.put("count", obj.getString("count"));
					List<Map<String, String>> list = new ArrayList<Map<String, String>>();
					JSONArray jarray = obj.getJSONArray("list");
					for (int i = 0; i < jarray.size(); i++) {
						Map<String, String> map_temp = new HashMap<String, String>();
						JSONObject obj_temp = jarray.getJSONObject(i);
						map_temp.put("name", obj_temp.getString("name"));
						map_temp.put("x", obj_temp.getString("x"));
						map_temp.put("y", obj_temp.getString("y"));
						list.add(map_temp);
					}
					map.put("list", list);
				}
				insr.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
}




百度的经纬度偏差最大,google小点,而且测试了,百度搜索还是可以的,如果做开发百度还是好点
1
1
分享到:
评论
3 楼 yuanyuan2597 2015-12-09  
谷歌那里,PostPortConst是个什么类啊?没有啊,是你自己自定义的吗?
2 楼 jueyue 2012-10-08  
hxze220 写道
之前做过一段时间的GIS,如果没弄错的话,百度的应该是使用的坐标系不同吧,在地图上显示到正确的位置需要做纠偏,国内的地图数据应有关部门的要求,都做了偏移的。。。

是的所有的都做了偏差,所以如果要用那个还是用那个地地图,我这只是举个例子
1 楼 hxze220 2012-09-30  
之前做过一段时间的GIS,如果没弄错的话,百度的应该是使用的坐标系不同吧,在地图上显示到正确的位置需要做纠偏,国内的地图数据应有关部门的要求,都做了偏移的。。。

相关推荐

    .net 根据地址获取经纬度;根据经纬度获取地址

    首先,要根据地址获取经纬度,我们可以利用公开的API,如Google Maps Geocoding API、Bing Maps REST Services或高德地图API。这些服务提供RESTful接口,通过HTTP请求返回JSON或XML格式的结果。以Google Maps ...

    利用google地图根据地址批量获取经纬度

    在标题“利用google地图根据地址批量获取经纬度”中,我们关注的核心技术是通过Google Maps API来处理地理位置数据,特别是批量处理地址以获得对应的经纬度坐标。这在数据分析、物流管理、地图服务、位置追踪等场景...

    批量从谷歌获取地址的经纬度

    本项目专注于批量获取地址的经纬度,使用了Java编程语言,结合谷歌地图API来实现这一功能。下面将详细阐述相关知识点。 1. **Java编程基础**: Java是一种广泛使用的面向对象的编程语言,具有跨平台性、高效性和...

    根据GoogleMapApi给出地名获取经纬度,给出经纬度获取地名(Java版本)

    根据GoogleMapApi给出地名获取经纬度,给出经纬度获取地名(Java版本) RT

    vba《调用Google地图获取地址经纬度填入Excel并存储到数据库》

    vba《调用Google地图获取地址经纬度填入Excel并存储到数据库》

    googleMap根据经纬度获取地理位置

    在这个场景中,我们将主要探讨如何使用Google Maps API 根据经纬度获取地理位置信息。 首先,`googleMap根据经纬度获取地理位置`这个标题涉及到的核心技术是Google Maps Geocoding服务。Geocoding是将地址或坐标...

    根据点击的地图获取经纬度

    在Web端实现点击地图获取经纬度,通常我们会使用地图API,如Google Maps API、高德地图API或百度地图API等。这里以Google Maps API为例进行讲解。首先,在HTML文件中引入Google Maps API的JavaScript库,并创建一个...

    android获取GPS经纬度,并根据经纬度获取准确地址( 纯原生)

    在Android开发中,获取设备的GPS经纬度以及根据这些坐标获取准确地址是常见的需求。这里我们将深入探讨如何实现这一功能。 首先,我们需要了解Android中的Location服务。Location服务是Android系统提供的一种定位...

    根据经纬度获取google地图海拔

    根据经纬度获取google地图海拔

    使用fused location provider 获取经纬度

    这是使用fused location provider获取经纬度的源码。虽然结合了GooglePlayService但是不需要翻就能获取到地址。 注意运行时手机必须支持google play store 虚拟机必须是Google Api System Image才可以。

    通过google api获取经纬度

    通过google api获取经纬度,用于网站跟位置相关的信息化

    获取经纬度

    许多在线服务提供了获取经纬度的API,如Google Maps API、高德地图API等。开发者可以调用这些接口,输入地址信息,获得对应的经纬度坐标。 6. **地理编码与反地理编码** 地理编码是将地址转换为经纬度的过程,而...

    连接google地图获取经纬度

    "连接Google地图获取经纬度"这个主题涉及到的关键技术主要包括地理编码(Geocoding)和API调用。下面将详细介绍这两个核心概念以及如何实现这个小工具。 地理编码是将地址转化为经纬度坐标的过程,它使得我们可以将...

    地区经纬度信息获取(利用Google地图API获取)

    获取经纬度通常涉及到发送HTTP请求到Google地图API的特定端点,并传递需要查询的地址参数。API将处理请求,并返回包含经纬度信息的响应。一般情况下,开发者需要注册Google Cloud Platform并获取相应的API密钥。 4....

    利用谷歌地图获取对应地名的经纬度源码(C#)

    在C#中,我们可以使用HttpClient类来发送HTTP请求到谷歌地图的API接口,获取经纬度信息。以下是一个简单的C#代码示例: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; public ...

    Android 根据经纬度获取地址

    它允许应用从经纬度坐标获取地址列表,或者反过来,从地址字符串获取经纬度。不过,需要注意的是,`Geocoder`的可用性取决于设备上安装的地图数据和提供商支持。 3. **权限请求**:在AndroidManifest.xml文件中,...

    google基站码获取经纬度

    本文将深入探讨如何使用Google的服务,通过基站码来获取经纬度以及反向地,根据经纬度获取地址。 首先,基站码通常包括Cell ID(小区ID)和LAC(Location Area Code,位置区码),它们是移动通信网络中的关键组成...

    android安卓绝对可以获取GPS经纬度的google map demo

    使用谷歌api,不需要网络,可以直接获取经纬度,获取经纬度写到一个类中,直接调用start,关闭使用stop。 注意要在室外使用! 打开应用,马上开始获取地址,多次点击 第一个按钮: 获取gps经纬度, 如果程序获取到...

    android 获取经纬度demo

    这个“android 获取经纬度demo”提供了一个实例,教我们如何利用Android的网络定位服务来获取地理位置信息。下面将详细介绍这个过程,以及相关的知识点。 首先,Android提供了Location API,它是一个用于定位、跟踪...

    Goole 地图 根据经纬度获取地址

    在本文中,我们将深入探讨如何利用Google Maps API根据经纬度获取地址,以及相关的重要知识点。 首先,让我们了解什么是地理编码。地理编码是将地理位置(如经纬度)转换为人类可读的地址的过程。相反,反向地理...

Global site tag (gtag.js) - Google Analytics