zoukankan      html  css  js  c++  java
  • 百度地图实现鼠标绘制多边形并获取所有点坐标

    百度地图开放平台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+"
     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("您选择地址没有解析到结果!");
            }
        }, "北京市");
  • 相关阅读:
    Linux常用命令整理
    Linux脚本无法进入目录
    mysql5.7.初始化后,临时密码过期
    通过scp 命令向远程Linux服务器传输文件
    Linux进入单用户模式修改root密码
    Kali Linux安装谷歌输入法
    kali 安装pip命令
    CentOS 7 防火墙设置
    CentOS7 安装python 3.7
    CentOS 7安装完成之后无法联网
  • 原文地址:https://www.cnblogs.com/fozero/p/5912287.html
Copyright © 2011-2022 走看看