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.