根据经纬度获取所在城市以及根据地点获取经纬度


什么是Geocoding

Geocoding API是一个供程序员调用的、http形式的地图服务接口。主要服务那些非网页程序的调用。例如C#C++Java等开发语言都能发送http请求且能接收返回数据。

用户只需在请求的url字串中拼接好关键字或者经纬度信息,即可获取到相应的百度经纬度或者结构化地理信息。

Geocoding API有哪些功能?

Geocoding API包括地址解析和逆地址解析功能。

·        地址解析是指,由详细到街道的结构化地址得到百度经纬度信息,且支持名胜古迹、标志性建筑名称直接解析返回百度经纬度。例如:北京市海淀区中关村南大街27地址解析的结果是“lng:116.31985,lat:39.959836”百度大厦地址解析的结果是“lng:116.30815,lat:40.056885”

·        逆地址解析是指,由百度经纬度信息得到结构化地址信息。例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是江苏省苏州市虎丘区塔园路318


使用限制

目前无任何使用限制。请申请key,然后使用该接口。

如何使用

第一步,申请key,点击这里获取密钥,申请key需要注册百度账号;

第二步,拼写发送http请求的url,注意需使用第一步申请的key

第三步,接收http请求返回的数据(支持jsonxml格式)。

服务地址

服务地址

·        地址解析:根据地址获取坐标

http://api.map.baidu.com/geocoder?address=地址&output=输出格式类型&key=用户密钥&city=城市名

·        逆地址解析:根据坐标获取地址

http://api.map.baidu.com/geocoder?location=纬度,经度&output=输出格式类型&key=用户密钥

备注:

1. city属于可选参数,通常情况可以不使用,若解析无结果,请尝试增加此字段。

2. 支持名胜古迹、标志性建筑物名称解析返回百度经纬度坐标,如address=“百度大厦

3. 支持使用“*路与*路交叉口方式解析返回百度经纬度坐标,若地址库中存在该地址描述,返回百度经纬度坐标。

4. 若解析status字段为OK,若结果内容为空,原因分析及可尝试方法:

·       地址库里无此数据,本次结果为空。

·       加入city字段重新解析;

·       将过于详细或简单的地址更改至省市区县街道重新解析;

5. 特别提醒:逆地址解析location参数传入的参数格式是(纬度lat,经度lng)

接口参数

参数

是否必须

默认值

格式举例

含义

output

json

json或xml

输出格式为json或者xml

address

北京市海淀区上地十街10号

根据指定地址进行坐标的反定向解析

location

38.76623,116.43213
lat<纬度>,lng<经度>

根据指定坐标来进行地址的解析

city

“北京市”

“广州市”

地址所在的城市名

key

8cb976834235d8cbcde2dce4835ae191

用户申请注册的key

上表中addresslocation两个字段如果同时出现,则优先选择address执行地理编码功能。对于address字段可能会出现中文或其它一些特殊字符(如:空格),所以对于类似的字符都要进行编码处理,编码成 UTF-8 字符的二字符十六进制值,凡是不在下表中的字符都要进行编码。

字符集合

字符

URL非保留字

a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - _ . ~

URL保留字

! * ' ( ) ; : @ & = + $ , / ? % # [ ]

附注:

(1)javascript中一般采用encodeURIComponent函数对特殊字符进行编码。

(2) Java中可以使用函数URLEncoder.encode对特殊字符进行编码。

(3) C#中可以使用函数HttpUtility.UrlEncode对特殊字符进行编码。

(4) php中可以使用函数urlencode对特殊字符进行编码。

返回数据说明

返回结果(地址解析的结果)

 {status: '字符串状态常量', 取值如下:

 //OK成功

 INVILID_KEY 非法密钥

 INVALID_PARAMETERS 非法参数,参数错误时候给出。

 result: {   

 location: {

 lat:纬度:数值,

 lng:经度:数值

 },

 precise:’位置的附加信息,是否精确查找1为精确查找,0为不精确查找),

 confidence: 可信度,

 level:'级别'

 },

 }

返回结果(反地址解析的结果)

 {status: '字符串状态常量', 取值如下:

 //OK 成功

 INVILID_KEY 非法密钥  

 INVALID_PARAMETERS 非法参数,参数错误时候给出。

 result: {   

 location: {

 lat: 纬度:数值,

 lng: 经度:数值

 },

 formatted_address: ‘详细地址描述’,

 business: '周围商圈',

 addressComponent:{

 city:’城市名称’,

 district: ‘区县名称’,

 province:’省份名称’,

 street: ‘街道名称’,

 streetNumber: '门牌号码'

 },

 cityCode: '城市代码'

 }

 }

 

