有個朋友問我,當位址解析失敗時,應該如何處理呢?比如,他想搜尋“南甯市青秀區”。
-----------------------------------------------------------------------------
首先,我們需要弄明白,位址解析的原理:
使用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這個位址,并打點在地圖上。

完整源代碼:
<!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>