Mehr

PostGIS, Länge, Fläche, Dichte des Liniennetzes


Ich versuche, die Länge und Dichte aller Hauptstraßen und Nebenstraßen innerhalb eines Untersuchungsgebiets herauszufinden, um Folgendes zurückzugeben:

|STUDYAREA|a_road_length|a_road_density|other_road_length|other_road_density

Innerhalb des Untersuchungsgebietes gibt es zwei Polygone - einen inneren Fokus und einen äußeren Puffer. Ich möchte die Länge und Dichte nach diesen beiden Bereichen gruppieren. Hauptstraßen sind nur ein Typ (a_roads), aber andere Straßen werden in zwei verschiedenen Beziehungen gespeichert

|a_road|name|geom |b_road|name|geom |minor_road|name|geom

Bisher kann ich die Länge jedes einzelnen mit ST_Length, die Fläche der Polygone mit ST_Area und die Dichte von a_road, aber nicht alle Elemente für alle Straßen zusammen in einem Ergebnis erhalten.

Vielleicht müssen Sie eine Unterabfrage verwenden oder

ANSICHT erstellen

aber unsicher, wie man all diese Elemente zusammenfügt.

Im obigen Beispiel kombinieren Sie die Länge und Dichte der roten Linie für den inneren und äußeren Bereich dann mit der grünen und gelben Länge und Dichte für den inneren und äußeren Bereich, um als "andere Straßen" zurückzukehren.


Sie müssen lediglich alle Straßen in einer einzigen "Tabelle" "zusammenführen".

Erstellen Sie für jede Straßentyptabelle eine Abfrage, die genau dieselbe Datenstruktur zurückgibt. Da sie alle in einer exakt gleichen Struktur sind, können Sie UNION ALL verwenden, um die Abfragen zu kombinieren. Sie können dies in eine WITH-Klausel einfügen und sie dann verwenden, als ob es eine einzelne Tabelle wäre, und Ihre Abfragen ausführen. Etwas wie das:

WITH all_roads as (SELECT name, geom FROM a_road UNION ALL SELECT name, geom FROM b_road UNION ALL SELECT name, geom FROM minor_road) SELECT… --mach deine Sachen FROM all_roads, study_area