Dissoudre / agréger des polygones avec ogr2ogr ou gpc?

16

J'ai un grand nombre de polygones représentant les limites des comtés américains que je dois fusionner en aussi peu de polygones que possible.

Est-il possible de le faire avec un logiciel non commercial ou un logiciel à un prix raisonnable?

PostGIS n'est pas disponible, ni Java, mais C l'est.

LeeGee
la source
OpenSourceSoftware peut faire beaucoup de choses, de quoi avez-vous besoin ... un outil, une bibliothèque et un compilateur C aussi avec quel environnement / système d'exploitation?
huckfinn
télécharger qgis depuis www.qgis.org
Antonio Locandro
@huckfinn: Je suis sur CentOS, et un outil en ligne de commande ou une bibliothèque Perl-XS ou C serait idéal, merci de me le demander. Mes données source sont dans des Shapefiles ESRI, bien que j'ai des copies des polygones dans MySQL. J'ai ogr2ogr mais pas le dialecte MySQL.
LeeGee
Je suppose que le gpctitre référencé est GPC - Bibliothèque General Polygon Clipper de l'Université de Manchester
matt wilkie

Réponses:

31

Avec ogr2ogr(GDAL> = 1.10 avec le support SpatiaLite):

ogr2ogr output.shp input.shp -dialect sqlite -sql "SELECT ST_Union(geometry), dissolve_field FROM input GROUP BY dissolve_field"
Antonio Falciano
la source
1
L'une des versions de Gdal / Ogr, pour Windows, contient-elle la prise en charge de Spatialite, MS4W, OSGeo4w, gisinternals, geoinformatica?
klewis
AFAIK OSGeo4W et packages maintenus par Tamas Szekeres ( vbkto.dyndns.org/sdk ) à coup sûr.
Antonio Falciano
1
Quelle version de GDAL utilisez-vous ( gdalinfo --version)? Pour contourner ce problème, vous pouvez d'abord essayer de créer un fichier de formes, puis le convertir en KML, car le pilote KML a certaines limites.
Antonio Falciano
3
J'ai eu un diable de temps à déterminer ce qu'il fallait utiliser pour la "géométrie", obtenait l'erreur pas une telle colonne: la géométrie . Tous les exemples similaires ici sur Stack et dans les documents de référence utilisent également des variantes cassées comme geo ou the_geom . Enfin, j'ai découvert uniquement le -so résumé ogrinfo : ogrinfo -so somedata.gdb my_layer_nameet le filtre pour "Geometry Column ="
matt wilkie
3
vous pouvez également dissoudre tous les polygones du fichier de formes dans un grand polygone: ogr2ogr output_dissolved.shp input.shp -dialect sqlite -sql "SELECT ST_Union (geometry) AS geometry FROM input" souvenez-vous, si vous générez GDAL vous-même, vous devez avoir sqlite installé et inclure au moins sqlite et spatialite dans la configuration, c'est -à- dire des drapeaux --with-sqlite --with-spatialite = yes ou similaire.
cm1
3

Si vous voulez un accès C pur et léger, vous pouvez utiliser une combinaison de shapelib de Frank Warmerdam et de gpc d'Alan Murta. Je trouve que la gestion de DBF dans le shapelib est un peu délicate, mais lire quelque chose est OK. Pour Perl, vous pouvez les trouver dans le référentiel CPAN sous les entrées Geo :: Shapelib et Math :: Geometry :: GPC . De plus, avec Geo :: Proj4 pour la transformation des coordonnées, vous pouvez avoir un accès minimaliste aux opérations SIG. J'aime ça.

huckfinn
la source
Merci - j'ai essayé, mais cela a semblé très, très lent: plus d'une heure pour regrouper 2000 comtés sur un MacBookPro 4gig. C'est peut-être mon codage :)
LeeGee
Utilisez-vous des indexations qui se chevauchent par exemple?
huckfinn
Non - je trébuche dans le noir, j'ai du mal à trouver des arbitres qui ne supposent pas que je fais ça depuis des années, ou que je lance PostGIS.
LeeGee
Mais vous pouvez aussi utiliser Postgresql / PostGIS avec toutes les opérations avancées d'indexation de trucs, de relations ... L'importation de données pour la forme est très facile avec l'outil shp2pg. Et la syntaxe SQL n'est pas si difficile à apprendre ...
huckfinn
PostGIS a pris quelques secondes à comprendre - magnifiquement simple, en particulier avec ogr2ogr. Mais je préfère utiliser GPC: j'ai accumulé des polygones à partir de fichiers, créant chaque fois un UNION, et cela a pris des heures pour faire ce que PostGIS a fait en quelques secondes, c'est pourquoi je dis que ce doit être ma lecture erronée des documents .
LeeGee