Saya mencoba melakukan analisis tipologi dasar menggunakan PostGIS. Tujuan saya adalah menemukan poligon yang menyentuh poligon lain. Untuk melakukan ini, saya pikir ST_GetFaceEdges
akan berhasil ( referensi ). Saya ingin memeriksa setiap poligon di basis data saya dan mendaftar semua poligon lain yang menyentuhnya. Pada gambar di bawah ini saya akan mengharapkan hasil untuk mengatakan bahwa dua poligon (yang merupakan bangunan) menyentuh satu bangunan, dan hasil 4 lainnya mengatakan bahwa mereka menyentuh 0 poligon.
Namun, saya mengalami kesulitan memahami apa yang harus dilakukan. Ketika saya mencoba menyalin contoh ada beberapa bagian yang tidak saya mengerti.
-- 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;
Saya tidak yakin apakah topology
nama tabel, kolom atau bagian dari fungsi. Saya berasumsi bahwa itu adalah meja, tetapi saya tidak yakin.
-- 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;
Saya juga tidak yakin apa fungsi gabungan dalam - apakah ini menggabungkan hasil ke objek asli?
CreateTopology
dan sebagainya ( bit.ly/oLk8QY ) Tapi cara bangunan Anda didigitalkan terlihat oleh saya seperti mereka berbeda secara topologi meskipun kedekatan visual tepi mereka. Hanya sesuatu yang perlu diperhatikan oleh penanya di masa depan.AddTopoGeometryColumn
tabel sebelum menjalankan kueri? Berdasarkan hasil dariST_Touches
nilai-nilai yang saya periksa semua masuk akal tapi mungkin itu kebetulan.AddTopoGeometryColumn
, tetapi data Anda harus didigitalkan dengan cara yang konsisten secara topologi. Misalnya, secara tradisional Anda akan mendigitalkan dua rumah semi-terpisah sebagai dua poligon dan menggunakan "snap to vertex" di GIS Anda untuk memastikan dinding bersama menyentuh, tetapi itu akan disimpan sebagai dua garis yang bertepatan dengan titik yang bertepatan di setiap ujungnya. Namun, mendigitalkan secara topologi berarti bahwa dinding yang dibagikan benar-benar hanya satu baris dan dua simpul dibagi oleh setiap poligon.ST_Touches
hanya melakukan pemeriksaan spasial untuk kedekatan, bukan yang topologis.Jawaban:
Anda dapat menggunakan ST_Touches sebagai gantinya:
ST_Touches mengembalikan TRUE untuk mis
Mendapatkan hitungan harus bekerja seperti ini:
sumber