利用百度地圖WEB服務APIGeoCoding API批量地址解析


  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;
        }

    取得的結果數據主要包括了對應地址的經度、緯度、是否精確查找,打點的可信度。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM