Ich möchte eine vectorLayer erstellen QGIS
, um alle Punkte anzuzeigen, die eine LINESTRING
oder eine MULTILINESTRING
in einer Datenbank gespeicherte bilden PostGIS
.
Ich denke, dass ich alle Punkte von LINESTRING
(oder MULTILINESTRING
) umwandeln muss POINT
.
Erste Frage :
Gibt es eine PostGIS
Funktion, um das zu tun?
Zweite Frage :
POINT
Wie kann ich das tun, wenn ich doppelte Punkte aus der Ergebnistabelle ausschließen möchte?
qgis
postgis
point
polyline-creation
linestring
Heisenbug
quelle
quelle
Antworten:
Um Punkte in Ordnung zu bringen und mit der ursprünglichen Geometrie zu verknüpfen, verwenden Sie
und entfernen Sie dublicates von http://wiki.postgresql.org/wiki/Deleting_duplicates
Denken Sie daran, dass Sie eine eindeutige ID zum Entfernen von Dublicates benötigen. Wenn Sie keine haben, müssen Sie diese erstellen
quelle
SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
Für die erste Frage gibt es eine PostGIS-Funktion, ST_DumpPoints .
Das erste Beispiel auf der Dokumentenseite ist genau das, was Sie brauchen. Es handelt sich um eine Set-Return-Funktion, bei der nicht nur die Punkte ausgegeben werden, sondern auch einige Informationen (das Pfadarray), die sie mit der ursprünglichen Geometrie in Beziehung setzen. Da Sie sich nur um die Punkte kümmern, können Sie Folgendes ausprobieren:
quelle
ad 1.
Anzeige 2. Wählen Sie Doppelte Punkte PostGIS
quelle
OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this
. Sie könnten einfachST_AsEWKB()
ganz überspringen , aber es würde immer noch keinen Sinn ergeben, siehe das letzte Beispiel in ST_PointFromWKBUm nur eindeutige Punkte zu sichern, können Sie einige Unterabfragen mit einem
SELECT DISTINCT ON
Ausdruck verwenden :quelle