Листовка — Выбор нескольких объектов GeoJSON polygon с помощью плагина Leaflet-Geoman

#javascript #leaflet #polygon #geojson #leaflet-geoman

#javascript #листовка #полигон #geojson #листовка-geoman

Вопрос:

Я создаю приложение, которое требует выбора нескольких объектов polygon из файла GeoJSON и выделения их.

Мне удалось добиться этого с помощью плагина Leaflet-Geoman и прикрепления listener map.on(‘pm:create’) и используя LatLngBounds нарисованной фигуры, чтобы сделать выделение из файла с использованием intersects.

Однако, поскольку я также использую LatLngBounds из объектов GeoJSON, он выбирает объекты, которые находятся за пределами экстентов нарисованной фигуры. Я знаю, что это связано с использованием LatLngBounds, который создает ограничивающую рамку, используя северо-восточный и юго-западный углы объекта, а не просто геометрию самого объекта.

Есть ли способ сделать правильный выбор с помощью плагина pm: create или есть лучший способ сделать это?

Ниже приведен фрагмент кода, который я использую.

Фрагмент кода

Ответ №1:

Вы можете использовать мощную библиотеку Turf.js : Turf CDN

 map.on('pm:create',function (e) {
    if(e.shape == 'Rectangle' || e.shape == "Polygon"){
        geoJsonSelect = e.layer.toGeoJSON();
        var layers = map.pm.getGeomanLayers();
        layers = layers.filter(x => x !== e.layer);
        layers.forEach((layer)=>{
            if(turf.booleanContains(geoJsonSelect,layer.toGeoJSON())){
                console.log("Contains")
            }
        });
        e.layer.remove();
    }
});