百度地圖實現鼠標繪制多邊形並獲取所有點坐標


 

百度地圖開放平台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("您選擇地址沒有解析到結果!");
        }
    }, "北京市");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM