Я искал способ проверить, является ли точка частью многоугольника; этот многоугольник загружается из файла.
Все ответы, связанные с этим вопросом, решаются с помощью javascript, но я требую сделать это на стороне сервера; это потому, что результат не должен отображаться пользователю как веб-клиенту, его необходимо сохранить, а затем использовать в качестве параметра для выбора группы пользователей (использующих систему) внутри этой области (многоугольник).
Я искал API Карт Google для PHP, но похоже, что он вообще не существует. Я нашел этот , но он не связан с Google, а также фокусируется на интерфейсе.
Я также искал API REST; было бы относительно легко загрузить контент на мой php и проанализировать его, но похоже, что Google приложил все усилия к JS API.
Есть ли обходной путь для этого?
Редактирование 1 : Как запросил @Spacedman, формат файла – KML
Разъяснение 1 : Я ожидал, что Google предоставит инструмент для этого (как это существует с JS); синтаксический анализ файла для проверки по алгоритму является вероятностью, и я должен проверить, работает ли он правильно.
Вы пытались найти «точку php в полигоне» в своей любимой поисковой системе? Топ-хит:
http://assemblysys.com/php-point-in-polygon-algorithm/
Он использует алгоритм scanline, и есть некоторые примеры. Все, что вам нужно сделать, – это прочитать ваш полигональный файл в нужном формате (вы пренебрегли тем, чтобы сказать, какой у вас формат) и вызвать функцию.
Вы можете попробовать что-то вроде этого (в php должно быть похоже):
int iCheck=0; for (i = 0, v = HowManyVecotrsHasThePolygon - 1; i < HowManyVecotrsHasThePolygon; v = i++) { if (((vectorPointLatitud[i] > ptoLatitud) != (vectorPointLatitud[v] > ptoLatitud)) && (ptoLongitud < (vectorPointLongitud[v] - vectorPointLongitud[i]) * (ptoLatitud - vectorPointLatitud[i]) / (vectorPointLatitud[v] - vectorPointLatitud[i]) + vectorPointLongitud[i])) iCheck++; }
если iCheck – пара, то точка снаружи, даже внутри
Оформить заказ Полигоны Эрик Хейнс . Я получил от него эту идею.
Идея заключается в том, что вы должны создать Рэй из своей точки и проверить, сколько пересечений между этим лучом и векторами Полигонов
Алгоритм – это всего лишь немного алгебры, которую вы можете проверить в любой книге.
Вы можете использовать расширение PHP V8 PECL для выполнения javascript в PHP. В качестве альтернативы вы можете вызвать скрипт node.js, используя команду оболочки (которая по сути делает то же самое).