原文:
摘要:
什么是地址解析?
什么是反地址解析?
如何运用地址解析,和反地址解析?
可以同时运用地址解析,和反地址解析麼?答案是,可以的。详见最后一个示例与代码。
---------------------------------------------------------------------------------
一、地址解析
地址解析,是用户输入一个详细到门牌号的地址。例如“北京市中关村南大街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 (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、把得到的坐标标注出来。