Как узнать, в каком полигоне находится точка? Как найти, в каком полигоне находится точка?
У меня в таблице polygons хранятся полигоны районов РФ. Их 8 штук, планируется большое увеличение их количества. Структура:
region_id (int), lat (decimal, 8, 6), lng (decimal, 9, 6).region_id - ID районаlat - широта точкиlng - долгота точки
Как найти, к какому полигону принадлежит точка? Как оптимизировать запрос под нагрузки? Мне нужно узнать лишь region_id полигона
Гугл дает только инфу как проверить что точка в регионе

21 Авг 2019 в 06:16
233 +1
0
Ответы
1

Для определения к какому полигону принадлежит точка, можно воспользоваться функцией ST_Contains или ST_Within из расширения PostGIS для работы с геоданными в PostgreSQL.

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

SELECT region_id
FROM polygons
WHERE ST_Contains(
ST_GeomFromText('POINT(lat lng)', 4326),
polygon_geom
);

В данном примере предполагается, что у вас также есть столбец polygon_geom в таблице polygons, в котором хранятся геометрии полигонов в формате геометрического типа данных (например, POLYGON).

Чтобы оптимизировать запрос под нагрузки, рекомендуется создать пространственный индекс на столбце polygon_geom, что значительно ускорит выполнение запроса для большого количества полигонов.

Для этого можно использовать следующую команду:

CREATE INDEX idx_polygon_geom ON polygons USING GIST (polygon_geom);

Таким образом, оптимизированный запрос будет быстро определять к какому полигону принадлежит точка по её координатам широты и долготы.

20 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир