Как проверить, пересекается ли многоугольник в одной таблице с точкой и радиусом из второй таблицы? - PullRequest
1 голос
/ 07 августа 2020

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

  • первая таблица у нас есть поле (name: area), введите geometry, которое содержит polygon.
  • вторая таблица у нас есть 2 поля:
    • поле (имя: pt), тип: geometry который содержит point
    • поле (имя : radius), введите: int

Значения геометрии в WKB формате

Я хочу проверить, многоугольник пересекается с кругом (точка + радиус).

Как это сделать?

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Вы можете использовать функцию ST_Distance , чтобы найти расстояние между многоугольником и точкой. Если расстояние между ними меньше радиуса, то многоугольник будет пересекаться кругом вокруг точки с этим радиусом.

Пример запроса:

SELECT *
FROM polygon_table, circle_table
WHERE ST_Distance(polygon_table.area, circle_table.pt) <= circle_table.radius;
0 голосов
/ 07 августа 2020

Используйте ST_Contains, чтобы проверить, находится ли точка внутри многоугольника, а затем вычислить буфер вокруг вашей точки и посмотреть, пересекаются ли они, с ST_Buffer и ST_Intersects соответственно. Что-то вроде:

SELECT *
FROM polygon_table t1, circle_table t2
WHERE 
  ST_Contains(t1.area, t2.pt) AND 
  ST_Intersects(ST_Buffer(t2.pt,t2.radius),t1.area)

Примечание: буфер будет создан с использованием модуля вашей SRS. Например, если вы используете WGS84, он будет в градусах. Если вы хотите вместо этого использовать метры, используйте geography вместо geometry или просто введите его в реальном времени, например t1.area::geography.

...