1.什么是Geocoding?
Geocoding API 是一类简单的HTTP接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# 、C++、Java等开发语言发送HTTP请求且接收JSON、XML的返回数据。
2.功能介绍
Geocoding API包括地址解析和逆地址解析功能。
- 地理编码:即地址解析,由详细到街道的结构化地址得到百度经纬度信息,且支持名胜古迹、标志性建筑名称直接解析返回百度经纬度。例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”,“百度大厦”地址解析的结果是“lng:116.30815,lat:40.056885”
- 逆地理编码,即逆地址解析,由百度经纬度信息得到结构化地址信息。例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。
3.如何使用
百度地图Geocoding API是一套免费对外开放的API,无使用次数限制。使用方法:
第一步:申请ak(即获取密钥),若无百度账号则首先需要注册百度账号。
第二步,拼写发送http请求的url,注意需使用第一步申请的ak。
第三步,接收http请求返回的数据(支持json和xml格式)。
以下是一个关于地理编码的简单示例。发送一个地址是“百度大厦”的请求,返回该地址对应的地理坐标。发送请求的url如下:
http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=E4805d16520de693a3fe707cdc962045&callback=showLocation
4.java调用测试
1 package addressToGeoTest; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileOutputStream; 8 import java.io.IOException; 9 import java.io.InputStreamReader; 10 import java.io.OutputStreamWriter; 11 import java.net.URL; 12 import java.net.URLEncoder; 13 import java.util.*; 14 15 public class GetLatAndLngByBaidu { 16 17 public static void main(String args[]){ 18 19 String cnAddress="北京市海淀区上地十街10号"; 20 Map<String,String> map = GetLatAndLngByBaidu.getLatitude(cnAddress); 21 if(null != map){ 22 System.out.println(cnAddress+" 经度:"+map.get("lng")+" 纬度:"+map.get("lat")); 23 } 24 } 25 /** 26 * 返回输入地址的经纬度坐标 27 * lng(经度),lat(纬度) 28 */ 29 //1,申请ak(即获取密钥),若无百度账号则首先需要注册百度账号。 30 public static final String AK= "VGqyTtpnqfNxkTkPBG5APrGO"; 31 public static Map<String,String> getLatitude(String address){ 32 try { 33 address = URLEncoder.encode(address, "UTF-8"); //将地址转换成utf-8的16进制 34 //2, 拼写发送http请求的url,注意需使用第一步申请的ak。 35 //3, 接收http请求返回的数据(支持json和xml格式)本次采用json形式 36 URL resjson = new URL("http://api.map.baidu.com/geocoder/v2/?address=" 37 + address +"&output=json&ak="+ AK); 38 BufferedReader in = new BufferedReader( 39 new InputStreamReader(resjson.openStream())); 40 String res; 41 StringBuilder sb = new StringBuilder(""); 42 while((res = in.readLine())!=null){ 43 sb.append(res.trim()); 44 } 45 in.close(); 46 String str = sb.toString(); 47 //System.out.println("return json:"+str); 48 Map<String,String> map = null; 49 if(str!=null){ 50 int lngStart = str.indexOf("lng\":"); 51 int lngEnd = str.indexOf(",\"lat"); 52 int latEnd = str.indexOf("},\"precise"); 53 if(lngStart > 0 && lngEnd > 0 && latEnd > 0){ 54 String lng = str.substring(lngStart+5, lngEnd); 55 String lat = str.substring(lngEnd+7, latEnd); 56 map = new HashMap<String,String>(); 57 map.put("lng", lng); 58 map.put("lat", lat); 59 return map; 60 } 61 } 62 }catch (Exception e) { 63 e.printStackTrace(); 64 } 65 return null; 66 } 67 }