Javascript 如何使用传单.draw从多边形获取面积字符串
我正在尝试获取多边形的面积测量值,这样我就可以在地图一侧的表格中列出它们,在多边形名称旁边。这是我尝试过但没有成功的方法:Javascript 如何使用传单.draw从多边形获取面积字符串,javascript,leaflet,Javascript,Leaflet,我正在尝试获取多边形的面积测量值,这样我就可以在地图一侧的表格中列出它们,在多边形名称旁边。这是我尝试过但没有成功的方法: $("#polygon").on("click", function (){ createPolygon = new L.Draw.Polygon(map, drawControl.options.polygon); createPolygon.enable(); } var polygon = new L.featureGroup(); map.on(
$("#polygon").on("click", function (){
createPolygon = new L.Draw.Polygon(map, drawControl.options.polygon);
createPolygon.enable();
}
var polygon = new L.featureGroup();
map.on('draw:created', function (e) {
var type = e.layerType,
layer = e.layer;
if (type === 'polygon') {
polygons.addLayer(layer);
}
var seeArea = createPolygon._getMeasurementString();
console.log(seeArea); //Returns null
}
在此方面的任何帮助都将不胜感激 您可以访问随手册提供的几何工具库
var area = L.GeometryUtil.geodesicArea(layer.getLatLngs());
在您的示例中,您试图访问控件本身,这就是变量createPolygon所指定的对象。相反,您希望获取绘制的图层的面积
map.on('draw:created', function (e) {
var type = e.layerType,
layer = e.layer;
if (type === 'polygon') {
polygons.addLayer(layer);
var seeArea = L.GeometryUtil.geodesicArea(layer.getLatLngs());
console.log(seeArea);
}
}
验证是否获得该区域后,可以将其分配给填充地图旁边表格的变量
注意:默认情况下,面积单位为平方米
var seeArea=L.GeometryUtil.geodesicArea(layer.getLatLngs()[0]);
控制台日志(参见区域) 我发现上面的答案都不适用于计算非连续多边形的面积。下面是一个多边形示例,其中上述函数返回的面积为0: 对于需要这样做的任何人,以下是适用于我的代码(使用传单.draw中的
L.GeometryUtil
函数):
var poly=//这里是多边形层;可以是连续的,也可以不是连续的
var面积=0;
对于(poly.getLatLngs()岛){
//如果多边形不连续,请访问岛
如果(岛长<2){
孤岛=孤岛[0]
}
//将每个“岛”内的面积相加
面积+=L.GeometryUtil.geodesicArea(岛屿);
}
L.GeometryUtil.geodesicArea(layer.getLatLngs())[0]
应该可以获取该区域
map.pm.enableDraw('Polygon', {
snappable: true,
snapDistance: 20,
});
map.on('pm:create', e => {
const layer = e.layer
alert(turf.area(layer.toGeoJSON()))
});
但我最终使用了传单geoman free
来绘制,并使用turph.js
来获得该区域
map.pm.enableDraw('Polygon', {
snappable: true,
snapDistance: 20,
});
map.on('pm:create', e => {
const layer = e.layer
alert(turf.area(layer.toGeoJSON()))
});
请您添加一个提琴,好吗?请注意,这里的几何工具库指的是:。这对我不起作用:我一直在获取区域=0您需要访问getLatLngs结果的第一个位置:
let seeare=L.GeometryUtil.geodesicArea(layer.getLatLngs()[0])代码>