З’єднання шарів з відповідними елементами за допомогою PostGIS Topology


24

Зараз я використовую розширення топології PostGIS, але у мене є труднощі в розумінні того, як працює структура:

Одним із ключових моментів є використання "шару" s: наскільки я розумію, характеристики атрибутів слід зберігати в таблиці поза схемою топології (названої 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схема зберігає посилання на таблицю шарів для кожної топології.

Чи існує короткий / простий / правильний спосіб об’єднання інформації? Я шукав щось у функціях розширення топології , але не зміг знайти нічого корисного.


3
Я трохи розгубився з тим, як ви також повинні використовувати топології, але це може допомогти. Ви можете привести TopoGeometryбезпосередньо до геометрії: SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. Річ у тім, що якщо краї згодом розщепляться, здається, що в результаті геометрія може змінитися.
jpmc26

1
Вам потрібні інструменти або операції з передачею даних, такі як пересікання, з'єднання або злиття. QGIS працює з поштовими ГІС та є безкоштовним та має такі інструменти. Особливості є в шарі та з'єднуються під час об'єднання шарів на основі цих типів операцій.
lewis

Відповіді:


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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.