Визначення топологічних зв’язків за допомогою PostGIS


16

Я намагаюся провести базовий типологічний аналіз за допомогою PostGIS. Моя мета - знайти будь-які багатокутники, які стосуються інших багатокутників. Для цього я думав, що ST_GetFaceEdgesце спрацює ( посилання ). Я хочу перевірити кожен багатокутник у своїй базі даних та перерахувати всі інші багатокутники, які торкаються його. На зображенні нижче я б очікував, що результат скаже, що два багатокутники (це будівлі) торкаються однієї будівлі, а результати інших 4 говорять про те, що вони торкаються 0 багатокутників.

введіть тут опис зображення

Однак у мене виникають труднощі з розумінням, що робити. Коли я намагався скопіювати приклад, було кілька його частин, які я не зрозумів.

-- Returns the sequence, edge id
-- , and geometry of the edges that bound face 1
-- If you just need geom and seq, can use ST_GetFaceGeometry
SELECT t.seq, t.edge, geom
FROM topology.ST_GetFaceEdges('tt',1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

Я не впевнений, чи topologyце ім’я таблиці, стовпця чи частини функції. Я припускав, що це був стіл, але я не впевнений.

-- try out on sample of data
-- Table is called 'TestArea', column used is 'fid_1'
SELECT t.seq, t.edge, geom
FROM  TestArea.ST_GetFaceEdges('fid_1', 1) As t(seq,edge)
    INNER JOIN tt.edge AS e ON abs(t.edge) = e.edge_id;

Я також не впевнений, яка функція внутрішнього з'єднання - це приєднує результат до вихідного об'єкта?


4
Я знаю, що підкреслив відповів на це своїми характерно чіткими діаграмами, але я не впевнений у тому, чи спочатку ваші багатокутники топологічно пов'язані. Топологія в цьому випадку передбачає логічні відносини між сутностями, як окремі від їх візуального подання, і (в PostGIS) вимагає встановлення схеми з CreateTopologyі так далі ( bit.ly/oLk8QY ) Але так, як на мене виглядає дигіталізація ваших будівель наче вони топологічно відрізняються, незважаючи на візуальну близькість їхніх країв. Просто щось, про що мають знати майбутні розпитувачі.
MerseyViking

Чи означає це, що мені потрібно додати AddTopoGeometryColumnтаблицю до запуску запиту? На основі результатів зі ST_Touchesзначень я перевірив все, що має сенс, але, можливо, це було випадково.
djq

1
Вам не тільки потрібно дзвонити AddTopoGeometryColumn, але і ваші дані повинні бути оцифровані топологічно послідовно. Наприклад, за традицією ви оцифрували два двоквартирні будинки як два багатокутники та використовували "прив'язку до вершини" у вашому ГІС для забезпечення спільних дотиків до стіни, але вони зберігатимуться як дві збігаються лінії з збігом точок на кожному кінці. Але топологічно оцифровувати їх означає, що спільна стіна насправді є лише однією лінією та двома вузлами, що розділяються кожним багатокутником. ST_Touchesпросто проводить просторову перевірку близькості, а не топологічну.
MerseyViking

Відповіді:


19

Ви можете використовувати ST_Touches замість цього:

ST_Touches - повертає ІСТИНА, якщо геометрії мають принаймні одну точку спільного, але їх інтер'єри не перетинаються.

ST_Touches повертає TRUE для напр

введіть тут опис зображення

Отримання рахунків повинно працювати приблизно так:

SELECT a.id, count(*)
FROM polygon_table as a
JOIN polygon_table as b
  ON ST_Touches(a.the_geom,b.the_geom)
GROUP BY a.id

Мені цікаво дізнатися, скільки багатокутників торкається кожного багатокутника. Інакше це ідеально, і я змусив його працювати!
djq

1
Я щойно зрозумів, що він повертає справжнє / хибне значення для кожного випадку, тому все, що мені потрібно зробити, - це порахувати, скільки існує справжніх значень. Спасибі!
djq

5
Додано можливий запит підрахунку.
underdark
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.