Gostaria de criar um vectorLayer QGIS
para exibir todos os pontos que formam um LINESTRING
ou um MULTILINESTRING
armazenado em um PostGIS
banco de dados.
Eu acho que preciso transformar todos os pontos de LINESTRING
(ou MULTILINESTRING
) para POINT
.
Primeira pergunta :
Existe alguma PostGIS
função para fazer isso?
Segunda pergunta :
Se eu quiser excluir pontos duplicados da POINT
tabela de resultados , como posso fazer isso?
qgis
postgis
point
polyline-creation
linestring
Heisenbug
fonte
fonte
Respostas:
Para obter pontos em ordem e vincular à geometria original, use
e remova os publicadores de http://wiki.postgresql.org/wiki/Deleting_duplicates
lembre-se de que você precisa ter um ID exclusivo para remoção pública, se não tiver um, precisará criá-lo
fonte
SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
No que diz respeito à primeira pergunta, existe uma função PostGIS apenas para isso, ST_DumpPoints .
O primeiro exemplo na página de documentos é exatamente o que você precisa. É uma função de retorno de conjunto, portanto, não apenas despeja os pontos, mas também algumas informações (a matriz do caminho) que os relaciona à geometria original. Como você se preocupa apenas com os pontos, tente algo assim:
fonte
anúncio 1.
anúncio 2. Selecione Pontos duplicados PostGIS
fonte
OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this
. Você poderia simplesmente ignorarST_AsEWKB()
por completo, mas ainda não faria qualquer sentido, ver o último exemplo em ST_PointFromWKBPara despejar apenas pontos exclusivos, você pode usar algumas subconsultas com uma
SELECT DISTINCT ON
expressão :fonte