原文:
有个朋友问我,当地址解析失败时,应该如何处理呢?比如,他想搜索“南宁市青秀区”。
-----------------------------------------------------------------------------
首先,我们需要弄明白,地址解析的原理:
使用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 } } else { alert( " fail " ); } }); } }, " 南宁市 " ); </ script > </ body > </ html >
posted on 2015-01-07 11:37 阅读( ...) 评论( ...)