百度地图通过经纬度获取地址信息

以前用的都是通过谷歌的坐标调用谷歌api 最近 发现老是连不上谷歌服务器。

于是找了找百度的,

地址为http://developer.baidu.com/map/webservice-geocoding.htm#.E4.BB.80.E4.B9.88.E6.98.AFGeocoding.EF.BC.9F

    逆地理编码示例

    参数
    Latitude:
    Longitude:
    pois(是否显示周边100米内poi):

     (结果显示如下)

    http://api.map.baidu.com/geocoder/v2/?ak=您的密钥&callback=renderReverse&location=28.696117,115.958458&output=json&pois=1

    坐标:(115.95845796638,28.696117043877)对应的地址是: 江西省南昌市青山湖区创新路1号

    该点周边100米内有10个poi

      状态字段:

        名称 类型 说明
        status constant 返回结果状态值, 成功返回0,其他值请查看附录
        location lat 纬度坐标
        lng 经度坐标
        formatted_address 结构化地址信息
        business 所在商圈信息,如 “人民大学,中关村,苏州街”
        addressComponent city 城市名
        district 区县名
        province 省名
        street 街道名
        street_number 街道门牌号
        pois(周边poi数组) addr 地址信息
        cp 数据来源
        distance 离坐标点距离
        name poi名称
        poiType poi类型,如’ 办公大厦,商务大厦’
        point poi坐标{x,y}
        tel 电话
        uid poi唯一标识
        zip 邮编

          json示例:

            http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1

              xml示例:

                http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=xml&pois=1

                  特别说明:

                    1.因为Geocoding和反Geocoding使用的门址数据以及算法都不是一样的,所以会出现不能一一对应的现象。

                      2.逆地址解析location参数传入的参数格式是(纬度lat,经度lng)。

                        8.返回码状态表

                          返回码 定义
                          0 正常
                          1 服务器内部错误
                          2 请求参数非法
                          3 权限校验失败
                          4 配额校验失败
                          5 ak不存在或者非法
                          101 服务禁用
                          102 不通过白名单或者安全码不对
                          2xx 无权限
                          3xx 配额错误

                          解析json

                          {"status":0,"result":{"location":{"lng":115.95845796638,"lat":28.696117043877},"formatted_address":"江西省南昌市青山湖区创新路1号","business":"高新开发区,火炬广场,发展路","addressComponent":{"city":"南昌市","district":"青山湖区","province":"江西省","street":"创新路","street_number":"1号"},"cityCode":163}}

                           

                          附上代码

                          [java]

                          1. package com.xuyw.wx.util;  
                          2.   
                          3. import net.sf.json.JSONObject;  
                          4.   
                          5. import com.xuyw.wx.config.Config;  
                          6.   
                          7. /** 
                          8.  * 百度工具类 
                          9.  *  
                          10.  * @author xuyw 
                          11.  * @email xyw10000@163.com 
                          12.  * @date 2014-06-22 
                          13.  */  
                          14. public class BaiDuUtil {  
                          15.     public static String getCity(String lat, String lng) {  
                          16.         JSONObject obj = getLocationInfo(lat, lng).getJSONObject(“result”)  
                          17.                 .getJSONObject(“addressComponent”);  
                          18.         return obj.getString(“city”);  
                          19.     }  
                          20.   
                          21.     public static JSONObject getLocationInfo(String lat, String lng) {  
                          22.         String url = “http://api.map.baidu.com/geocoder/v2/?location=” + lat + “,”  
                          23.                 + lng + “&output=json&ak=” + Config.BAIDU_GEOCONV_KEY+“&pois=0”;  
                          24.         JSONObject obj = JSONObject.fromObject(HttpUtil.getRequest(url));  
                          25.         return obj;  
                          26.     }  
                          27.   
                          28.     public static void main(String[] args) {  
                          29.         System.out.println(BaiDuUtil.getCity(“28.694439”“115.939728”));  
                          30.     }  
                          31. }  

                           

                          [java] 派生到我的代码片

                          1. package com.xuyw.wx.util;  
                          2. import java.io.BufferedReader;  
                          3. import java.io.DataOutputStream;  
                          4. import java.io.IOException;  
                          5. import java.io.InputStreamReader;  
                          6. import java.io.UnsupportedEncodingException;  
                          7. import java.net.HttpURLConnection;  
                          8. import java.net.MalformedURLException;  
                          9. import java.net.URL;  
                          10.   
                          11. /** 
                          12.  * Http 简单封装 
                          13.  *  
                          14.  * @author xuyw 
                          15.  * @email xyw10000@163.com 
                          16.  * @date 2012-06-14 
                          17.  */  
                          18. public class HttpUtil {  
                          19.     // 连接超时时间  
                          20.     private static final int CONNECTION_TIMEOUT = 3000;  
                          21.     //读取超时时间  
                          22.     private static final int READ_TIMEOUT = 5000;  
                          23.     // 参数编码  
                          24.     private static final String ENCODE_CHARSET = “utf-8”;  
                          25.   
                          26.     /** 
                          27.      * 发送HTTP_POST请求 
                          28.      *  
                          29.      * @see 本方法默认的连接和读取超时均为30秒 
                          30.      * @param reqURL 
                          31.      *            请求地址 
                          32.      * @param params 
                          33.      *            发送到远程主机的正文数据[a:1,b:2] 
                          34.      * @return String 
                          35.      */  
                          36.     public static String postRequest(String reqURL, String… params) {  
                          37.         StringBuilder resultData = new StringBuilder();  
                          38.         URL url = null;  
                          39.         try {  
                          40.   
                          41.             url = new URL(reqURL);  
                          42.         } catch (MalformedURLException e) {  
                          43.             e.printStackTrace();  
                          44.         }  
                          45.         HttpURLConnection urlConn = null;  
                          46.         InputStreamReader in = null;  
                          47.         BufferedReader buffer = null;  
                          48.         String inputLine = null;  
                          49.         DataOutputStream out = null;  
                          50.         if (url != null) {  
                          51.             try {  
                          52.                 urlConn = (HttpURLConnection) url.openConnection();  
                          53.                 urlConn.setDoInput(true);// 设置输入流采用字节流  
                          54.                 urlConn.setDoOutput(true);// 设置输出流采用字节流  
                          55.                 urlConn.setRequestMethod(“POST”);  
                          56.                 urlConn.setUseCaches(false); // POST请求不能使用缓存  
                          57.                 urlConn.setInstanceFollowRedirects(true);  
                          58.                 urlConn.setConnectTimeout(CONNECTION_TIMEOUT);// 设置连接超时  
                          59.                 urlConn.setReadTimeout(READ_TIMEOUT); // 设置读取超时  
                          60.                 // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的  
                          61.                 urlConn.setRequestProperty(“Content-Type”,  
                          62.                         “application/x-www-form-urlencoded”);  
                          63.                 urlConn.setRequestProperty(“Charset”, ENCODE_CHARSET);//  
                          64.                 String param = sendPostParams(params);  
                          65.                 urlConn.setRequestProperty(“Content-Length”,  
                          66.                         param.getBytes().length + “”);//  
                          67.                 // urlConn.setRequestProperty(“Connection”, “Keep-Alive”);  
                          68.                 // //设置长连接  
                          69.                 urlConn.connect();// 连接服务器发送消息  
                          70.                 if (!“”.equals(param)) {  
                          71.                     out = new DataOutputStream(urlConn.getOutputStream());  
                          72.                     // 将要上传的内容写入流中  
                          73.                     out.writeBytes(param);  
                          74.                     // 刷新、关闭  
                          75.                     out.flush();  
                          76.                     out.close();  
                          77.   
                          78.                 }  
                          79.                 in = new InputStreamReader(urlConn.getInputStream(),  
                          80.                         HttpUtil.ENCODE_CHARSET);  
                          81.                 buffer = new BufferedReader(in);  
                          82.                 if (urlConn.getResponseCode() == 200) {  
                          83.                     while ((inputLine = buffer.readLine()) != null) {  
                          84.                         resultData.append(inputLine);  
                          85.                     }  
                          86.                 }  
                          87.             } catch (IOException e) {  
                          88.                 e.printStackTrace();  
                          89.             } finally {  
                          90.                 try {  
                          91.                     if (buffer != null) {  
                          92.                         buffer.close();  
                          93.                     }  
                          94.   
                          95.                     if (in != null) {  
                          96.                         in.close();  
                          97.                     }  
                          98.   
                          99.                     if (urlConn != null) {  
                          100.                         urlConn.disconnect();  
                          101.                     }  
                          102.                 } catch (IOException e) {  
                          103.                     e.printStackTrace();  
                          104.                 }  
                          105.             }  
                          106.         }  
                          107.         return resultData.toString();  
                          108.     }  
                          109.   
                          110.     /** 
                          111.      * 发送HTTP_GET请求 
                          112.      *  
                          113.      * @see 本方法默认的连接和读取超时均为30秒 
                          114.      * @param httpUrl 
                          115.      *            请求地址 
                          116.      * @param map 
                          117.      *            发送到远程主机的正文数据[a:1,b:2] 
                          118.      * @return String 
                          119.      */  
                          120.     public static String getRequest(String httpUrl, String… params) {  
                          121.         StringBuilder resultData = new StringBuilder();  
                          122.         URL url = null;  
                          123.         try {  
                          124.   
                          125.             String paramurl = sendGetParams(httpUrl, params);  
                          126.             url = new URL(paramurl);  
                          127.   
                          128.         } catch (MalformedURLException e) {  
                          129.             e.printStackTrace();  
                          130.         }  
                          131.         HttpURLConnection urlConn = null;  
                          132.         InputStreamReader in = null;  
                          133.         BufferedReader buffer = null;  
                          134.         String inputLine = null;  
                          135.         if (url != null) {  
                          136.             try {  
                          137.                 urlConn = (HttpURLConnection) url.openConnection();  
                          138.                 urlConn.setRequestMethod(“GET”);  
                          139.                 urlConn.setConnectTimeout(CONNECTION_TIMEOUT);  
                          140.                 in = new InputStreamReader(urlConn.getInputStream(),  
                          141.                         HttpUtil.ENCODE_CHARSET);  
                          142.                 buffer = new BufferedReader(in);  
                          143.                 if (urlConn.getResponseCode() == 200) {  
                          144.                     while ((inputLine = buffer.readLine()) != null) {  
                          145.                         resultData.append(inputLine);  
                          146.                     }  
                          147.                 }  
                          148.             } catch (IOException e) {  
                          149.                 e.printStackTrace();  
                          150.             } finally {  
                          151.                 try {  
                          152.                     if (buffer != null) {  
                          153.                         buffer.close();  
                          154.                     }  
                          155.   
                          156.                     if (in != null) {  
                          157.                         in.close();  
                          158.                     }  
                          159.   
                          160.                     if (urlConn != null) {  
                          161.                         urlConn.disconnect();  
                          162.                     }  
                          163.                 } catch (IOException e) {  
                          164.                     e.printStackTrace();  
                          165.                 }  
                          166.             }  
                          167.         }  
                          168.   
                          169.         return resultData.toString();  
                          170.     }  
                          171.   
                          172.     /** 
                          173.      * Post追加参数 
                          174.      *  
                          175.      * @see <code>params</code> 
                          176.      * @param reqURL 
                          177.      *            请求地址 
                          178.      * @param params 
                          179.      *            发送到远程主机的正文数据[a:1,b:2] 
                          180.      * @return 
                          181.      */  
                          182.     private static String sendPostParams(String… params) {  
                          183.         StringBuilder sbd = new StringBuilder(“”);  
                          184.         if (params != null && params.length > 0) {  
                          185.             for (int i = 0; i < params.length; i++) {  
                          186.                 String[] temp = params[i].split(“:”);  
                          187.                 sbd.append(temp[0]);  
                          188.                 sbd.append(“=”);  
                          189.                 sbd.append(urlEncode(temp[1]));  
                          190.                 sbd.append(“&”);  
                          191.   
                          192.             }  
                          193.             sbd.setLength(sbd.length() – 1);// 删掉最后一个  
                          194.         }  
                          195.         return sbd.toString();  
                          196.     }  
                          197.   
                          198.     /** 
                          199.      * Get追加参数 
                          200.      *  
                          201.      * @see <code>params</code> 
                          202.      * @param reqURL 
                          203.      *            请求地址 
                          204.      * @param params 
                          205.      *            发送到远程主机的正文数据[a:1,b:2] 
                          206.      * @return 
                          207.      */  
                          208.     private static String sendGetParams(String reqURL, String… params) {  
                          209.         StringBuilder sbd = new StringBuilder(reqURL);  
                          210.         if (params != null && params.length > 0) {  
                          211.             if (isexist(reqURL, “?”)) {// 存在?  
                          212.                 sbd.append(“&”);  
                          213.             } else {  
                          214.                 sbd.append(“?”);  
                          215.             }  
                          216.             for (int i = 0; i < params.length; i++) {  
                          217.                 String[] temp = params[i].split(“:”);  
                          218.                 sbd.append(temp[0]);  
                          219.                 sbd.append(“=”);  
                          220.                 sbd.append(urlEncode(temp[1]));  
                          221.                 sbd.append(“&”);  
                          222.   
                          223.             }  
                          224.             sbd.setLength(sbd.length() – 1);// 删掉最后一个  
                          225.         }  
                          226.         return sbd.toString();  
                          227.     }  
                          228.   
                          229.     // 查找某个字符串是否存在  
                          230.     private static boolean isexist(String str, String fstr) {  
                          231.         return str.indexOf(fstr) == –1 ? false : true;  
                          232.     }  
                          233.   
                          234.     /** 
                          235.      * 编码 
                          236.      *  
                          237.      * @param source 
                          238.      * @return 
                          239.      */  
                          240.     private static String urlEncode(String source) {  
                          241.         String result = source;  
                          242.         try {  
                          243.             result = java.net.URLEncoder  
                          244.                     .encode(source, HttpUtil.ENCODE_CHARSET);  
                          245.         } catch (UnsupportedEncodingException e) {  
                          246.             e.printStackTrace();  
                          247.         }  
                          248.         return result;  
                          249.     }  
                          250. }  



                           

                          标签