Menggabungkan layer dengan elemen masing-masing dengan Topologi PostGIS


24

Saat ini saya menggunakan ekstensi topologi PostGIS, tetapi saya memiliki beberapa kesulitan dalam memahami cara kerja struktur:

Salah satu poin utama adalah penggunaan "layer": pada apa yang saya pahami, atribut fitur harus disimpan dalam tabel di luar skema topologi (yang dinamai topo_actualname) dan terdaftar sebagai layer dengan topologi itu AddTopoGeometryColumn.

Namun, apakah ada cara sederhana untuk bergabung dengan atribut (disimpan dalam tabel layer) dengan fitur masing-masing (unsur dalam node, faceatau edge_data)?

Sekarang, apa yang saya lakukan adalah:

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

Tapi saya kira keseluruhan layerkonsep agak tidak berguna jika saya harus tahu nama skema topologi dan nama layer untuk mendapatkan informasi yang saya inginkan.

Bahkan, saya pikir saya mengerti bahwa topokolom pada layer memiliki informasi yang cukup untuk mengetahui di mana topologi masing-masing, dan terlebih lagi topologyskema menyimpan referensi ke setiap tabel layer untuk setiap topologi.

Apakah ada cara singkat / sederhana / tepat untuk menggabungkan informasi? Saya mencari sesuatu di fungsi ekstensi topologi , tetapi tidak dapat menemukan sesuatu yang berguna.


3
Saya agak bingung tentang bagaimana Anda seharusnya memanfaatkan topologi, tetapi ini mungkin membantu. Anda dapat melemparkan TopoGeometrylangsung ke geometri: SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. Masalahnya adalah jika ujung-ujungnya terpecah nantinya, tampaknya geometri akan berubah sebagai hasilnya.
jpmc26

1
Yang Anda inginkan adalah alat atau operasi data seperti intersect, union, atau penggabungan. QGIS berfungsi dengan memposting GIS dan gratis dan memiliki alat seperti ini. Fitur ada di dalam lapisan dan bergabung ketika Anda menggabungkan lapisan berdasarkan jenis operasi tersebut.
lewis

Jawaban:


1

Pemetaan atribut ke topologi tidak langsung . The Hubungan adalah sesuatu seperti ini untuk node:

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

Jadi pernyataan pilih Anda akan lebih seperti ini:

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.