Polygone mit ogr2ogr oder gpc auflösen / aggregieren?

16

Ich habe eine große Anzahl von Polygonen, die die Grenzen der US-Bezirke darstellen und die ich zu möglichst wenigen Polygonen zusammenfassen muss.

Ist es möglich, dies mit nichtkommerzieller oder kostengünstiger Software zu tun?

PostGIS ist weder verfügbar noch Java, C jedoch.

LeeGee
quelle
OpenSourceSoftware kann vieles, was braucht man ... ein Tool, eine Bibliothek und einen C-Compiler, mit dem man auch in welcher Umgebung / unter welchem ​​Betriebssystem arbeiten kann?
Huckfinn
qgis von www.qgis.org herunterladen
Antonio Locandro
@huckfinn: Ich bin auf CentOS und ein Kommandozeilen-Tool oder eine Perl-XS- oder C-Bibliothek wären ideal, danke für die Nachfrage. Meine Quelldaten befinden sich in ESRI-Shapefiles, obwohl ich Kopien der Polygone in MySQL habe. Ich habe ogr2ogr aber nicht den MySQL-Dialekt.
LeeGee
Ich nehme an, der gpcTitel , auf den verwiesen wird, ist GPC - General Polygon Clipper Library von der University of Manchester
Matt Wilkie

Antworten:

31

Mit ogr2ogr(GDAL> = 1.10 mit SpatiaLite-Unterstützung):

ogr2ogr output.shp input.shp -dialect sqlite -sql "SELECT ST_Union(geometry), dissolve_field FROM input GROUP BY dissolve_field"
Antonio Falciano
quelle
1
Enthält einer der Gdal / Ogr-Builds für Windows Spatialite-Unterstützung, MS4W, OSGeo4w, gisinternals, geoinformatica?
Klewis
AFAIK OSGeo4W und Pakete, die von Tamas Szekeres ( vbkto.dyndns.org/sdk ) gepflegt werden .
Antonio Falciano
1
Welche Version von GDAL verwenden Sie ( gdalinfo --version)? Als Problemumgehung können Sie versuchen, zuerst ein Shapefile zu erstellen und es dann in KML zu konvertieren, da der KML-Treiber einige Einschränkungen aufweist.
Antonio Falciano
3
Ich hatte den Teufel einer Zeit, als ich herausfand, was ich für "Geometrie" verwenden sollte, und bekam den Fehler, dass es keine solche Spalte gab: Geometrie . Alle ähnlichen Beispiele hier auf Stack und in den Referenzdokumenten verwenden auch fehlerhafte Varianten wie geo oder the_geom . Schließlich entdeckte ich ogrinfo -so Zusammenfassung nur switch: ogrinfo -so somedata.gdb my_layer_nameund Filter für "Geometry Column ="
matt Wilkie
3
Wenn Sie nur alle Polygone im Shapefile in ein großes Polygon auflösen möchten, können Sie Folgendes tun: ogr2ogr output_dissolved.shp input.shp -dialect sqlite -sql "SELECT ST_Union (geometry) AS geometry FROM input" Denken Sie daran, wenn Sie GDAL erstellen selbst müssen sie sqlite installiert haben und mindestens sqlite und spatialite in die konfiguration einbeziehen , dh flags --with-sqlite --with-spatialite = yes oder ähnliches.
cm1
3

Wenn Sie einen rein leichten C-Zugang wünschen, können Sie eine Kombination aus Shapelib von Frank Warmerdam und GPC von Alan Murta verwenden. Ich finde das DBF-Handling in der Shapelib etwas knifflig, aber wenn ich etwas lese, ist es in Ordnung. Für Perl finden Sie diese im CPAN-Repository unter den Einträgen Geo :: Shapelib und Math :: Geometry :: GPC . Zusätzlich können Sie mit Geo :: Proj4 zur Koordinatentransformation einen minimalistischen Zugriff auf GIS-Operationen erhalten. Ich mag es.

huckfinn
quelle
Danke - ich habe das versucht, aber es schien sehr, sehr langsam zu sein: über eine Stunde, um 2.000 Counties auf einem MacBookPro 4gig zusammenzufassen. Vielleicht ist es meine Codierung :)
LeeGee
Verwenden Sie irgendeine Art von Indizierung, beispielsweise überlappende Bboxes?
Huckfinn
Nein - ich stolpere im Dunkeln herum und finde es schwierig, Schiedsrichter zu finden, die nicht davon ausgehen, dass ich das seit Jahren mache oder PostGIS verwende.
LeeGee
Sie können Postgresql / PostGIS aber auch mit allen erweiterten Indizierungs- und Beziehungsoperationen verwenden. Der Datenimport für Shape ist mit dem Tool shp2pg sehr einfach. Und die SQL-Syntax ist nicht so schwer zu lernen ...
huckfinn
PostGIS brauchte Sekunden, um es herauszufinden - wunderschön einfach, besonders mit ogr2ogr. Aber ich würde lieber GPC verwenden: Ich habe jedes Mal Polygone aus Dateien angesammelt, um eine UNION zu erstellen, und es hat Stunden gedauert, um das zu tun, was PostGIS in buchstäblichen Sekunden getan hat .
LeeGee