【高德地图API】从零开始学高德JS API(八)——地址解析与逆地址解析
摘要:无论是百度LBS开放平台,还是高德LBS开放平台,其调用量最高的接口,必然是定位,其次就是地址解析了,又称为地理编码。地址解析,就是将地址转换为经纬度。而逆地址解析,就是将经纬度转换为地址。经纬度一般是由专业测绘机构用GPS采集,然后使用国测局接口加密,最后呈现在互联网地图上的。而地址,这里说的是结构化的带街道门牌号的地址,比如“北京市朝阳区阜通东大街6号”,这个地址是由公安局颁发的。而将地址和经纬度一一对应起来,这个就是高德地图做的事情了,也就是地址解析接口的功能了。地址解析功能,实用性强,调用频次高,谷歌API的地址解析接口甚至是收费的!所以,现在有现成免费的接口,大家应该很开心呀。
---------------------------------------------------------------------------
使用高德提供的AMap.Geocoder插件即可实现地址解析,和逆地址解析。
地理编码类是指将地址信息和地理坐标点信息进行相互转化,包括将地址信息转换为地理坐标点的编码和将地理坐标点转换为地址信息的逆地理编码。
1、地理编码
地理编码是将地址信息转换为地理坐标点信息,你可以使用此项功能在指定位置添加一个点或是定位地图上的某个位置。接口为:
geocoder.getLocation("北京市海淀区苏州街");
代码:
vargeocoder;//加载地理编码插件mapObj.plugin(["AMap.Geocoder"],function(){geocoder=newAMap.Geocoder({radius:1000,//以已知坐标为中心点,radius为半径,返回范围内兴趣点和道路信息city:"010"//城市,默认:"全国"});//返回地理编码结果AMap.event.addListener(geocoder,"complete",geocoder_callBack);geocoder.getLocation("北京市海淀区苏州街");});
效果图:
2、逆地理编码
逆地理编码又称位置描述或地址解析,即从已知的经纬度坐标到对应的地址描述(如省市、街区、楼层、房间等)的转换。接口为:
geocoder.getAddress(lnglatXY);
代码:
vargeocoder;varlnglatXY=newAMap.LngLat(116.396574,39.992706);//加载地理编码插件mapObj.plugin(["AMap.Geocoder"],function(){geocoder=newAMap.Geocoder({radius:1000,//以已知坐标为中心点,radius为半径,返回范围内兴趣点和道路信息extensions:"all"//返回地址描述以及附近兴趣点和道路信息,默认"base"});//返回地理编码结果AMap.event.addListener(geocoder,"complete",geocoder_callBack);//逆地理编码geocoder.getAddress(lnglatXY);});
效果图:
3、全部源代码
<!DOCTYPEHTML><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"><title>地址解析</title><linkrel="stylesheet"type="text/css"href="zero.css"/><scriptlanguage="javascript"src="http://webapi.amap.com/maps?v=1.3&key=【您的key】"></script></head><bodyonLoad="mapInit()"><divid="iCenter"></div><divid="iControlbox"><ul><li><inputtype="text"id="key_11"value="116.51413"/><inputtype="text"id="key_12"value="39.912896"/><buttononclick="javascript:geocoder2();">逆地址解析</button></li><li><inputtype="text"id="key_2"value="北京市朝阳区大屯路304号"/><buttononclick="javascript:geocoder();">地址解析</button></li></ul></div><divid="result"></div></body><scriptlanguage="javascript">varmapObj;varresult;varmarker=[];varwindowsArr=[];functionmapInit(){mapObj=newAMap.Map('iCenter');//默认定位:初始化加载地图时,center及level属性缺省,地图默认显示用户所在城市范围};varMGeocoder;varkey_11;varkey_12;varkey_2;functiongeocoder2(){//POI搜索,关键字查询key_11=document.getElementById("key_11").value;key_12=document.getElementById("key_12").value;varlnglatXY=newAMap.LngLat(key_11,key_12);//document.getElementById('result').innerHTML="您输入的是:"+key_1;//加载地理编码插件mapObj.plugin(["AMap.Geocoder"],function(){MGeocoder=newAMap.Geocoder({radius:1000,extensions:"all"});//返回地理编码结果AMap.event.addListener(MGeocoder,"complete",geocoder_CallBack2);//逆地理编码MGeocoder.getAddress(lnglatXY);});//加点varmarker=newAMap.Marker({map:mapObj,icon:newAMap.Icon({p_w_picpath:"http://api.amap.com/Public/p_w_picpaths/js/mark.png",size:newAMap.Size(58,30),p_w_picpathOffset:newAMap.Pixel(-32,-0)}),position:lnglatXY,offset:newAMap.Pixel(-5,-30)});mapObj.setFitView();}//鼠标划过显示相应点varmarker2;functiononMouseOver(e){varcoor=e.split(','),lnglat=newAMap.LngLat(coor[0],coor[1]);if(!marker2){marker2=newAMap.Marker({map:mapObj,icon:"http://webapi.amap.com/p_w_picpaths/0.png",position:lnglat,offset:newAMap.Pixel(-10,-34)});}else{marker2.setPosition(lnglat);}mapObj.setFitView();}functiongeocoder_CallBack2(data){//回调函数varresultStr="";varroadinfo="";varpoiinfo="";varaddress;//返回地址描述address=data.regeocode.formattedAddress;//返回周边道路信息roadinfo+="<tablestyle='width:600px'>";for(vari=0;i<data.regeocode.roads.length;i++){varcolor=(i%2===0?'#fff':'#eee');roadinfo+="<trstyle='background-color:"+color+";margin:0;padding:0;'><td>道路:"+data.regeocode.roads[i].name+"</td><td>方向:"+data.regeocode.roads[i].direction+"</td><td>距离:"+data.regeocode.roads[i].distance+"米</td></tr>";}roadinfo+="</table>"//返回周边兴趣点信息poiinfo+="<tablestyle='width:600px;cursor:pointer;'>";for(varj=0;j<data.regeocode.pois.length;j++){varcolor=j%2===0?'#fff':'#eee';poiinfo+="<tronmouseover='onMouseOver(\""+data.regeocode.pois[j].location.toString()+"\")'style='background-color:"+color+";margin:0;padding:0;'><td>兴趣点:"+data.regeocode.pois[j].name+"</td><td>类型:"+data.regeocode.pois[j].type+"</td><td>距离:"+data.regeocode.pois[j].distance+"米</td></tr>";}poiinfo+="</table>";//返回结果拼接输出resultStr="<divstyle=\"font-size:12px;padding:0px04px2px;border-bottom:1pxsolid#C1FFC1;\">"+"<b>地址</b>:"+address+"<hr/><b>周边道路信息</b>:<br/>"+roadinfo+"<hr/><b>周边兴趣点信息</b>:<br/>"+poiinfo+"</div>";document.getElementById("result").innerHTML=resultStr;}functiongeocoder(){//地理编码返回结果展示key_2=document.getElementById("key_2").value;mapObj.plugin(["AMap.Geocoder"],function(){//加载地理编码插件MGeocoder=newAMap.Geocoder();//返回地理编码结果AMap.event.addListener(MGeocoder,"complete",geocoder_CallBack);MGeocoder.getLocation(key_2);//地理编码});}//地理编码返回结果展示functiongeocoder_CallBack(data){varresultStr="";//地理编码结果数组vargeocode=newArray();geocode=data.geocodes;for(vari=0;i<geocode.length;i++){//拼接输出htmlresultStr+="<spanstyle=\"font-size:12px;padding:0px04px2px;border-bottom:1pxsolid#C1FFC1;\">"+"<b>地址</b>:"+geocode[i].formattedAddress+""+"<b>坐标</b>:"+geocode[i].location.getLng()+","+geocode[i].location.getLat()+""+"<b>匹配级别</b>:"+geocode[i].level+"</span>";addmarker(i,geocode[i]);}mapObj.setFitView();document.getElementById("result").innerHTML=resultStr;}functionaddmarker(i,d){varlngX=d.location.getLng();varlatY=d.location.getLat();varmarkerOption={map:mapObj,icon:"http://webapi.amap.com/p_w_picpaths/"+(i+1)+".png",position:newAMap.LngLat(lngX,latY)};varmar=newAMap.Marker(markerOption);marker.push(newAMap.LngLat(lngX,latY));varinfoWindow=newAMap.InfoWindow({content:d.formattedAddress,autoMove:true,size:newAMap.Size(150,0),offset:{x:0,y:-30}});windowsArr.push(infoWindow);varaa=function(e){infoWindow.open(mapObj,mar.getPosition());};AMap.event.addListener(mar,"click",aa);}</script></html>
demo地址:http://zhaoziang.com/amap/zero_8_1.html
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。