Ich bin ziemlich neu in der Welt von GIS und insbesondere von PostGIS. Entschuldigen Sie mich bitte, wenn die Antwort offensichtlich erscheint ...
Ich möchte einige Gebäude analysieren. Eine Sache, die mich interessiert, sind ihre Fassadenoberflächen zusammen mit der jeweiligen Ausrichtung. Wie im Bild unten dargestellt, möchte ich die Länge und (normale) Ausrichtung aller Kanten in einer Reihe von Polygonen haben. Im Beispiel habe ich nur eine Oberfläche hervorgehoben.
Eine Ergebnistabelle könnte folgendermaßen aussehen:
building_id | edge_id | orientation | edge_length
-------------------------------------------------
1 | 1 | 315 | 10.0
1 | 2 | 45 | 7.0
1 | ... | ... | ...
Ich bin mir jedoch nicht sicher, ob es eine clevere Möglichkeit ist, das Ergebnis für die weitere Verarbeitung zu speichern (z. B. Abstand von der Kante zum nächsten Gebäude berechnen usw.). Meine Frage ist also zweifach:
- Gibt es eine effiziente PostGIS-Funktion, mit der die Kanten eines Polygons analysiert werden können? Falls es keine native PostGIS-Funktion gibt, wäre ich alternativ an einem Python-basierten Ansatz interessiert.
- Was wäre eine clevere Möglichkeit, das Ergebnis in einer PostGIS-Tabelle zu speichern, da die Polygone möglicherweise eine unterschiedliche Anzahl von Kanten haben?
Antworten:
Gestern hatte ich keine Zeit, es im Detail zu erstellen ... Sehen Sie meine Lösung in 4 Schritten:
Bei der letzten Abfrage erhalten Sie die Gebäude-IDs mit einer räumlichen Verknüpfung mithilfe von st_touches. Ich hoffe es hilft. Update - In qgis sieht die Lösung folgendermaßen aus:
quelle
UPDATE
sollte den Trick tun. Nochmals vielen Dank für diese großartige Lösung. Ich werde noch einige Tage warten, wenn andere Antworten erscheinen, bevor ich akzeptiere.ST_ForceRHR
? Diese Antwort scheint tatsächlich in Ordnung zu sein.ST_ForceRHR
Lösung zu finden, war aber nicht erfolgreich. Wäre dankbar für Hinweise ... Ich habe versuchtST_Dump(ST_Boundary(ST_ForceRHR(the_geom)))