Поиск в базе данных данных с привязкой к координатам для произвольной полигональной области

StackOverflow https://stackoverflow.com/questions/624135

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Каков был бы наилучший способ достичь этого?

Кроме того, возможно, стоит отметить, что небольшие ошибки допустимы (т.е.если есть эффективный способ превратить многоугольник в набор прямоугольников, то это прекрасно).

Это было полезно?

Решение

Используйте пространственные расширения, большинство баз данных имеют это. В MySql вы можете использовать их только с таблицами MyISAM, которые не являются транзакционными.

http://dev.mysql.com/doc /refman/5.0/en/spatial-extensions.html

Другие советы

Один из способов быстро сократить количество рассматриваемых точек - вычислить ограничивающий прямоугольник для многоугольника (т. е. просто min-x, min-y, max-x, max-y точек в многоугольнике). , а затем выберите точки внутри ограничивающего прямоугольника (т. е. где x находится между min-x и max-x и то же самое для y).

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

Старый хак:

Подсчитайте, сколько раз линия соединялась <point far away> Для <point in question> пересекает любой из ограничивающих сегментов многоугольника.

  • Четные числа означают, что точка находится за пределами многоугольника
  • Нечетные числа означают, что он находится внутри многоугольника
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top