Соединение слоев с соответствующими элементами с помощью топологии PostGIS

24

В настоящее время я использую расширение топологии PostGIS, но у меня есть некоторые трудности в понимании того, как работает структура:

Одним из ключевых моментов является использование «слоев»: насколько я понимаю, атрибуты объектов должны храниться в таблице из схемы топологии (названной topo_actualname) и регистрироваться как слой этой топологии с помощью AddTopoGeometryColumn.

Однако, есть простой способ , чтобы присоединиться к атрибутам (хранящиеся в таблице слоя) с соответствующими особенностями (элементами в node, faceили edge_data)?

Теперь, что я делаю, это:

SELECT whatever
FROM layer_tb l
     JOIN topo_topologyname.edge_data e ON (l.topo).id=edge_id;

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

На самом деле, я думаю, что я понял, что topoстолбец на уровне имеет достаточно информации, чтобы знать, где находится соответствующая топология, и, кроме того, topologyсхема хранит ссылку на каждую таблицу уровня для каждой топологии.

Существует ли короткий / простой / правильный способ объединения информации? Я искал что-то в функциях расширения топологии , но не смог найти ничего полезного.

Davide
источник
3
Я немного заблудился о том, как вы должны использовать топологии тоже, но это может помочь. Вы можете привести TopoGeometryнепосредственно к геометрии: SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. Дело в том, что если позже края будут разделены, кажется, что геометрия может измениться в результате.
jpmc26
1
Вам нужны инструменты или операции с данными, такие как пересечение, объединение или слияние. QGIS работает с почтовой ГИС и является бесплатной и имеет такие инструменты. Элементы находятся в слое и объединяются при объединении слоев на основе этих типов операций.
льюис

Ответы:

1

Сопоставление атрибутов с топологией не является прямым . Отношения что - то вроде этого для узла:

your_topogeom -> (topogeom_id) relation table (element_id)-> (node_id) node

Таким образом, ваш выбор оператора будет больше похож на это:

SELECT whatever
FROM layer_tb l
INNER JOIN relation AS r ON (((l.mytopogeom).id , (l.mytopogeom).layer_id)) = (r.topogeo_id, r.layer_id  )
INNER JOIN edge_data AS e ON (r.element_id = e.edge_id)
MappaGnosis
источник