百度地圖API 顯示區域邊界及地名定位
這個定位一共用了兩個方法組成
一個是定位繪制區域邊界線,另一個是地名定位
原理:
當用戶輸入省、市、縣、區這種大地名時,我們要定位用戶輸入的這個位置,並顯示輪廓,即調用getBoundary方法;
當用戶輸入鄉,街道,某個學校這樣的小地名時,這是由於區域太小,不需要對這片區域描邊時,我們再調用dw方法
<div id="l-map"></div> <div class="layout"> <input id="value" value="青山湖區長春村" type="text">
<input type="submit" onclick="pd()" value="定位"> </div>
//初始化地圖 var value='';var map = new BMap.Map("l-map"); map.centerAndZoom('北京市',10); map.enableScrollWheelZoom();
//定位區域,小地名,使用本地檢索方法 var dw=function(){ //value=document.getElementById('value').value; var local = new BMap.LocalSearch(map, { renderOptions:{map: map} }); local.setMarkersSetCallback(function(pois){ map.clearOverlays();//清除所有覆蓋物后,在疊加第一個點 var marker = new BMap.Marker(pois[0].point); map.addOverlay(marker); }) local.search(value); map.clearOverlays(); }
//獲取邊界 function getBoundary(){//獲取邊界 var bdary = new BMap.Boundary(); bdary.get(value, function(rs){ //獲取行政區域 map.clearOverlays(); //清除地圖覆蓋物 var count = rs.boundaries.length; //行政區域的點有多少個 for(var i = 0; i < count; i++){ var ply = new BMap.Polygon(rs.boundaries[i], { strokeWeight: 1, strokeColor: "#ff0000" }); //建立多邊形覆蓋物 map.addOverlay(ply); //添加覆蓋物 map.setViewport(ply.getPath()); //調整視野 } }); }
//正則表達式,滿足條件后調用 var patter=/['省'|'市'|'區'|'縣']$/; var pd=function(){ value=document.getElementById('value').value; if(patter.test(value)==true){//關鍵字結尾是省市縣區就調用下面方法 getBoundary(); if(/社區|小區$/.test(value)==true){//因為區后面結尾,會有小區和社區,即做了一個字方法 dw(); } }else{//關鍵字結尾沒有省市縣區結尾就調用此方法 dw(); } }