1. 程式人生 > >【百度地圖API】如何進行地址解析與反地址解析?——模糊地址能搜尋到精確地理資訊!

【百度地圖API】如何進行地址解析與反地址解析?——模糊地址能搜尋到精確地理資訊!

摘要:

  什麼是地址解析?

  什麼是反地址解析?

  如何運用地址解析,和反地址解析?

  可以同時運用地址解析,和反地址解析麼?答案是,可以的。詳見最後一個示例與程式碼。

---------------------------------------------------------------------------------

一、地址解析

地址解析,是使用者輸入一個詳細到門牌號的地址。例如“北京市中關村南大街27號中央民族大學”,那麼地址解析介面,會返回一個經緯度Point。

介面定義如下:

getPoint(address:String, callback:Function, city:String)

對指定的地址進行解析。如果地址定位成功,則以地址所在的座標點Point為引數呼叫回撥函式。否則,回撥函式的引數為nullcity為地址所在的城市名,例如“北京市”。

程式碼示例:

複製程式碼 // 建立地址解析器例項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
(e){       
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、把得到的座標標註出來。