Frage in etwa das gleiche wie das , aber ich muss PostGIS verwenden.
Ich habe eine Reihe von Polylinien und möchte sie alle n Meter entlang dieser Linien in Punkte umwandeln.
edit: Vielen Dank an Stefan. Meine letzte Abfrage war etwas anders, wahrscheinlich aufgrund einer älteren Version von PostGIS (1.5), aber am Ende bekam ich, was gebraucht wurde. Die Punkte wurden zu einer Heatmap der Straßendichte kombiniert.
Antworten:
Diese Abfrage sollte den Trick machen:
Zunächst wählen Sie mit die verschiedenen Linienfolgen aus Ihrer Polylinestring-Spalte aus
ST_Dump
Dann müssen Sie die Measure-Elemente mit definieren
ST_AddMeasure
, beginnend mit 0 (Beginn der Linienfolge) und dem Ende der Linienfolge (genauso wie die Länge der Linienfolge).Generate_series
Erstellt eine Reihe über diese Messung in Schritt 10. Hier können Sie definieren"n metres"
(in diesem Beispiel 10 Meter). Deri
Wert beginnt bei jedem Zeilenumbruch neu.Mit
ST_LocateAlong
undST_GeometryN
erstellen Sie eine mehrdimensionale Punktgeometrie.Zuletzt müssen Sie die X- und Y-Werte dieser Geometrie extrahieren und daraus einen Punkt erstellen.
Das Ergebnis könnte so aussehen:
BEARBEITEN
Um fair zu sein, möchte ich diese Informationen hinzufügen: Die Idee und die Abfrage in dieser Antwort werden aus einer Abfrage extrahiert, mit der ich in PostGIS Drapierlinien aus DEMs erstelle. Die hervorragende Umsetzung wird in diesem Artikel von Mathieu Leplatre erläutert.
quelle
WITH line AS
wird verwendet? Ich sehe anderswo keine Linie.WITH Query
bietet die Verwendung von temporären Tabellen für größere Abfragen. Hier einige Informationen: postgresql.org/docs/8.4/static/queries-with.html .line
wird in der nächsten Unterabfrage verwendetlinemeasure
. Die ausgewählten Daten in dieser Unterabfrage basieren auf den in derline
Unterabfrage getroffenen Auswahlen. Sie bauen aufeinander auf. Hoffe das hat geholfen!st_locate_along_measure
.