接口示例

根据详细地址获取坐标

http://api.map.baidu.com/geocoder?address=%E4%B8%8A%E5%9C%B0%E5%8D%81%E8%A1%9710%E5%8F%B7&output=json&key=37492c0ee6f924cb5e934fa08c6b1676

//根据上地十街10返回坐标“lng:116.307175, lat:40.057098”,以json格式输出

http://api.map.baidu.com/geocoder?address=%E4%B8%8A%E5%9C%B0%E5%8D%81%E8%A1%9710%E5%8F%B7&output=xml&key=37492c0ee6f924cb5e934fa08c6b1676

//根据上地十街十号返回坐标“lng:116.307175, lat:40.057098”,以xml格式输出

 

在指定城市内检索详细地址的坐标

http://api.map.baidu.com/geocoder?address=%E4%B8%8A%E5%9C%B0%E5%8D%81%E8%A1%9710%E5%8F%B7&output=json&key=37492c0ee6f924cb5e934fa08c6b1676&city=%E5%8C%97%E4%BA%AC%E5%B8%82

// 在北京市内根据上地十街10返回坐标“lng:116.307175, lat:40.057098”,以json格式输出

http://api.map.baidu.com/geocoder?address=%E4%B8%8A%E5%9C%B0%E5%8D%81%E8%A1%9710%E5%8F%B7&output=xml&key=37492c0ee6f924cb5e934fa08c6b1676&city=%E5%8C%97%E4%BA%AC%E5%B8%82

// 在北京市内根据上地十街10返回坐标“lng:116.307175, lat:40.057098”,以json格式输出

 

根据特定建筑物获取它的坐标

http://api.map.baidu.com/geocoder?address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&key=37492c0ee6f924cb5e934fa08c6b1676  //根据百度大厦名称返回坐标“lng:116.307175, lat:40.057098”,以json格式输入

http://api.map.baidu.com/geocoder?address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=xml&key=37492c0ee6f924cb5e934fa08c6b1676  //根据百度大厦名称返回坐标“lng:116.307175, lat:40.057098”,以xml格式输入

 

根据“*路与*路交叉路口类型地址描述获得它的坐标

 

根据坐标获取它的地址

http://api.map.baidu.com/geocoder?output=json&location=39.983424,%20116.322987&key=37492c0ee6f924cb5e934fa08c6b1676

//解析“lat:39.983424, lng:116.322987”坐标返回北京市海淀区中关村大街271101-08,以json格式输出

http://api.map.baidu.com/geocoder?output=xml&location=39.983424,%20116.322987&key=37492c0ee6f924cb5e934fa08c6b1676

//解析“lat:39.983424, lng:116.322987”坐标返回北京市海淀区中关村大街271101-08,以xml格式输出



