百度地圖API中geocoding的用法

          Posted on 2012-11-06 13:42 kiss_xian 閱讀(5836) 評論(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 劉通
          @饒衡
          同求 通過坐標轉換地址

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


          網站導航:
           
          主站蜘蛛池模板: 余庆县| 句容市| 邮箱| 北流市| 遂宁市| 孝昌县| 涟源市| 大兴区| 胶州市| 新疆| 荆门市| 赞皇县| 来安县| 兴文县| 镇雄县| 安泽县| 乐清市| 婺源县| 象山县| 金山区| 邹城市| 许昌县| 栖霞市| 临城县| 图们市| 景谷| 吉水县| 哈巴河县| 彰武县| 石嘴山市| 南雄市| 玉环县| 开平市| 梁河县| 本溪市| 额尔古纳市| 普陀区| 巴南区| 北京市| 林西县| 南陵县|