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 les LINESTRING
enregistrements routiers en MULTILINESTRING
enregistrements lorsqu'ils ont des valeurs communes dans plusieurs champs (dans mon jeu de données, j'ai fait correspondre les champs name
et state
). J'ai utilisé OGR pour envoyer un fichier de formes autoroutes (renommé ushwys) dans PostGREsql; donc mon champ de géométrie est appelé wkb_geometry
. Essayez de pirater cette requête pour répondre à vos données et conditions de champ:
SELECT
u.name,
u.state,
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines
FROM ushwys u
GROUP BY u.name, u.state
ORDER BY u.state
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING
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 le fichier de formes, GML, CSV ou autre. Pour plus d'informations sur l'appel de requêtes SQL à partir d'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 suppressions de cette requête ne fonctionnent pas pour vous, faites-le moi savoir et je supprimerai ma réponse afin qu'elle ne s'attarde pas et ne perturbe pas les gens.
PS Si vous n'êtes pas familier avec l'utilisation d'ogr2ogr pour pousser des géodonnées dans PostGIS, j'ai utilisé le script ogr2ogr suivant pour effectuer mon importation de données ( méfiez-vous de la copie à partir du Web et du collage direct dans votre fenêtre de commande ogr2ogr, car j'ai trouvé le formatage de la page introduit des sauts de ligne et des substitutions de polices / caractères pour les guillemets doubles qui cassent le script ogr ):
ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password"
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry
[Mise à 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 appliquer cette WHERE
clause (qui me donne toutes les variantes de l'US Highway 65 dans l'État du Missouri):
where u.state = 'MO' and u.name LIKE '%US%65%'
Ensuite, j'ai utilisé QGIS et le plugin QuickWKT pour visualiser les huit (8) de mes MULTILINESTRING
enregistrements routiers résultants . Comme vous pouvez le voir sur la capture d'écran, les résultats finaux emmènent l'autoroute 65 de la frontière nord de Missoui avec l'Iowa jusqu'à sa frontière sud avec l'Arkansas:
Pour moi, cette visualisation montre que ma requête n'a produit aucune duplication ou élimination inattendue des fonctionnalités. Alors, je me suis demandé "ok, la dissolution a renvoyé huit fonctionnalités, mais combien de fonctionnalités dans le tableau d'origine représentent en fait l'autoroute 65 au Missouri?" Ma prochaine requête a répondu à cette question. Il semble que le jeu de données d'origine utilise trente-huit (38) entités pour représenter l'autoroute 65 au Missouri:
SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38
En dernière analyse, la requête a réduit trente-huit (38) entités à huit (8) entités partageant des valeurs dans les champs de nom et d'état. À ce stade, je suis relativement convaincu que cette requête est utile et appropriée pour dissoudre des géométries en une seule partie dans des géométries en plusieurs parties lorsque la tâche de dissolution doit prendre en compte plusieurs champs.
À votre santé. :)