做者:卞功鑫 ,轉載請保留: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,若需升級,請從新獲取密鑰。