Проверьте, находится ли Google Map Point в полигоне с PHP

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

Все ответы, связанные с этим вопросом, решаются с помощью javascript, но я требую сделать это на стороне сервера; это потому, что результат не должен отображаться пользователю как веб-клиенту, его необходимо сохранить, а затем использовать в качестве параметра для выбора группы пользователей (использующих систему) внутри этой области (многоугольник).

Я искал API Карт Google для PHP, но похоже, что он вообще не существует. Я нашел этот , но он не связан с Google, а также фокусируется на интерфейсе.

Я также искал API REST; было бы относительно легко загрузить контент на мой php и проанализировать его, но похоже, что Google приложил все усилия к JS API.

Есть ли обходной путь для этого?

Редактирование 1 : Как запросил @Spacedman, формат файла – KML

Разъяснение 1 : Я ожидал, что Google предоставит инструмент для этого (как это существует с JS); синтаксический анализ файла для проверки по алгоритму является вероятностью, и я должен проверить, работает ли он правильно.

Solutions Collecting From Web of "Проверьте, находится ли Google Map Point в полигоне с PHP"

Вы пытались найти «точку 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, используя команду оболочки (которая по сути делает то же самое).

http://php.net/manual/en/book.v8js.php

http://php.net/manual/en/function.shell-exec.php