PostGIS Topoloji ile katmanları ilgili elemanlarla birleştirmek


24

Şu anda PostGIS topoloji uzantısını kullanıyorum, ancak yapının nasıl çalıştığını anlamada bazı zorluklar yaşıyorum:

Kilit noktalardan biri de "katman" ların kullanılması: benim anladığım kadarıyla, özellikler öznitelikler topolojinin şemasının dışındaki bir tabloda (adlandırılmış olan topo_actualname) saklanmalı ve bu topolojinin bir katmanı olarak kaydedilmelidir AddTopoGeometryColumn.

Ancak, ilgili özellikler (elemanlarla (tabaka tablosunda saklanan) özelliklerini katılmak için basit bir yolu yoktur node, faceya da edge_data)?

Şimdi, yaptığım şey:

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

Ama layeristediğim bilgiyi elde etmek için hem topoloji şema adını hem de katman adını bilmek zorundaysam , tüm kavram oldukça işe yaramaz.

Aslında, topokatmandaki sütunun, ilgili topolojinin nerede olduğunu bilmek için yeterli bilgiye sahip olduğunu ve ayrıca topologyşemanın her topoloji için her katman tablosuna bir başvuru sakladığını anladığımı düşünüyorum .

Bilgiyi bir araya getirmenin kısa / basit / uygun bir yolu var mı? Topoloji genişletme işlevlerinde bir şey arıyordum , ancak yararlı bir şey bulamadım.


3
Topolojilerden nasıl yararlanmanız gerektiği konusunda biraz kayıbım, ama bu yardımcı olabilir. Bir yayınlayabileceğim TopoGeometrybir geometriye doğrudan: SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. Mesele şu ki, kenarlar daha sonra ayrılırsa, geometrinin sonuç olarak değişebileceği görülüyor.
jpmc26

1
İstediğiniz şey kesişme, birleştirme veya birleştirme gibi araçlar veya veri işlemleridir. QGIS GIS sonrası ile çalışır ve ücretsizdir ve bunun gibi araçlara sahiptir. Özellikler katman içindedir ve bu tür işlemlere göre katmanları birleştirdiğinizde birleştirilir.
lewis,

Yanıtlar:


1

Özelliklerin topolojiye eşlenmesi doğrudan değildir . İlişki bir düğüm için böyle bir şey olur:

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

Yani seçim ifadeniz şöyle olacaktır:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.