百度地圖API中geocoding的用法

          Posted on 2012-11-06 13:42 kiss_xian 閱讀(5837) 評論(3)  編輯  收藏

                  最近看百度地圖官方API,寫了一個通過地址獲取經緯度,
          或者通過經緯度得到詳細地址的工具類方法,源碼如下:

          import java.io.BufferedReader;
          import java.io.InputStreamReader;
          import java.net.URL;
          import java.net.URLEncoder;
          import java.util.HashMap;
          import java.util.Map;

          public class LatitudeUtils {
           
           public static final String KEY_1 = "327db7009617d6806b9c38e819ea06ac"; 
           /**
            * 返回輸入地址的經緯度坐標
            * key lng(經度),lat(緯度)
            */
           public static Map<String,String> getLatitude(String address){
            try {
          //  將地址轉換成utf-8的16進制
               address = URLEncoder.encode(address, "UTF-8");
          //  如果有代理,要設置代理,沒代理可注釋
          //  System.setProperty("http.proxyHost","192.168.172.23");
          //  System.setProperty("http.proxyPort","3209");
             URL resjson = new URL("http://api.map.baidu.com/geocoder?address="
                                + address +"&output=json&key="+ KEY_1);
            
             BufferedReader 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(StringUtils.validNull(str)){
              int lngStart = str.indexOf("lng\":");
              int lngEnd = str.indexOf(",\"lat");
              int latEnd = str.indexOf("},\"precise");
              if(lngStart > 0 && lngEnd > 0 && latEnd > 0){
               String lng = str.substring(lngStart+5, lngEnd);
               String lat = str.substring(lngEnd+7, latEnd);
               map = new HashMap<String,String>();
               map.put("lng", lng);
               map.put("lat", lat);
               return map;
              }
             }
            }catch (Exception e) {
             e.printStackTrace();
            }
            return null;
           }
           public static void main(String args[]){
            Map<String,String> map = LatitudeUtils.getLatitude("北京西城區北京北站");
              if(null != map){
                 System.out.println(map.get("lng"));
                 System.out.println(map.get("lat"));
              }
           }
          }

          注:這里只是geocoding用法的一個具體實現,其中各個可選參數具體含義 
                 請參考http://developer.baidu.com/map/geocoding-api.htm
               

          Feedback

          # re: 百度地圖API中geocoding的用法  回復  更多評論   

          2013-08-06 14:28 by 蔣永永
          validNull()你這個方法從哪里來的?

          # re: 百度地圖API中geocoding的用法  回復  更多評論   

          2013-09-19 11:55 by 饒衡
          這個代碼很好用,請問有沒有通過經緯碼得到詳細地址的代碼

          # re: 百度地圖API中geocoding的用法  回復  更多評論   

          2015-09-09 12:13 by 劉通
          @饒衡
          同求 通過坐標轉換地址

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 乐都县| 上栗县| 新蔡县| 大城县| 昌图县| 文昌市| 寻甸| 建平县| 罗田县| 大荔县| 碌曲县| 贺兰县| 寻甸| 镇巴县| 望谟县| 达日县| 三原县| 章丘市| 鞍山市| 乐东| 凉山| 东兰县| 禹州市| 辽宁省| 习水县| 莱西市| 敦煌市| 阜南县| 瑞丽市| 顺昌县| 怀来县| 濮阳县| 宜宾县| 嵊泗县| 大新县| 璧山县| 乐都县| 墨江| 万安县| 青州市| 兖州市|