Je voudrais créer un vectorLayer QGIS
pour afficher tous les points qui forment un LINESTRING
ou un MULTILINESTRING
stocké dans une base de PostGIS
données.
Je pense que je dois transformer tous les points de LINESTRING
(ou MULTILINESTRING
) en POINT
.
Première question :
Y a-t-il une PostGIS
fonction pour le faire?
Deuxième question :
Si je veux exclure les points en double de la POINT
table des résultats , comment puis-je faire cela?
qgis
postgis
point
polyline-creation
linestring
Heisenbug
la source
la source
Réponses:
Pour obtenir un point dans l'ordre et un lien vers la géométrie d'origine, utilisez
et supprimez les doublons de http://wiki.postgresql.org/wiki/Deleting_duplicates
rappelez-vous que vous devez avoir un identifiant unique pour supprimer les doublons, si vous n'en avez pas, vous devez le créer
la source
SELECT (ST_DumpPoints(the_geom)).path as path, id, (ST_DumpPoints(the_geom)).geom FROM linestrings
En ce qui concerne la première question, il existe une fonction PostGIS juste pour cela, ST_DumpPoints .
Le premier exemple de la page des documents est exactement ce dont vous avez besoin. C'est une fonction renvoyant un ensemble, donc elle ne fait pas que vider les points, mais aussi des informations (le tableau des chemins) qui les relient à la géométrie d'origine. Puisque vous ne vous souciez que des points, vous pouvez essayer quelque chose comme ceci:
la source
annonce 1.
annonce 2. Sélectionnez Duplicate Points PostGIS
la source
OGC WKB expected, EWKB provided - use GeometryFromEWKB() for this
. Vous pouvez simplement sauterST_AsEWKB()
complètement, mais cela n'a toujours aucun sens, voir le dernier exemple dans ST_PointFromWKBPour vider uniquement des points uniques, vous pouvez utiliser quelques sous-requêtes avec une
SELECT DISTINCT ON
expression :la source