百度地圖開放平台http://lbsyun.baidu.com/
這里使用的是Javascript API http://lbsyun.baidu.com/index.php?title=jspopular
實現鼠標繪制多邊形主要用到百度地圖JavaScript開源庫鼠標繪制工具條庫(http://lbsyun.baidu.com/index.php?title=open/library),提供鼠標繪制點、線、面、多邊形(矩形、圓)的編輯工具條的開源代碼庫。且用戶可使用JavaScript API對應覆蓋物(點、線、面等)類接口對其進行屬性(如顏色、線寬等)設置、編輯(如開啟線頂點編輯等)等功能。基於Baidu Map API 1.4。
注:JavaScript 開源庫不支持極速版JavaScript API。
好了 ,上面介紹完了,那我們可以開始搞。先看下效果圖,
這里繪制了四個坐標點,全部打印出來如下
准備工作,先引入百度地圖API文件
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=密鑰需申請"></script> <!--加載鼠標繪制工具--> <script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script> <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
html代碼
<div id="allmap" style="overflow:hidden;zoom:1;position:relative;"> <div id="map" style="height:100%;-webkit-transition: all 0.5s ease-in-out;transition: all 0.5s ease-in-out;"></div> </div> <div id="result"> <input type="button" value="獲取繪制的覆蓋物個數" onclick="alert(overlays.length)"/> <input type="button" value="清除所有覆蓋物" onclick="clearAll()"/> </div>
javascript代碼
// 百度地圖API功能 var map = new BMap.Map('map'); var poi = new BMap.Point(116.307852,40.057031); map.centerAndZoom(poi, 16);//設置中心點坐標和地圖級別 map.enableScrollWheelZoom(); //啟用鼠標滾動對地圖放大縮小 //鼠標繪制完成回調方法 獲取各個點的經緯度 var overlays = []; var overlaycomplete = function(e){ overlays.push(e.overlay); var path = e.overlay.getPath();//Array<Point> 返回多邊型的點數組 for(var i=0;i<path.length;i++){ console.log("lng:"+path[i].lng+"\n lat:"+path[i].lat); } }; var styleOptions = { strokeColor:"red", //邊線顏色。 fillColor:"red", //填充顏色。當參數為空時,圓形將沒有填充效果。 strokeWeight: 3, //邊線的寬度,以像素為單位。 strokeOpacity: 0.8, //邊線透明度,取值范圍0 - 1。 fillOpacity: 0.6, //填充的透明度,取值范圍0 - 1。 strokeStyle: 'solid' //邊線的樣式,solid或dashed。 } //實例化鼠標繪制工具 var drawingManager = new BMapLib.DrawingManager(map, { isOpen: false, //是否開啟繪制模式 enableDrawingTool: true, //是否顯示工具欄 drawingMode:BMAP_DRAWING_POLYGON,//繪制模式 多邊形 drawingToolOptions: { anchor: BMAP_ANCHOR_TOP_RIGHT, //位置 offset: new BMap.Size(5, 5), //偏離值 drawingModes:[ BMAP_DRAWING_POLYGON ] }, polygonOptions: styleOptions //多邊形的樣式 }); //添加鼠標繪制工具監聽事件,用於獲取繪制結果 drawingManager.addEventListener('overlaycomplete', overlaycomplete); function clearAll() { for(var i = 0; i < overlays.length; i++){ map.removeOverlay(overlays[i]); } overlays.length = 0 }
以上鼠標繪制主要用到類BMapLib.DrawingManager,具體參數使用可查看http://api.map.baidu.com/library/DrawingManager/1.4/docs/symbols/BMapLib.DrawingManager.html
需要注意的是drawingToolOptions可選參數里面的drawingModes,工具欄上可以選擇出現的繪制模式,將需要顯示的DrawingType以數組型形式傳入,如[BMAP_DRAWING_MARKER, BMAP_DRAWING_CIRCLE] 將只顯示畫點和畫圓的選項,總共有以下五個常量,可根據自己情況選擇是否添加顯示
BMAP_DRAWING_MARKER 畫點
BMAP_DRAWING_CIRCLE 畫圓
BMAP_DRAWING_POLYLINE 畫線
BMAP_DRAWING_POLYGON 畫多邊形
BMAP_DRAWING_RECTANGLE 畫矩形
在回調overlaycomplete這個地方e.overlay.getPath()返回多邊型的點數組Array<Point>,參考類Polygon
http://developer.baidu.com/map/reference/index.php?title=Class:覆蓋物類/Polygon
如果知道某個地理位置名稱,想要一開始就根據這個地理位置名稱去設置中心點坐標,可以通過對地址解析獲取經緯度然后再設置中心點坐標
// 創建地址解析器實例 var myGeo = new BMap.Geocoder(); // 將地址解析結果顯示在地圖上,並調整地圖視野 myGeo.getPoint("北京市海淀區上地10街", function(point){ if (point) { map.centerAndZoom(point, 16); map.addOverlay(new BMap.Marker(point)); }else{ alert("您選擇地址沒有解析到結果!"); } }, "北京市");