MariaDB: обнаружение, если круговой радиус от точки широты и долготы пересекает многоугольник - PullRequest
0 голосов
/ 25 октября 2018

Я создаю фрагмент поиска по карте Google, в котором я могу указать местоположение и «радиус».Затем я пытаюсь получить результаты определенных областей (определенных как полигоны в моей БД), которые пересекает поиск по радиусу.

В настоящее время я использую следующий запрос (код php для некоторой ясности):

$km = ($miles * 1.852) * 1000;
$sql = "SELECT * FROM Regions WHERE ST_Intersects(poly, ST_BUFFER(ST_GeomFromText('POINT({$lat} {$lng})'), {$km}))"

База данных Regions имеет полигональное поле poly, которое содержит данные полигона значений широты и долготы.Однако при поиске в радиусе 5 миль я получаю все полигоны в базе данных.

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

Любая помощь будет в значительной степениоценили!Спасибо.

1 Ответ

0 голосов
/ 26 октября 2018

Для тех, у кого возникла подобная проблема, я обнаружил проблемы, с которыми я столкнулся.

При сохранении значения 'polygon' в базе данных вы должны указать значения как "широта долготы",в то время как я хранил их наоборот.Я предполагаю, что это потому, что lng / lat имеет формат x / y.

Затем я также использовал методы из класса, найденного здесь https://github.com/bcalik/php-circle-to-polygon, для генерации многоугольника.Затем использовал его так:

SELECT id FROM Regions WHERE ST_Intersects(poly, GEOMFROMTEXT('POLYGON((" . implode(",", $circle) . "))', 0))

Где $circle - массив $longitude $latitude строковых значений.

Метод ST_BUFFER все еще может работать, но теперь у меня он работает, я нене планирую больше с ним связываться :)

...