Me gustaría crear un vectorLayer QGIS
para mostrar todos los puntos que forman una LINESTRING
o una MULTILINESTRING
almacenada en una base de PostGIS
datos.
Creo que necesito transformar todos los puntos de LINESTRING
(o MULTILINESTRING
) a POINT
.
Primera pregunta :
¿Hay alguna PostGIS
función para hacer eso?
Segunda pregunta :
Si quiero excluir puntos duplicados de la POINT
tabla de resultados , ¿cómo puedo hacer eso?
qgis
postgis
point
polyline-creation
linestring
Heisenbug
fuente
fuente
Respuestas:
Para obtener un punto en orden y un enlace a la geometría original, use
y elimine los duplicados de http://wiki.postgresql.org/wiki/Deleting_duplicates
recuerde que necesita tener una identificación única para eliminar duplicados, si no tiene una necesita crearla
fuente
SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
En cuanto a la primera pregunta, existe una función PostGIS solo para eso, ST_DumpPoints .
El primer ejemplo en la página de documentos es exactamente lo que necesita. Es una función de retorno de conjunto, por lo que no solo volca los puntos, sino también cierta información (la matriz de ruta) que los relaciona con la geometría original. Como solo te interesan los puntos, puedes probar algo como esto:
fuente
anuncio 1.
anuncio 2. Seleccione puntos duplicados PostGIS
fuente
OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this
. Podrías saltarte porST_AsEWKB()
completo, pero aún así no tendría ningún sentido, mira el último ejemplo en ST_PointFromWKBPara volcar solo puntos únicos, puede usar algunas subconsultas con una
SELECT DISTINCT ON
expresión :fuente