六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 41|回复: 0

百度地图 利用测距工具动态画多边形Polygon

[复制链接]

升级  1.33%

14

主题

14

主题

14

主题

秀才

Rank: 2

积分
52
 楼主| 发表于 2013-1-29 08:38:38 | 显示全部楼层 |阅读模式
地图的基础代码不述
有一个应用:用户需要在地图上动态画多边形区域,并在区域上做一个操作。此处只讲述怎么画多边形区域。
看过一些网上资料,发现画多边形Polygon的小工具操作很是不便,也不够美观,多画几个点线一大堆,还有一个工具画到最后不知道如何结束。如下图


 
刚发现通过测距工具可以直观、方便的画出自已想要的任何多边形,代码如下:
导入测距工具类
<!-- 测距工具类 -->
<script type="text/javascript" src="http://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
 
   /**
      * ==============================================================
      * 利用测距LIB包来画多边形
      * 当测距画线结束时,沿着画线轨迹画出多边形
      * @ Genfa.H
      */

     //折线包含所有点的数组
    var points = [];
    //利用测距LIB包来画多边形
    var myDis = new BMapLib.DistanceTool(map);

    //画线结束时触发的事件
    myDis.addEventListener("drawend", function(e) {
    });

    //每次点击底图添加节点时触发的事件
    myDis.addEventListener("addpoint", function(e) {
        points.push(new BMap.Point(e.point.lng,e.point.lat));
    });

    //点击线段上最后一个节点旁的关闭按钮时触发的事件
    myDis.addEventListener("removepolyline", function(e) {
       
        //创建多边形
        var secRingPolygon = new BMap.Polygon(points, {strokeColor:"blue", strokeWeight:5, strokeOpacity:0.5});
        //添加多边形到地图上
        map.addOverlay(secRingPolygon);

        //当鼠标进入多边形区域时会触发此事件
        secRingPolygon.addEventListener("mouseover",function(){
            secRingPolygon.setStrokeColor("red");
            map.addOverlay(secRingLabel);
        });
        //给多边形添加鼠标"移动"事件
        secRingPolygon.addEventListener("mousemove",function(event){
            secRingLabel.setPosition(event.point);
        });

        //鼠标离开多边形时触发此事件。
        secRingPolygon.addEventListener("mouseout",function(){
            secRingPolygon.setStrokeColor("blue");
            map.removeOverlay(secRingLabel);
        });

        //点击多边形后会触发此事件。
        secRingPolygon.addEventListener("click",function(){
            map.zoomIn();
            secRingPolygon.setStrokeColor("red");
        });


        //创建多边形标签
        var secRingLabel = new BMap.Label("<b>XXXXLabelTitle</b>,XXXXXXXXXLabelContents",{offset: new BMap.Size(10,-10)});
        secRingLabel.setStyle({"z-index":"999999", "padding": "10px","width": "140px","border": "1px solid #ccff00"});
       

        //初始化多边形坐标,为下一次画多边形坐准备
        points = [];
    });
    //==========================================================================
 
相关的说明代码中都有注释,效果如下


 


如果觉得测距工具画线时带的路程提示无用,可以通过相关参数去改变。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表