【百度地圖API】如何進行地址解析與反地址解析?——模糊地址能搜尋到精確地理資訊!
摘要:
什麼是地址解析?
什麼是反地址解析?
如何運用地址解析,和反地址解析?
可以同時運用地址解析,和反地址解析麼?答案是,可以的。詳見最後一個示例與程式碼。
---------------------------------------------------------------------------------
一、地址解析
地址解析,是使用者輸入一個詳細到門牌號的地址。例如“北京市中關村南大街27號中央民族大學”,那麼地址解析介面,會返回一個經緯度Point。
介面定義如下:
getPoint(address:String, callback:Function, city:String)
對指定的地址進行解析。如果地址定位成功,則以地址所在的座標點Point
為引數呼叫回撥函式。否則,回撥函式的引數為null
。city
為地址所在的城市名,例如“北京市”。
程式碼示例:
// 建立地址解析器例項var myGeo =new BMap.Geocoder();// 將地址解析結果顯示在地圖上,並調整地圖視野myGeo.getPoint("北京市海淀區上地10街", function(point){
if (point) {
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
}
},
二、反地址解析
反地址解析,就是傳進去一個經緯度Point,它會返回一個詳細的地址。具體地址有多詳細,就要看百度資料庫裡的資料了。
介面定義如下:
getLocation(point:Point, callback:function[, options:LocationOptions])
對指定的座標點進行反向地址解析。如果解析成功,則回撥函式的引數為GeocoderResult
物件,否則回撥函式的引數為null
。
程式碼示例:
var gc =new BMap.Geocoder();map.addEventListener("click", function
var pt = e.point;
gc.getLocation(pt, function(rs){
var addComp = rs.addressComponents;
alert(addComp.province +", "+ addComp.city +", "+ addComp.district +", "+ addComp.street +", "+ addComp.streetNumber);
});
});
三、同時運用地址解析與反地址解析
在什麼情況下需要同時運用這兩個介面呢?
答案是,當你搜索一個模糊的地址,但卻想要返回一個精確的地址結果。
例如“上海市新華路”,但是你想知道“新華路”在哪個區縣的時候,你就可以同時利用這兩個介面。
完整HTML程式碼:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><title>地址解析+反地址解析</title><script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script></head><body><div style="width:520px;height:340px;border:1px solid gray" id="container"></div><div style="margin:10px 0;"><input type="text" style="width:300px;margin-right:10px;" value="新華路" id="searchValue"/><input type="button" value="搜尋" onclick="search()"/></div></body></html><script type="text/javascript">var map =new BMap.Map("container");map.centerAndZoom(new BMap.Point(121.461165,31.234095), 11);
function search(){
var myAddress = document.getElementById('searchValue').value;
var myGeo =new BMap.Geocoder();
myGeo.getPoint(myAddress, function(point){ //我輸入的是“知春路”,第一步getPoint是地址解析。if (point) {
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
myGeo.getLocation(point, function(rs){ //這裡彈出“知春路”的詳細地址資訊,第二步getLocation是反地址解析。var addComp = rs.addressComponents;
alert(myAddress+'的具體位置是:'+addComp.province +", "+ addComp.city +", "+ addComp.district +", "+ addComp.street +", "+ addComp.streetNumber);
});
}
}, "上海市"); //必須設定城市
}
</script>
地址解析+反地址解析示例說明:
1、執行以上HTML程式碼,會出現這樣一個輸入框,預設是新華路。點選搜尋按鈕。
2、經過了地址解析,與反地址解析後,得到了新華路所在地區的詳細地址!!!
3、把得到的座標標註出來。