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])