做者:卞功鑫 ,转载请保留:http://www.cnblogs.com/BinBinGo/p/5682725.html javascript
http://api.map.baidu.com/geocoder/v2/?ak=xxx&coordtype=wgs84ll&callback=renderReverse&location=37.58585,118.8889&output=xml&pois=1php
其中html
ak 为百度密钥java
callback 不知道啥意思,反正就是这么写的.web
output 能够为xml 也能够为json算法
百度的优势就是没有调用次数限制,这点比腾讯的10000/天好多了.json
如今都有次数限定了,惟一比较好点的是高德,因此再也不推荐百度或者腾讯 .api
如下为百度内容:数组
Geocoding API 是一类简单的HTTP接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可使用C# 、C++、Java等开发语言发送HTTP请求且接收JSON、XML的返回数据。安全
Geocoding API包括地址解析和逆地址解析功能:
地理编码:即地址解析,由详细到街道的结构化地址获得百度经纬度信息,例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”。同时,地理编码也支持名胜古迹、标志性建筑名称直接解析返回百度经纬度,例如:“百度大厦”地址解析的结果是“lng:116.30815,lat:40.056885” ,通用的POI检索需求,建议使用Place API。
逆地理编码:即逆地址解析,由百度经纬度信息获得结构化地址信息,例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。
使用限制:
百度地图Geocoding API是一套免费对外开放的API,默认配额6000次/天,若需更高配额,请申请开发者认证以获取更高配额和更及时技术支持。
使用方法:
第一步:申请ak(即获取密钥),若无百度帐号则首先须要注册百度帐号。
第二步,拼写发送http请求的url,注意需使用第一步申请的ak。
第三步,接收http请求返回的数据(支持json和xml格式)。
Hello, World示例:
发送一个地址是“百度大厦”的请求,返回该地址对应的地理坐标。示例URL以下:
服务地址:
http://api.map.baidu.com/geocoder/v2/
组成说明:
域名:api.map.baidu.com
服务名:geocoder
服务版本号:较以前版本,v2版本新增参数。
参数 | 是否必须 | 默认值 | 格式举例 | 含义 |
---|---|---|---|---|
output | 否 | xml | json或xml | 输出格式为json或者xml |
ak | 是 | 无 | E4805d16520de693a3fe707cdc962045 | 用户申请注册的key,自v2开始参数修改成“ak”,以前版本参数为“key” |
sn | 否 | 无 | 若用户所用ak的校验方式为sn校验时该参数必须。 (sn生成算法) | |
callback | 否 | 无 | callback=showLocation(JavaScript函数名) | 将json格式的返回值经过callback函数返回以实现jsonp功能 |
地理编码专属请求参数:
参数 | 是否必须 | 默认值 | 格式举例 | 含义 参数 |
---|---|---|---|---|
address | 是 | 无 | 北京市海淀区上地十街10号 | 根据指定地址进行坐标的反定向解析,最多支持100个字节输入。 能够输入三种样式的值,分别是: 注意:后两种方式并不老是有返回结果,只有当地址库中存在该地址描述时才有返回。 |
city | 否 | “北京市” | “广州市” | 地址所在的城市名。用于指定上述地址所在的城市,当多个城市都有上述地址时,该参数起到过滤做用。 |
对于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保留字 | ! * ' ( ) ; : @ & = + $ , / ? % # [ ] |
附注:
一、javascript中通常采用encodeURIComponent函数对特殊字符进行编码;
二、Java中可使用函数URLEncoder.encode对特殊字符进行编码;
三、C#中可使用函数HttpUtility.UrlEncode对特殊字符进行编码;
四、php中可使用函数urlencode对特殊字符进行编码。
地理编码示例:
如下是关于地理编码参数使用方法的示例。发送请求显示结果的JavaScript代码此处查看。
请求示例:对北京市百度大厦进行地理编码查询;
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderOption&output=json&address=百度大厦&city=北京市
地理编码返回结果字段:
名称 |
类型 |
说明 |
|
status |
Int |
返回结果状态值, 成功返回0,其余值请查看下方返回码状态表。 |
|
location |
object |
经纬度坐标 |
|
lat |
float |
纬度值 |
|
lng |
float |
经度值 |
|
precise |
Int |
位置的附加信息,是否精确查找。1为精确查找,即准确打点;0为不精确,即模糊打点。 |
|
confidence |
Int |
可信度,描述打点准确度 |
|
level |
string |
地址类型 |
json格式的返回值:
//带回调函数的返回格式 showLocation&&showLocation( { status: 0, result: { location: { lng: 116.30814954222, lat: 40.056885091681 }, precise: 1, confidence: 80, level: "商务大厦" } } ) //不带回调函数的返回值 { status: 0, result: { location: { lng: 116.30814954222, lat: 40.056885091681 }, precise: 1, confidence: 80, level: "商务大厦" } }
xml格式的返回值:
<GeocoderSearchResponse> <status>0</status> <result> <location> <lat>40.056885091681</lat> <lng>116.30814954222</lng> </location> <precise>1</precise> <confidence>80</confidence> <level>商务大厦</level> </result> </GeocoderSearchResponse>
特别说明: 若解析status字段为OK,但结果内容为空,缘由分析及可尝试方法: 一、地址库里无此数据,本次结果为空; 二、加入city字段从新解析; 三、将过于详细或简单的地址更改至省市区县街道从新解析。
逆地理编码专属请求参数:
参数 | 是否必须 | 默认值 | 格式举例 | 含义 |
---|---|---|---|---|
coordtype |
否 |
bd09ll |
bd09ll 百度经纬度坐标 |
坐标的类型,目前支持的坐标类型包括:bd09ll(百度经纬度坐标)、bd09mc(百度米制坐标)、gcj02ll(国测局经纬度坐标)、wgs84ll( GPS经纬度) |
location |
是 |
无 |
38.76623,116.43213 lat<纬度>,lng<经度> |
根据经纬度坐标获取地址 |
pois |
否 |
0 |
0 |
是否显示指定位置周边的poi,0为不显示,1为显示。当值为1时,显示周边100米内的poi。 |
状态字段:
名称 | 类型 | 说明 |
---|---|---|
status | constant | 返回结果状态值, 成功返回0,其余值请查看附录。 |
location | lat | 纬度坐标 |
lng | 经度坐标 | |
formatted_address | 结构化地址信息 | |
business | 所在商圈信息,如 "人民大学,中关村,苏州街" | |
addressComponent | country | 国家 |
province | 省名 | |
city | 城市名 | |
district | 区县名 | |
street | 街道名 | |
street_number | 街道门牌号 | |
adcode | 行政区划代码 | |
country_code | 国家代码 | |
direction | 和当前坐标点的方向,当有门牌号的时候返回数据 | |
distance | 和当前坐标点的距离,当有门牌号的时候返回数据 | |
pois(周边poi数组) | addr | 地址信息 |
cp | 数据来源 | |
direction | 和当前坐标点的方向 | |
distance | 离坐标点距离 | |
name | poi名称 | |
poiType | poi类型,如’ 办公大厦,商务大厦’ | |
point | poi坐标{x,y} | |
tel | 电话 | |
uid | poi惟一标识 | |
zip | 邮编 | |
sematic_description | constant | 当前位置结合POI的语义化结果描述。 |
json示例:
xml示例:
特别说明:
一、由于Geocoding和反Geocoding使用的门址数据以及算法都不是同样的,因此会出现不能一一对应的现象。
二、逆地址解析location参数传入的参数格式是(纬度lat,经度lng)。
返回码 | 定义 |
---|---|
0 | 正常 |
1 | 服务器内部错误 |
2 | 请求参数非法 |
3 | 权限校验失败 |
4 | 配额校验失败 |
5 | ak不存在或者非法 |
101 | 服务禁用 |
102 | 不经过白名单或者安全码不对 |
2xx | 无权限 |
3xx | 配额错误 |
v2版本较之v1版本,功能更新详见更新日志。若需查看v1文档,请点击目录 “Geocoding APIv1.0”。
若v1版本升级至v2版本,地理/逆地理编码的请求url,参数:新增版本号“v2”,修改“key”为“ak”。v2不兼容v1版本的key,若需升级,请从新获取密钥。