Großes Shapefile zum rastern

13

Ich habe ein großes Shapefile (1 GB) und muss es rastern. Folgendes habe ich schon ausprobiert.

1.) Der Import in GRASS ist v.in.ogrmit der folgenden Fehlermeldung fehlgeschlagen: FEHLER: G_realloc: 498240036 Bytes konnten in break_polygons.c: 188 nicht zugeordnet werden

2.) Meine zweite Idee war die Verwendung von PostGIS. Importieren Sie das Shapefile, nehmen Sie es an der x, y-Position des Rasters erneut auf, exportieren Sie diese Punkte und erstellen Sie ein Raster aus xyz. Ich habe die Shapefiles (Polygone und Punkte) erfolgreich importiert, aber es scheint sehr langsam zu sein, 1 Million Polygone mit 300.000 Punkten zu schneiden. Ich habe den folgenden PostGIS-Satz verwendet, möglicherweise gibt es Raum für Verbesserungen.

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

3.) Ich habe auch versucht, simplify()in PostGIS zu verwenden. Aber ich habe gegen viele kleine Polygone verloren (dh einige Bereiche, die nur mit kleinen Polygonen bedeckt waren, wurden null).

Irgendwelche Ideen wären sehr dankbar.

johannes
quelle
1
Welche GRASS Version hast du benutzt? Es sollte mindestens 6,4 sein. Beachten Sie, dass in GRASS 7 die Unterstützung für große Dateien auch für Vektorkarten implementiert ist, die helfen sollen, das angegebene Problem zu überwinden (außerdem ist es viel schneller).
markusN
Ich benutze gerade GRASS 6.4. Ich werde bald auf 7 updaten, danke für den Hinweis.
Johannes
Aktuelle vorkompilierte winGRASS 7-Binärdateien erhalten Sie hier: wingrass.fsv.cvut.cz/grass70
markusN

Antworten:

14

Sie könnten es mit gdal_rasterize versuchen , obwohl ich es bei einem so großen Shapefile nicht verwendet habe, sodass Sie möglicherweise dieselben Probleme haben wie bei GRASS. Ich gehe davon aus, dass Folgendes funktionieren sollte (mit 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

Natürlich müssen Sie abhängig von Ihrem Quell-Shapefile mit einigen Optionen herumspielen. Der wichtigste Parameter ist -tr, der die Auflösung eines Pixels angibt. Ohne sie könnten Sie sich mit einem sehr großen Raster wiederfinden ...

Wenn Sie bei GRASS bleiben möchten, versuchen Sie, ein kleineres Ausmaß für die Rasterung festzulegen, und teilen Sie den Prozess in handhabbare Abschnitte auf. Mosaikieren Sie dann die Raster in einen.

MerseyViking
quelle
1
gdal rasterize hat alles in ca. 5 min erledigt :). Vielen Dank dafür!
johannes
Cool! Ich bin froh, dass es funktioniert hat.
MerseyViking
3

Könnten Sie in Bezug auf Ihre erste Absicht versuchen, den Befehl v.in.ogr auf einem Computer auszuführen, der über mehr RAM verfügt, oder den Speicherplatz auszutauschen ?

Wenn nicht, können Sie es in viele Dateien aufteilen und sie rastern, bevor Sie sie wieder zusammenführen.

simo
quelle
1

Wenn Sie beim Rasterisieren mehr Kontrolle benötigen, lesen Sie das Skript poly_density.py von perrygeo, in dem GDAL unter der Haube verwendet wird, das jedoch zum Überlappen von Features oder Hinzufügen von bedingten Auswertungen verwendet werden kann, die über die gdal_rasterizeallein möglichen hinausgehen .

scw
quelle
0

Tun Sie es wie Jack the Ripper nach Teilen. Aus dem Postgis-Export werden Scheiben der Daten in Gras importiert und konvertiert.

Pablo
quelle