Ich versuche mit PostGIS eine grundlegende Typologieanalyse durchzuführen. Mein Ziel ist es, alle Polygone zu finden, die andere Polygone berühren. Um dies zu tun, dachte ich, das ST_GetFaceEdges
würde funktionieren ( Referenz ). Ich möchte jedes Polygon in meiner Datenbank überprüfen und alle anderen Polygone auflisten, die es berühren. Im Bild unten würde ich erwarten, dass das Ergebnis besagt, dass zwei der Polygone (die Gebäude sind) ein Gebäude berühren, und die Ergebnisse der anderen 4 besagen, dass sie 0 Polygone berühren.
Ich habe jedoch einige Schwierigkeiten zu verstehen, was zu tun ist. Als ich versuchte, das Beispiel zu kopieren, gab es einige Teile davon, die ich nicht verstand.
-- 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;
Ich bin nicht sicher, ob topology
der Name einer Tabelle, Spalte oder ein Teil der Funktion ist. Ich nahm an, dass es der Tisch war, aber ich bin mir nicht sicher.
-- 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;
Ich bin mir auch nicht sicher, welche Funktion der innere Join hat. Verbindet dieser das Ergebnis mit dem ursprünglichen Objekt?
CreateTopology
usw. ( bit.ly/oLk8QY ). Aber die Art und Weise, wie Ihre Gebäude digitalisiert werden, ist für mich von Bedeutung als ob sie trotz der visuellen Nähe ihrer Ränder topologisch verschieden wären. Nur etwas, auf das zukünftige Fragesteller achten sollten.AddTopoGeometryColumn
der Tabelle ein hinzufügen muss , bevor die Abfrage ausgeführt wird? Basierend auf den ErgebnissenST_Touches
der überprüften Werte ergab alles Sinn, aber vielleicht war das Zufall.AddTopoGeometryColumn
, sondern Ihre Daten müssen auch topologisch konsistent digitalisiert werden. Normalerweise digitalisieren Sie beispielsweise zwei Doppelhaushälften als zwei Polygone und verwenden die Option "An Scheitelpunkt ausrichten" in Ihrem GIS, um die gemeinsame Wandberührung sicherzustellen. Sie werden jedoch als zwei übereinstimmende Linien mit übereinstimmenden Punkten an jedem Ende gespeichert. Die topologische Digitalisierung bedeutet jedoch, dass die gemeinsam genutzte Wand nur eine Linie und zwei Knoten umfasst, die von jedem Polygon gemeinsam genutzt werden.ST_Touches
Es wird lediglich eine räumliche Überprüfung auf Nähe durchgeführt, keine topologische.Antworten:
Sie könnten stattdessen ST_Touches verwenden:
ST_Touches liefert TRUE für zB
Das Abrufen der Zähler sollte in etwa so funktionieren:
quelle