Grande shapefile per raster


13

Ho un file di forma grande (1 GB) e devo rasterizzarlo. Ho già provato quanto segue.

1.) v.in.ogrImportalo in GRASS usando questo errore con il messaggio di errore: ERRORE: G_realloc: impossibile allocare 498240036 byte a break_polygons.c: 188

2.) La mia seconda idea era quella di utilizzare PostGIS. Importa lo shapefile, ricampionalo nella posizione x, y della griglia, quindi esporta questi punti e crea una griglia da xyz. Ho importato con successo i shapefile (poligoni e punti) ma intersecare 1 milione di poligoni con 300k punti sembra essere molto lento. Ho usato la seguente classificazione PostGIS, forse c'è spazio per miglioramenti.

select polygons.land_id,grid.geom from grid,polygons where grid.geom && polygons.geom and within(grid.geom,polygons.geom)

3.) Ho anche provato a utilizzare simplify()PostGIS. Ma ho perso molti piccoli poligoni (cioè alcune aree coperte solo da piccoli poligoni sono diventate nulle).

Qualsiasi idea sarebbe molto apprezzata.


1
Quale versione di GRASS hai usato? Dovrebbe essere almeno 6.4. Si noti che in GRASS 7 il supporto per file di grandi dimensioni è implementato anche per le mappe vettoriali che dovrebbero aiutare a superare il problema indicato (inoltre è molto più veloce).
markusN,

Attualmente sto usando GRASS 6.4. Aggiornerò presto a 7, grazie per il suggerimento.
johannes,

Puoi ottenere gli ultimi binari winGRASS 7 precompilati qui: wingrass.fsv.cvut.cz/grass70
markusN

Risposte:


14

Potresti provare gdal_rasterize , anche se non l'ho usato con un file di forma così grande, quindi potresti avere gli stessi problemi di GRASS. Ritengo che qualcosa di simile al seguente dovrebbe funzionare (con GDAL> = 1.8.0):

gdal_rasterize -a AN_ATTRIB -l THE_LAYER -a_nodata -9999 -a_srs EPSG:27700 -co TILED=YES -tr 10 10 -ot Float32 src.shp dest.tif

Naturalmente, dovrai giocare con alcune delle opzioni a seconda del tuo file di forma sorgente. Il parametro più importante è -tr che specifica la risoluzione di un pixel; senza di essa, potresti ritrovarti con un raster molto grande ...

Se vuoi rimanere con GRASS, prova a impostare una misura minore per la rasterizzazione e dividi il processo in blocchi gestibili, quindi fai un mosaico dei raster in uno.


1
gdal rasterize ha fatto tutto in circa 5 minuti :). Grazie mille per quello!
johannes,

Freddo! Sono contento che abbia funzionato.
MerseyViking,

3

Per quanto riguarda il tuo primo intento, potresti provare a eseguire il comando v.in.ogr su una macchina con più RAM o spazio su disco di swap?

Altrimenti puoi dividerlo in molti file e rasterizzare ciascuno di essi prima di fonderli nuovamente.


1

Se hai bisogno di maggiore controllo quando esegui una rasterizzazione, controlla lo script poly_density.py di perrygeo che utilizza GDAL sotto il cofano, ma può essere utilizzato per sovrapporre funzionalità o aggiungere valutazioni condizionali oltre a quelle possibili da gdal_rasterizesolo.


0

Come Jack lo Squartatore, fallo per parti. Da Postgis esportare sezioni dei dati importati in erba e convertiti.


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.