百度地圖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 劉通
          @饒衡
          同求 通過坐標轉換地址

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


          網站導航:
           
          主站蜘蛛池模板: 八宿县| 姚安县| 石狮市| 佛冈县| 桃源县| 神木县| 调兵山市| 新竹市| 大埔区| 微山县| 秦皇岛市| 巴彦淖尔市| 鹿泉市| 嘉鱼县| 股票| 右玉县| 扶风县| 伊吾县| 岑巩县| 禄丰县| 外汇| 两当县| 合作市| 临沧市| 纳雍县| 石棉县| 湖南省| 金溪县| 万荣县| 阿克| 丘北县| 濉溪县| 尚义县| 潜江市| 秦皇岛市| 咸丰县| 延安市| 海阳市| 赤壁市| 德格县| 沿河|