天天看點

【百度地圖API】當位址解析失敗時,如何調用search方法查找位址

有個朋友問我,當位址解析失敗時,應該如何處理呢?比如,他想搜尋“南甯市青秀區”。

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

首先,我們需要弄明白,位址解析的原理:

使用Geocoder進行位址解析,比如“北京市海澱區上地10街”,當系統比對到這個位址時,getPoint就會傳回一個坐标點。

這裡需要用到回調函數。

var myGeo = new BMap.Geocoder();// 将位址解析結果顯示在地圖上,并調整地圖視野

myGeo.getPoint("北京市海澱區上地10街", function(point){

if (point) {

map.centerAndZoom(point, 16);

map.addOverlay(new BMap.Marker(point));

}}, "北京市"); 

當系統無法比對“北京市海澱區上地10街”的時候,會傳回“北京市海澱區”的幾何中心點。

如果還是無法比對,會傳回“北京市”的幾何中心點。

如果你隻是想傳回“北京市”的坐标,或者說想要模糊查詢,建議不要使用位址解析。

而是使用LocalSearch類的search方法。例子詳見:

http://www.cnblogs.com/milkmap/archive/2010/12/22/1914106.html

當位址解析失敗時,你可以調用localsearch函數。這個方法被稱之為模糊查詢。

在以下的例子裡,為了友善快捷,我取了第一個查詢結果。

這樣,當位址解析“南甯市青秀區”失敗時,會自動search這個位址,并打點在地圖上。

【百度地圖API】當位址解析失敗時,如何調用search方法查找位址

完整源代碼:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>位址解析失敗時搜尋</title>

<meta name="Generator" content="EditPlus">

<meta name="Author" content="">

<meta name="Keywords" content="">

<meta name="Description" content="">

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>

</head>

<body>

<div id="divMap" style="width:400px;height:400px;border:solid 1px gray"></div>

<script type="text/javascript">

var map = new BMap.Map("divMap");

map.centerAndZoom(new BMap.Point(108.532769,22.825487), 12); //這裡是定義到了南甯市

var gc = new BMap.Geocoder();

gc.getPoint("南甯市青秀區", function(pt){

if(pt){

map.addOverlay(new BMap.Marker(pt)); //如果位址解析成功,則添加紅色marker

}else{

var ls = new BMap.LocalSearch("南甯市");

ls.search("南甯市青秀區");

ls.setSearchCompleteCallback(function(rs){

if (ls.getStatus() == BMAP_STATUS_SUCCESS){

var poi = rs.getPoi(0); //取第1個查詢結果

if(poi){

var pt2 = poi.point;

map.addOverlay(new BMap.Marker(pt2)); //如果查詢到,則添加紅色marker

}

alert("fail");

});

}, "南甯市");

</script>

</body>

</html>