Подтвердить что ты не робот

Как получить строку области из многоугольника с помощью leaflet.draw

Я пытаюсь получить измерения областей полигонов, поэтому я могу перечислить их в таблице в сторону карты рядом с именем многоугольника. Это то, что я пробовал без успеха:

$("#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
}

Любая помощь по этому поводу будет оценена!

4b9b3361

Ответ 1

Вы можете получить доступ к библиотеке геометрии геометрии, предоставляемой листом.

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);
  }
}

Как только вы подтвердите, что вы получаете область, вы можете просто назначить ее переменным, которые заполняют таблицу рядом с картой.

Примечание. По умолчанию площадь будет равна квадратным меткам.

Ответ 2

Здравствуйте, добавьте исправления:

var seeArea = L.GeometryUtil.geodesicArea(layer.getLatLngs() [0]);   console.log(seeArea);

Ответ 3

Я обнаружил, что ни один из приведенных выше ответов не работал для расчета площади несмежных полигонов. Вот пример многоangularьника, где вышеприведенные функции возвращают область 0:

Non-contiguous Polygon

Для тех, кому нужно это сделать, вот код, который работал для меня (с помощью функции L.GeometryUtil из Leaflet.draw):

var poly = // Your polygon layer here; may or may not be contiguous
var area = 0;
for (island of poly.getLatLngs()) {
    // If the polygon is non-contiguous, access the island
    if (island.length < 2) {
        island = island[0]
    }
    // Sum the area within each "island"
    area += L.GeometryUtil.geodesicArea(island);
}