Geocoding API包括地址解析和逆地址解析功能:
地理編碼:即地址解析,由詳細到街道的結構化地址得到百度經緯度信息,例如:“北京市海淀區中關村南大街27號”地址解析的結果是“lng:116.31985,lat:39.959836”。同時,地理編碼也支持名勝古跡、標志性建築名稱直接解析返回百度經緯度,例如:“百度大廈”地址解析的結果是“lng:116.30815,lat:40.056885” ,通用的POI檢索需求,建議使用Place API。
逆地理編碼:即逆地址解析,由百度經緯度信息得到結構化地址信息,例如:“lat:31.325152,lng:120.558957”逆地址解析的結果是“江蘇省蘇州市虎丘區塔園路318號”。
本文所講的是地理編碼,從本地硬盤讀取excel數據,地址解析,將結果存到本地的excel數據表當中。
主要代碼如下:
try{ address = URLEncoder.encode(address,"UTF-8"); URL resjson = new URL("http://api.map.baidu.com/geocoder/v2/?address=" +address+"&output=json&ak="+key+"&callback=showLocation"); BufferedReader in = null; if(resjson.openStream()!=null){ in = new BufferedReader(new InputStreamReader(resjson.openStream())); } String res; StringBuilder sb = new StringBuilder(""); while ((res=in.readLine())!=null) { sb.append(res.trim()); } in.close(); String str = sb.toString(); //System.out.println("return json:"+str); Map<String,String> map = null; if(str!=null) { int lngStart = str.indexOf("lng\":"); int lngEnd = str.indexOf(",\"lat"); int latEnd = str.indexOf("},\"precise"); int preciseEnd = str.indexOf(",\"confidence"); int confidenceEnd = str.indexOf(",\"level"); if(lngStart>0&&lngEnd>0&&latEnd>0){ String lng = str.substring(lngStart+5,lngEnd); String lat = str.substring(lngEnd+7,latEnd); String precise = str.substring(latEnd+12,preciseEnd); String confidence = str.substring(preciseEnd+14,confidenceEnd); map = new HashMap<String, String>(); map.put("lng", lng); map.put("lat", lat); map.put("precise", precise); map.put("confidence", confidence); return map; } } }catch(Exception e){ e.printStackTrace(); } return null; }
取得的結果數據主要包括了對應地址的經度、緯度、是否精確查找,打點的可信度。