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

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

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

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

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

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

var shell = geometryFactory.createLinearRing(coordinates);

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


person Raj    schedule 05.12.2017    source источник


Ответы (1)


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

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

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

person Raj    schedule 05.12.2017