Использование ST_Union в сочетании с ST_contains - PullRequest
0 голосов
/ 01 мая 2020

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

enter image description here

В базе данных также есть набор полилиний. Моя цель - объединить все полигоны в один, а затем извлечь все те полилинии, которые полностью находятся в большом полигоне. Я просто хочу использовать запрос выбора для этой цели. Я попробовал приведенный ниже скрипт, но я мог бы реализовать ST_Union внутри этого патча скрипта.

> Select * From tbl.A a, tbl.b b  where
> ST_Contains(a.geometry,b.geometry) and pol_id in ('1','2','3')

Выше возвращает полилинии внутри каждого полигона, но те полилинии, которые наполовину в темно-зеленом полигоне и наполовину в фиолетовом полигоне, не извлекаются. Я уверен, что ST_Union здесь поможет, но я не уверен, как это реализовать. Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 01 мая 2020

Вы можете использовать CTE для установки sh "объединенного" многоугольника:

WITH polygon AS (
   SELECT ST_Union(polygon_table.geometry) from polygon_table
)
SELECT
  *
FROM
    linestring_table
  JOIN
    polygon ON ST_Contains(polygon.geometry, linestring_table.geometry)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...