Нахождение самопересечений в многоугольниках Leaflet с использованием библиотеки JSTS

Я использую Mapbox с Leaflet Draw, и я хотел бы избежать самопересекающихся многоугольников.

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

Я искал вокруг и нашел библиотеку JSTS, которая делает именно то, что я хочу, и я также нашел этот JSFiddle для использования в качестве примера, где он работает на основе API Карт Google.

Поэтому я создал свой собственный JSFiddle с Mapbox на основе вышеупомянутых двух ссылок. Здесь, функция 'findSelfIntersects' включается, если это редактирование полигона, и не используется, если это новый полигон. Идея состоит в том, что, если есть пересечение, я покажу предупреждение пользователю и отменим редактирование. Однако, когда я пытаюсь сделать это, я получаю uncaught exception: [object Object] ошибка.

Кажется, ошибка сформирована в этой строке функции findSelfIntersects:

var shell = geometryFactory.createLinearRing(coordinates);

Я проверил координаты, возвращенные примером Google Maps, и это похоже на координаты, которые я получаю. Но я не уверен, почему я получаю эту ошибку.

1 ответ

Решение

Я только что заметил, что в примере с Google Maps начальная и конечная точки были одинаковыми в массиве координат, тогда как мои не были. Я пропустил это изначально. Теперь я добавил следующий код после цикла for, и он работает нормально.

coordinates.push(new jsts.geom.Coordinate(
    corners[0].lat, corners[0].lng));

Это обновленный JSFiddle на тот случай, если кто-то захочет использовать библиотеку JSTS с Mapbox/Leaflet.

Другие вопросы по тегам