Sciogliere / aggregare poligoni con ogr2ogr o gpc?


16

Ho un gran numero di poligoni che rappresentano i confini delle contee statunitensi che devo unire nel minor numero possibile di poligoni.

È possibile farlo con software non commerciale o software a un prezzo ragionevole?

PostGIS non è disponibile, né Java, ma C lo è.


OpenSourceSoftware può fare molte cose, di cosa hai bisogno ... uno strumento, una libreria e un compilatore C con cui lavorare anche in quale ambiente / sistema operativo?
Huckfinn,

scarica qgis da www.qgis.org
Antonio Locandro,

@huckfinn: Sono su CentOS e uno strumento da riga di comando o una libreria Perl-XS o C sarebbe l'ideale, grazie per avermelo chiesto. I miei dati di origine sono in Shapefile ESRI, anche se ho copie dei poligoni in MySQL. Ho ogr2ogr ma non il dialetto MySQL.
LeeGee,

Presumo che il gpctitolo di riferimento sia GPC - Biblioteca General Polygon Clipper dell'Università di Manchester
matt wilkie

Risposte:


31

Con ogr2ogr(GDAL> = 1.10 con supporto SpatiaLite):

ogr2ogr output.shp input.shp -dialect sqlite -sql "SELECT ST_Union(geometry), dissolve_field FROM input GROUP BY dissolve_field"

1
Qualche build di Gdal / Ogr, per Windows, contiene il supporto Spatialite, MS4W, OSGeo4w, gisinternals, geoinformatica?
Klewis,

AFAIK OSGeo4W e pacchetti gestiti da Tamas Szekeres ( vbkto.dyndns.org/sdk ) di sicuro.
Antonio Falciano,

1
Quale versione di GDAL stai utilizzando ( gdalinfo --version)? Per ovviare al problema, potresti provare a creare prima un file di forma e quindi a convertirlo in KML, poiché il driver KML presenta alcune limitazioni.
Antonio Falciano,

3
Ho avuto un diavolo di tempo determinando cosa usare per "geometria", non ottenevo l'errore nessuna colonna del genere: geometria . Tutti gli esempi simili qui su Stack e nei documenti di riferimento usano anche varianti rotte come geo o the_geom . Alla fine ho scoperto solo il sommario di ogrinfo -so switch :,ogrinfo -so somedata.gdb my_layer_name e filtro per "Geometry Column ="
matt wilkie

3
inoltre, se vuoi solo dissolvere tutti i poligoni nello shapefile in un grande poligono, potresti fare: ogr2ogr output_dissolved.shp input.shp -dialect sqlite -sql "SELEZIONA ST_Union (geometria) AS geometria DA input" ricorda, se costruisci GDAL tu stesso, devi avere sqlite installato e includere almeno sqlite e spatialite nella configurazione, cioè flag --with-sqlite --with-spatialite = yes o simili.
cm1

3

Se vuoi un accesso C puro e leggero, puoi usare una combinazione di shapelib di Frank Warmerdam e gpc di Alan Murta. Trovo che la gestione di DBF nello shapelib sia un po 'complicata, ma leggere qualcosa è OK. Per perl puoi trovarli nel repository CPAN sotto le voci Geo :: Shapelib e Math :: Geometry :: GPC . Inoltre con Geo :: Proj4 per la trasformazione delle coordinate è possibile avere un accesso minimalista alle operazioni GIS. Mi piace.


Grazie - l'ho provato, ma mi è sembrato molto, molto lento: oltre un'ora per aggregare 2000 contee su un MacBookPro 4gig. Forse è il mio codice :)
LeeGee,

Ad esempio, usi qualche tipo di indicizzazione, bbox sovrapposte?
huckfinn,

No, sto inciampando nel buio, trovando difficile trovare riferimenti che non presumono che stia facendo questo da anni, o sto gestendo PostGIS.
LeeGee,

Ma puoi usare Postgresql / PostGIS anche con tutte le operazioni avanzate di indicizzazione, relazione ... L'importazione dei dati per Shape è molto semplice con lo strumento shp2pg. E la sintassi SQL non è così difficile da imparare ...
huckfinn

PostGIS ha impiegato pochi secondi per capire: meravigliosamente semplice, soprattutto con ogr2ogr. Ma preferirei usare GPC: ho accumulato poligoni dai file, ogni volta ho creato un UNION, e ci sono volute ore per fare ciò che PostGIS ha fatto letteralmente in pochi secondi, motivo per cui dico che deve essere la mia lettura errata dei documenti .
LeeGee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.