Вырежьте отверстия в полигоне с помощью листовки geoman

Я использую фантастический «геометрический листок» для рисования и редактирования геометрии, но у меня проблемы с пониманием того, как работает режущий инструмент. Как получить геометрию вырезанного слоя?

Это мой код:

mymap.on('pm:create', function(e) {        
                e.poly;
                var type = e.layerType,
                    layer = e.layer;
                $(document).ready(function() {
                        layer.on('pm:cut', ({ layer }) => {
                             console.log(layer.toGeoJSON());
                        });
                    var jsnPolygon = e.layer.toGeoJSON().geometry;
                    jsnPolygon = {
                        type: "MultiPolygon",
                        coordinates: [jsnPolygon.coordinates]
                    };
                    console.log(layer.toGeoJSON());
                })
            });

console.log дает мне тот же результат до и после резки, то есть координаты прямоугольника.

введите здесь описание изображения

---- ОБНОВИТЬ ---

Добавление console.log(JSON.stringify(e)); в соответствии с предложением возвращает эту ошибку:

Uncaught TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'e'
    |     property 'pm' -> object with constructor 'e'
    --- property '_layer' closes the circle

Поведение после завершения резки заключается в том, что у него все еще включен инструмент рисования / резки, хотя я не могу его «закончить».


person agh    schedule 05.03.2020    source источник


Ответы (2)


Пытаться:

map.on("pm:cut",function(e){
   console.log(e.layer.getLayers()[0].getLatLngs()); //or loop through with e.layer.eachLayer(func)
});
person Falke Design    schedule 05.03.2020
comment
При добавлении этого внутри pm:create я получаю сообщение об ошибке Uncaught TypeError: layer.getLayers is not a function. При добавлении его снаружи я получаю Uncaught TypeError: Cannot read property 'getLayers' of undefined. Любые предложения, как я могу реализовать это в моем коде выше? - person agh; 06.03.2020
comment
позвоните console.log(JSON.stringify(e), а затем добавьте вывод к своему вопросу - person Falke Design; 06.03.2020
comment
Ты был прав все это время. Я просто работал над старой версией leaflet.pm. При установке свежего обновления все работало отлично. Благодарю вас! - person agh; 09.03.2020

Вам нужно использовать правильное событие. Документы Geoman

// This fires when cutting event is completed
mymap.on('pm:cut', e => {
  // This is the full event object
  console.log(e)

  // This holds the new geometry
  console.log(e.layer.toGeoJSON())
})
person pk.    schedule 05.03.2020
comment
Я не уверен, что понимаю. Когда я добавляю этот код вне события pm:create, я получаю Uncaught TypeError: Cannot read property 'toGeoJSON' of undefined. Когда я добавляю его внутрь (вместо моего layer.on(pm:cut...), я получаю тот же результат, что и для первого console.log (когда был создан прямоугольник). Я до сих пор не понимаю новую геометрию. - person agh; 06.03.2020