百度地图实现鼠标绘制多边形并获取所有点坐标

百度地图开放平台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="获取绘制的覆盖物个数" οnclick="alert(overlays.length)"/>
        <input type="button" value="清除所有覆盖物" οnclick="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("您选择地址没有解析到结果!");
        }
    }, "北京市");

复制代码

 


文章出处:https://www.cnblogs.com/fozero

百度地图API提供了绘制多边形的功能。通过使用百度地图JavaScript API提供的相关函数和方法,我们可以很方便地绘制出具有多个边界的多边形。 在绘制多边形的Demo中,首先需要在HTML页面中引入百度地图的JavaScript库,并创建一个地图的容器。然后,通过调用`new BMap.Map`函数创建一个地图实例。接下来,可以通过百度地图提供的`getDrivingRoute`函数来获取行驶路线的坐标点,从而确定多边形的边界。 一旦获得了路线的坐标点,我们可以通过`new BMap.Polygon`函数创建一个多边形实例,并将路线的坐标点作为参数传入。然后,调用地图实例的`addOverlay`方法将多边形添加到地图中。 为了能够看到整个多边形,可以使用`setViewport`方法将地图的中心和缩放级别调整到合适的置。最后,使用`enableScrollWheelZoom`方法可以开启鼠标滚轮缩放功能。 通过以上步骤,我们就可以成功绘制出一个路多边形的Demo。当用户使用鼠标滚轮进行缩放时,地图中的多边形也会相应地进行放大或缩小,从而展现出不同的效果。 值得一提的是,百度地图API还支持自定义多边形的样式和交互行为。我们可以通过设置多边形的属性,如线条颜色、填充颜色、透明度等,来实现不同的样式效果。同时,可以注册相关的事件监听器,如点击事件、鼠标移入、移出事件等,以实现多边形的响应。 通过百度地图API提供的绘制多边形的功能,我们可以方便地在地图上展示复杂的路线和区域边界信息,为用户提供更加直观和交互性的地图应用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值