什么是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請求返回的數據(支持json和xml格式)。
服務地址
服務地址
· 地址解析:根據地址獲取坐標
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 |
根據指定坐標來進行地址的解析 |
city |
否 |
“北京市” |
“廣州市” |
地址所在的城市名 |
key |
是 |
無 |
8cb976834235d8cbcde2dce4835ae191 |
用戶申請注冊的key |
上表中address和location兩個字段如果同時出現,則優先選擇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: '城市代碼'
}
}
接口示例
根據詳細地址獲取坐標
//根據“上地十街10號”返回坐標“lng:116.307175, lat:40.057098”,以json格式輸出
//根據“上地十街十號”返回坐標“lng:116.307175, lat:40.057098”,以xml格式輸出
在指定城市內檢索詳細地址的坐標
// 在北京市內根據“上地十街10號”返回坐標“lng:116.307175, lat:40.057098”,以json格式輸出
// 在北京市內根據“上地十街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格式輸入
根據“*路與*路交叉路口”類型地址描述獲得它的坐標
//根據“北一環路和阜陽路的交叉路口”名稱返回坐標“lng:117.294364, lat:31.885558”,以json格式輸入
//根據“北一環路和阜陽路的交叉路口”名稱返回坐標“lng:117.294364, lat:31.885558”,以xml格式輸入
根據坐標獲取它的地址
//解析“lat:39.983424, lng:116.322987”坐標返回“北京市海淀區中關村大街27號1101-08室”,以json格式輸出
//解析“lat:39.983424, lng:116.322987”坐標返回“北京市海淀區中關村大街27號1101-08室”,以xml格式輸出
為了更精確。建議使用同一種接口獲取經緯度跟地址