今天的主要内容是怎么在地图上绘制polygon并计算面积,绘制polyline并计算距离;
先介绍需要用到的几个工具;
首先是面积的计算,使用的turf.js中的area方法;
距离的计算,使用的是turf.js的distance方法;
绘制面和线使用的是leaflet的polygon和polyline;
实现的思路是:
第一,单击地图,获取点击点坐标,记录下来;
第二,每次点击的同时,将点击点和线绘制在地图上;
第三,当双击地图时,完成绘制,此时禁止点击和移动事件,并计算面积;
第四,使用popup在绘制面的中心位置展示面积大小;
距离的测量类似,不进行赘述;
代码如下:
measureArea () {
this.map.on("mousemove", e => {
var popup = L.popup().setLatLng(e.latlng).setContent('点击地图开始绘制');
this.map.openPopup(popup);
})
var pointStyle = { radius: 80, color: 'green', fillColor: 'green', fillOpacity: 1 };
var polygonStyle = { color: 'red', fillColor: 'red', fillOpacity: 0.5 };
var polygonPoints = []
var polygon = L.polygon([], polygonStyle);
var point;
var tempLines = new L.polygon([], { color: 'red', fillColor: 'red', fillOpacity: 0.1, dashArray: 5 }).addTo(this.map);
var ls = []
this.map.on('click', e => {
this.map.off("mousemove")
point = L.circle([e.latlng.lat, e.latlng.lng], pointStyle).addTo(this.map);
polygon.addLatLng([e.latlng.lat, e.latlng.lng]).addTo(this.map);
polygonPoints.push([e.latlng.lat, e.latlng.lng]);
this.map.on("mousemove", e => {
var popup1 = L.popup().setLatLng(e.latlng).setContent('双击地图停止绘制,输出面积');
this.map.openPopup(popup1);
if (polygonPoints.length > 0) {
ls = [polygonPoints[polygonPoints.length - 1], [e.latlng.lat, e.latlng.lng], polygonPoints[0]]
tempLines.setLatLngs(ls)
}
})
})
this.map.on('dblclick', () => {
this.map.off("click");
this.map.off("mousemove");
this.map.removeLayer(tempLines);
var firstPoint = polygonPoints[0];
polygonPoints.push(firstPoint);
var turfPolygon = turf.polygon([polygonPoints]);
var center = turf.centerOfMass(turfPolygon);
var area = turf.area(turfPolygon);
var popup = L.popup().setLatLng(center.geometry.coordinates).setContent('面积为:' + (area / 1000000).toFixed(3).toString() + "平方公里");
this.map.openPopup(popup);
})
}
效果如下:
距离测量效果图:

本文暂时没有评论,来添加一个吧(●'◡'●)