逆地理编码——获取地理位置

具体需求:根据地理坐标:39.831782,116.347120,向用户展示地理位置:丰台区

我们可以参考百度,阿里等的web服务api进行逆地理编码。

阿里:http://gc.ditu.aliyun.com/jsdoc/geocode_api.html#a1_5

百度:http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-geocoding

百度地图Geocoding API是一套免费对外开放的API,无使用次数限制。但是它必须首先申请一个ak(即获取密钥),返回的数据支持json和xml格式。

它的逆地理编码请求如下:

http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=xml&pois=1


阿里的就相对简单一些,逆地理编码请求如下:

http://gc.ditu.aliyun.com/regeocoding?l=39.938133,116.395739&type=001
其中的 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)它返回的结果如下:

{
"queryLocation":[39.938133,116.395739],
"addrList":[{
            "type":"doorPlate",
            "status":1,
            "name":"地安门外大街31号",
            "admCode":"110102",
            "admName":"北京市,西城区",
            "nearestPoint":[116.39573,39.93813],
            "distance":0.000
            }]
}
如果只获得行政区域,可以使用:
http://recode.ditu.aliyun.com/dist_query?l=39.938133,116.395739
返回结果如下:

{
    "report":0,
    "ad_code":"110102",
    "dist":"中国,北京市,北京城区,西城区"
}
接下来,就可以使用HttpURLConnection来获得行政区域,代码示例如下:

@Test
	public void rtnArea() throws Exception{
		//type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项)
		String path="http://recode.ditu.aliyun.com/dist_query?l=39.938133,116.395739";
		//参数直接加载url后面
		URL url=new URL(path);
		HttpURLConnection conn=(HttpURLConnection) url.openConnection();
		conn.setRequestMethod("GET");
		conn.setConnectTimeout(20000);
		conn.setDoOutput(true);
		conn.connect();
		 InputStream ins =  conn.getInputStream();  
		 String charset = "gb2312"; 
		 InputStreamReader inr = new InputStreamReader(ins, charset);  
		 BufferedReader br = new BufferedReader(inr);  
		 String line = "";  
		 StringBuffer sb = new StringBuffer();   
		 do{
			 sb.append(line);  
			 line = br.readLine(); 
		 }while(line != null);
		 JSONObject obj = JSON.parseObject(sb.toString());
		 String dist = obj.getString("dist");
		 System.out.println(dist);//返回结果为“中国,北京市,北京城区,西城区”
	}
注意这里的编码为“gb2312”,不是“utf-8”。





你可能感兴趣的:(java开发)