[html]  view plain  copy
  1. 根据经纬度获取所在城市  
  2. public staticString getCity(Stringlongitude,String latitude) {  
  3.         HttpURLConnectionconnection = null;  
  4.         BufferedReaderreader = null;  
  5.         try {  
  6.             URL getUrl = newURL("http://api.map.baidu.com/geocoder?output=json&location="+latitude+",%20"+longitude+"&key=sO6GQc18t1BZrY1gWbMhgOOa");  
  7.             connection= (HttpURLConnection) getUrl.openConnection();  
  8.             connection.setConnectTimeout(5000);  
  9.             connection.setReadTimeout(5000);  
  10.             connection.connect();  
  11.             readernewBufferedReader(newInputStreamReader(connection.getInputStream()));  
  12.             StringBuilderbuilder = newStringBuilder();  
  13.             Stringline;  
  14.             while ((line =reader.readLine()) !=null) {  
  15.                 builder.append(line);  
  16.             }  
  17.             if (log.isDebugEnabled())  
  18.                 log.debug(builder.toString());  
  19.             //net.sf.json.JSONObject jsonObj =net.sf.json.JSONObject.fromObject(builder.toString());  
  20.             net.sf.json.JSONArray newArray =net.sf.json.JSONArray.fromObject("["+builder.toString()+"]");  
  21.             net.sf.json.JSONObjectobj = (net.sf.json.JSONObject)newArray.get(0);  
  22.            //System.out.println("newArray:"+newArray);  
  23.             //System.out.println("obj:"+obj);  
  24.             net.sf.json.JSONObjectresult = (net.sf.json.JSONObject)obj.get("result");  
  25.             net.sf.json.JSONObjectaddressComponent =(net.sf.json.JSONObject)result.get("addressComponent");  
  26.              String city =(String)addressComponent.get("city");  
  27.             return city;  
  28.              
  29.         }catch(Exception e) {  
  30.             e.printStackTrace();  
  31.             log.error(e.getMessage());  
  32.         }finally{  
  33.             try {  
  34.                 reader.close();  
  35.             }catch(IOException e) {  
  36.                 e.printStackTrace();  
  37.             }finally{  
  38.                 connection.disconnect();  
  39.             }  
  40.         }  
  41.         return null;  
  42.     }  
  43.    
  44.    
  45. /**  
  46.      * 根据地点获取经纬度  
  47.      *  
  48.      * @param address:地址   
  49.      * @param city:城市名如: 北京市  
  50.      * @return  
  51.      */  
  52.     //http://api.map.baidu.com/geocoder?address=%E4%B8%8A%E5%9C%B0%E5%8D%81%E8%A1%9710%E5%8F%B7&output=json&key=37492c0ee6f924cb5e934fa08c6b1676&city=%E5%8C%97%E4%BA%AC%E5%B8%82  
  53.     public staticString getLonandLat(String address,String city) {  
  54.         HttpURLConnection connectionnull;  
  55.         BufferedReader reader = null;  
  56.         try {  
  57.             //URL getUrl = newURL("http://api.map.baidu.com/geocoder?output=json&location="+latitude+",%20"+longitude+"&key=sO6GQc18t1BZrY1gWbMhgOOa");  
  58.             URL getUrl = newURL("http://api.map.baidu.com/geocoder?address="+address+"&output=json&key=sO6GQc18t1BZrY1gWbMhgOOa&city="+city);  
  59.             connection =(HttpURLConnection) getUrl.openConnection();  
  60.             connection.setConnectTimeout(5000);  
  61.             connection.setReadTimeout(5000);  
  62.             connection.connect();  
  63.             reader = new BufferedReader(newInputStreamReader(connection.getInputStream()));  
  64.             StringBuilder builder = new StringBuilder();  
  65.             String line;  
  66.             while ((line = reader.readLine()) != null) {  
  67.                 builder.append(line);  
  68.             }  
  69.             if (log.isDebugEnabled())  
  70.                 log.debug(builder.toString());  
  71.             //net.sf.json.JSONObjectjsonObj = net.sf.json.JSONObject.fromObject(builder.toString());  
  72.             net.sf.json.JSONArray  newArray =net.sf.json.JSONArray.fromObject("["+builder.toString()+"]");  
  73.             net.sf.json.JSONObjectobj = (net.sf.json.JSONObject)newArray.get(0);  
  74.             System.out.println("newArray:"+newArray);  
  75.             System.out.println("obj:"+obj);  
  76.             net.sf.json.JSONObjectresult = (net.sf.json.JSONObject)obj.get("result");  
  77.             net.sf.json.JSONObjectlocation = (net.sf.json.JSONObject)result.get("location");  
  78.             Double Lon =(Double)location.get("lng");  
  79.             Double Lat =(Double)location.get("lat");  
  80.             System.out.println("result:"+result);  
  81.             System.out.println("location:"+location);  
  82.             System.out.println("Lon:"+ Lon);  
  83.             System.out.println("Lat:"+Lat);  
  84.             return Lon + "," + Lat;  
  85.              
  86.         }catch(Exception e) {  
  87.             e.printStackTrace();  
  88.             log.error(e.getMessage());  
  89.         }finally{  
  90.             try {  
  91.                 reader.close();  
  92.             }catch(IOException e) {  
  93.                 e.printStackTrace();  
  94.             }finally{  
  95.                 connection.disconnect();  
  96.             }  
  97.         }  
  98.         return null;  
  99.     }  
  100.      
  101.     @Test  
  102.     public static void main(String args[]){  
  103.         /*  
  104.         Stringcity=WeixinUtil.getCity("116.322987","39.983424");  
  105.         System.out.println("city="+city);  
  106.         */  
  107.         //String lonlat=WeixinUtil.getLonandLat("北京市海淀区中关村大街27号1101-08室", "北京市");  
  108.         Stringlonlat=WeixinUtil.getLonandLat("北京市海淀区西土城路10号北京邮电大学学29","北京市");  
  109.         System.out.println("hello lulu lonlat="+lonlat);  
  110.     }  

文章来源:http://blog.csdn.net/lululove19870526/article/details/40741909
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值