百度地图—绘制圆时实时显示圆半径详解编程语言

百度地图—绘制圆时实时显示圆半径

因为项目需要用到了地图的鼠标绘制工具,需求是在地图上圈选来选择地图上人员信息(地图上的marker点),这个百度地图本身是可以实现的。但客户提了一需求:在画圆的时候要实时的显示当前圆的半径。当时我的内心真是一万只草泥马飘过。。但秉着客户是上帝的理念,还是要满足客户的需求。话不多说,先看效果: 
![效果图](https://img-blog.csdn.net/20160808212003312) 

直接上代码:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
    <style type="text/css"> 
        body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";} 
        #allmap {width: 100%; height:500px; overflow: hidden;} 
        #result {width:100%;font-size:12px;} 
        dl,dt,dd,ul,li{ 
            margin:0; 
            padding:0; 
            list-style:none; 
        } 
        p{font-size:12px;} 
        dt{ 
            font-size:14px; 
            font-family:"微软雅黑"; 
            font-weight:bold; 
            border-bottom:1px dotted #000; 
            padding:5px 0 5px 5px; 
            margin:5px 0; 
        } 
        dd{ 
            padding:5px 0 0 5px; 
        } 
        li{ 
            line-height:28px; 
        } 
    </style> 
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=自己的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" /> 
    <!--加载检索信息窗口--> 
    <script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script> 
    <link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" /> 
    <title>鼠标绘制圆--实时显示圆半径</title> 
</head> 
<body> 
<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> 
<script type="text/javascript"> 
    // 百度地图API功能 
    var map = new BMap.Map('map'); 
    var poi = new BMap.Point(116.307852,40.057031); 
    map.centerAndZoom(poi, 16); 
    map.enableScrollWheelZoom(); 
    var overlay =null;//圆覆盖物 
    var label=null;//显示半径信息 
    /** 
     * 绘制完成后的事件 
     */ 
    var overlaycomplete = function(e) 
    { 
//            ....... 
//            添加绘制完成的逻辑 
 
        //圆完成后清除地图上的覆盖物 
        centerPoint=null; 
        overlay=e.overlay; 
        map.removeOverlay(label); 
        map.removeOverlay(overlay); 
    }; 
    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, //是否显示工具栏 
        drawingToolOptions: { 
            anchor: BMAP_ANCHOR_TOP_RIGHT, //位置 
            offset: new BMap.Size(5, 5), //偏离值, 
            drawingModes:[BMAP_DRAWING_CIRCLE ]// 只保留画圆模式 
        }, 
        circleOptions: styleOptions //圆的样式 
    }); 
    //添加鼠标绘制工具监听事件,用于获取绘制结果 
    drawingManager.addEventListener('overlaycomplete', overlaycomplete); 
    var centerPoint=null;//圆心 
    map.addEventListener("mousemove", showInfo); 
    /** 
     * 监听鼠标移动事件 
     */ 
    function showInfo(e){ 
        //判断当前是画圆的模式 
        if(drawingManager._mask!=null) 
        { 
            drawingManager._mask.addEventListener('mousedown', getCenter); 
            map.removeEventListener("mousemove", showInfo); 
        } 
    } 
    /** 
     * 得到当前圆的圆心坐标 
     */ 
    var getCenter = function (e) { 
        if (centerPoint == null) { 
            centerPoint=e.point; 
            drawingManager._mask.addEventListener("mousemove", showRadis); 
        } 
    } 
    /** 
     * 实时显示半径 
     */ 
    var showRadis= function (e) 
    { 
        var radius=drawingManager._map.getDistance(centerPoint, e.point); 
        if(!isNaN(radius)) 
        { 
            map.removeOverlay(label); //取消上一个显示半径的label 
            //添加文字标签 
            var opts = { 
                position : e.point,    // 指定文本标注所在的地理位置(当前鼠标的位置) 
                offset   : new BMap.Size(0, 0)    //设置文本偏移量 
            } 
            label = new BMap.Label("当前半径:"+(radius/1000).toFixed(2)+"公里", opts);  // 创建文本标注对象 
            label.setStyle({ 
                border:"1px solid #ccc", 
                maxWidth: "none ", 
            }); 
            map.addOverlay(label);//添加label 
        } 
    } 
</script> 
</body> 
</html> 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/13836.html

(0)
上一篇 2021年7月19日 16:13
下一篇 2021年7月19日 16:13

相关推荐

发表回复

登录后才能评论