Suite

Dissoudre ou dissocier des lignes sur des attributs communs dans PostGIS ou GRASS ?


J'ai un fichier de formes d'axe de route qui a des routes divisées à chaque intersection. Cependant, je voudrais rejoindre des LINESTRING qui ont un ensemble commun d'attributs dans un seul LINESTRING. Tant que le nom, la limite de vitesse, etc. ne changent pas, je veux les fusionner. Ceci est pour une éventuelle fusion dans OpenStreetMap.

Le logiciel ArcGIS for Desktop d'Esri semble le permettre avec la commande Dissolve et l'option UNSPLIT_LINES.

J'ai également trouvé une commande Dissolve dans QGIS, mais elle semble ne fonctionner que sur les polygones et les champs uniques.

En supposant que rien n'existe pour QGIS, est-ce que quelqu'un sait comment le faire dans PostGIS ou GRASS?


Question interessante. Je ne me considère pas comme un gourou de PostGIS, mais j'ai joué avec votre problème et j'ai proposé la requête suivante qui dissout l'autorouteLINESTRINGenregistre dansCHAÎNE MULTILIGNEenregistrements lorsqu'ils ont des valeurs communes dans plusieurs champs (dans mon ensemble de données, j'ai fait correspondre sur leNometEtatdes champs). J'ai utilisé OGR pour pousser un fichier de formes d'autoroutes (renommé en ushwys) dans PostGREsql; donc mon champ géométrique s'appellewkb_geometry. Essayez de pirater cette requête pour s'adapter à vos données et conditions de terrain :

SELECTIONNER u.name, u.state, ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) en tant que multilignes FROM ushwys u GROUP BY u.name, u.state ORDER BY u.state LIMIT 100; --############ ABAISSER LA LIMITE QUAND VOUS AVEZ FINI L'EXPÉRIENCE

Si cela fonctionne, vous pouvez utiliser ogr2ogr pour effectuer cette requête et exporter les résultats dans la plupart des formats vectoriels que vous préférez, tels que shapefile, GML, CSV ou autre. Pour plus d'informations sur l'appel de requêtes SQL depuis ogr2ogr, consultez la documentation OGR SQL.

À titre de référence, j'ai examiné l'instruction PostGIS ST_Collect, ainsi que ce site qui illustre le regroupement sur plusieurs champs.

Si vous trouvez que les rédactions de cette requête ne fonctionnent pas pour vous, faites-le moi savoir et je rayerai ma réponse afin qu'elle ne s'attarde pas et ne confonde pas les gens.


P.S. Si vous n'êtes pas habitué à utiliser ogr2ogr pour envoyer des géodonnées dans PostGIS, j'ai utilisé le script ogr2ogr suivant pour effectuer mon importation de données (méfiez-vous de copier à partir du Web et de coller directement dans votre fenêtre de commande ogr2ogr, car j'ai trouvé que la mise en forme de la page introduisait des sauts de ligne et des substitutions de polices/caractères pour les guillemets doubles qui cassaient le script ogr):

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password" "E:GISDataUnitedStateshighways.shp" -nln ushwys -nlt géométrie

[Mettre à jour]

Je voulais voir à quoi cela "ressemblait" dans QGIS après avoir exécuté cette requête, j'ai donc modifié la requête pour l'appliquerclause (qui me donne toutes les variantes de l'US Highway 65 dans l'état du Missouri):

où u.state = 'MO' et u.name LIKE '%US%65%'

Ensuite, j'ai utilisé QGIS et le plugin QuickWKT pour visualiser les huit (8) de mon autoroute résultanteCHAÎNE MULTILIGNEenregistrements. Comme vous pouvez le voir sur la capture d'écran, les résultats finaux emmènent l'autoroute 65 de la frontière nord du Missoui avec l'Iowa jusqu'à sa frontière sud avec l'Arkansas :

Pour moi, cette visualisation démontre que ma requête n'a pas produit de duplication ou d'élimination inattendue de fonctionnalités. Ensuite, je me suis demandé "d'accord, le fondu a renvoyé huit éléments, mais combien d'éléments dans le tableau d'origine représentent réellement l'autoroute 65 dans le Missouri ?" Ma prochaine requête a répondu à cette question. Il semble que l'ensemble de données d'origine utilise trente-huit (38) entités pour représenter l'autoroute 65 dans le Missouri :

SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%'; -- retourné 38

En dernière analyse, la requête a réduit trente-huit (38) caractéristiques à huit (8) caractéristiques partageant des valeurs dans les champs de nom et d'état. À ce stade, je suis relativement confiant que cette requête est utile et appropriée pour dissoudre des géométries en une seule partie en géométries en plusieurs parties lorsque la tâche de dissolution doit prendre en compte plusieurs champs.

Acclamations. :)


Dans PostGIS, il existe une fonction dédiée pour fusionner les lignes

ST_LineMerge - Renvoie un (ensemble de) LineString(s) formé(s) en cousant ensemble un MULTILINESTRING.

http://www.postgis.org/docs/ST_LineMerge.html


Dans GRASS GIS, jetez un œil à v.build.polylines

v.build.polylines peut être utilisé pour reconstruire des polylignes brisées


Voir la vidéo: Spatial #Joins with Multi-Table. #PostGIS #PostgreSQL #QGIS. Urdu. Hindi. Eng. #17 (Octobre 2021).