百度地图API开发一——仿照现有测距效果实现测面功能

时间:2024-02-17 13:38:11

   最近做了一个百度地图API的开发项目,里面有测量距离和测量面积的功能需求。测量距离百度给出了封装好的javascript包——BMapLib.DistanceTool,效果如下: 

这个效果体验很好;测量面积也给出了开源javascript包——BMapLib.DrawingManger,如下:

 

但这个效果和体验就很差了。客户希望测量面积能实现和测距一样的效果体验(鼠标在移动绘制过程中实时显示绘制面积,且样式效果要一样),经过一番折腾,修改了百度测距的javascript包,终于搞定。先上效果图:



实现方法:

主要修改了DistanceTool开源包里面的鼠标点击事件distClick和鼠标移动事件distMove这两个方法。

1、通过单击事件distClick获取构造面的path,用到Polygon的setPath方法,然后加到地图中,并通过计算该Polygon的面积显示最终双击结束后提示框的总面积;

2、通过移动事件distMove获取鼠标移动过程的位置点point,利用Polygon类的setPositionAt方法生成动态的面。这一步需要计算鼠标移动过程中的实时面积,构造一个临时面polygon,并不需要加到地图中,在鼠标移动过程中将移动点point加到临时面path中,计算该Polygon的面积即为临时面积。

注:计算Polygon的面积采用百度开源库GeoUtils,BMapLib.GeoUtils.getPolygonArea方法。

如有不对之处,欢迎批评指正!

附下载地址:https://download.csdn.net/download/lezaicizhong/13203342

调用方式:

测距:

var myDis = new BMapLib.MeasureTool(map);
myDis.open(); //开启鼠标测距

myDis.close();//关闭鼠标测距

测面:

var myDis = new BMapLib.MeasureTool(map, { enableCalculate: true });
myDis.open(); //开启鼠标测面

myDis.close();//关闭鼠标测面