Я работаю с картами и полигонами Google, но мне нужно проверить, что многоугольники не перекрывают друг друга.
У меня есть функция, которая возвращает TRUE, когда точка (lat, lng) находится внутри многоугольника, но этого недостаточно, чтобы определить, находится ли каждая точка многоугольника внутри другого многоугольника.
Любое предложение?
google-maps
overlapping-features
Марсело Магарзо
источник
источник
Ответы:
Пример JSFiddle
Я создал JSFiddle, демонстрирующий решение вашей проблемы с использованием библиотеки JavaScript Topology Suite (JSTS) (JSTS).
Explaination
Есть два шага к этому подходу. Первый шаг преобразует ваши геометрии Google в выражения геометрии WellKnownText (WKT) , который широко поддерживается. На втором этапе используется JSTS для
geometry.intersects()
сравнения JSTS двух геометрий WKT.Чтобы действительно понять это, вам нужно иметь базовое понимание WKT. Поскольку геометрия полигонов на вашей карте Google не поддерживается широко, я немедленно преобразую их в геометрии WKT, чтобы мы могли работать с ними в JSTS.
Чтобы сделать это легко, я использовал библиотеку Wicket . Конечно, вы всегда можете прокомментировать свой собственный метод Google-Polygon-to-WKT, или вы можете использовать тот, который я написал однажды , или вы можете использовать другое решение, которое вы можете найти. Лично в эти дни я просто использую Wicket, который, как вы можете видеть, очень прост:
Далее идет мясо и картофель - с помощью JSTS взять две геометрии WKT и проверить, пересекаются ли они. Опять же, опираясь на библиотеку, в этом нет ничего особенного:
Как я связал библиотеки в скрипке
Скрипка, указанная выше, и решение, которое я продемонстрировал, требует добавления в ваш проект двух сторонних библиотек - JSTS и Wicket. Получение кода от их соответствующих Github и включение его в ваш проект - другое упражнение. Но для скрипки я связался с этими библиотеками, сославшись на них в существующем примере JSTS, который я нашел опубликованным Кристофером Мэннингом , а также на собственной демонстрационной странице Wicket . По сути, я открыл страницы, выбрал «Просмотр источника» и собрал соответствующие ссылки на две библиотеки. Это были точные конечные точки библиотеки, которые я использовал:
источник