Der beste Weg, um eine große Raster-ECW-Datei zu schneiden?


9

Ich versuche, eine große ECW zu schneiden (Details unten), aber die Rasterdatei ist zu groß, um vollständig verarbeitet zu werden.

Einige Details der ECW unten

Treiber: ECW / ERDAS Compressed Wavelets (SDK 5.0)

Dateigröße: 50 GB Größe ist 450000, 565081 Pixelgröße: 0,15 0,15 COLORSPACE = RGB COMPRESSION_RATE_TARGET = 9 VERSION = 2 Anzahl der Bänder: 4

Der Bereich, den ich ausschneiden möchte, ist ungefähr 1/5 der Originaldatei.

Hier sind die Methoden, die ich ohne Erfolg ausprobiert habe:

  1. Benutzte Arcgis, um das ecw in tiff / anderen Formaten zu speichern ... (Ich gab schnell auf)

  2. Verwendet Qgis und sein Clipper-Tool ... die Dateierstellung blieb bei etwa 40% stecken.

  3. Verwendet gdal_translate aus OSGeo4W mit anderen Optionen als Qgis. (Versuchte, dass der Gedanke, dass möglicherweise etwas Speicher freigegeben wird, ohne Qgis zu verwenden, der Trick wäre)

  4. Ich habe gdal_retile verwendet und gedacht, ich würde das Bild in Stücke schneiden und das Bild nehmen, das ich wollte. Der Befehl "gdal_retile -ps 10000 10000 -of ecw -tileIndex tile.shp -targetDir input.ecw Dies stürzte noch schneller ab"

Hat jemand eine Idee?

Zur Info starte ich Windows 7 64bit auf einem i5-3470 3.2Ghz mit 16gb RAM.

Antworten:


5

Andere Ideen, die Sie ausprobieren könnten:

  1. gdal_translate mit dem Schalter -srcwin
  2. gdalwarp mit den Schaltern -cutline und -crop_to_cutline und -wm. Der letzte gibt den Speicher für das Caching an und kann Sie über die Probleme hinwegbringen, die Sie mit Clipper in QGIS hatten (da dies im Wesentlichen dieselbe Funktion ist).
  3. QGIS-Rasterrechner, der die Ausdehnung auf den gewünschten Bereich einstellt (einfacher als Clipper).
  4. SAGA-> Clip-Raster mit Polygon - wer weiß, es könnte speichereffizienter sein.
  5. Codieren Sie eine Lösung mit Python und Numpy / SciPy, um nur eine Teilmenge des Rasters in den Speicher einzulesen und zu speichern.

Ich vermute, dass ein sehr einfaches Zuschneiden (entweder mit dem Rasterrechner oder dem Schalter -srcwin in gdal_translate) weniger speicherhungrig ist als das Zuschneiden mit einem Polygon, da Sie keine Geometrieprüfungen und -konvertierungen haben. Option 5 sollte den geringsten Speicher verwenden, da Sie nur das einlesen, was Sie benötigen. Schauen Sie sich dieses Tutorial an, wenn Sie eine Anleitung benötigen (passen Sie das Bit zum Lesen und Schreiben nach Block an).


Danke für die Antwort! Ich werde SAGA ausprobieren und wenn es nicht funktioniert, werde ich es mit Numpy versuchen.
Blau

5

Sie können es direkt mit dem gdal-Tool gdal_translate schneiden, wenn Sie die Koordinaten Ihres Interessengebiets kennen, wenn es georeferenziert ist:

gdal_translate -projwin [ulx uly lrx lry] infile outfile  

Wenn nicht, verwenden Sie die -srswinFlagge wie folgt:

gdal_translate -srcwin [xoff yoff xsize ysize] infile outfile.

Eine andere Möglichkeit besteht darin, mit gdalbuildvrt ein "virtuelles" Raster (von einigen Kilobyte) zu erstellen , das auf Ihren ursprünglichen Datensatz verweist .

gdalbuildvrt -te [xmin ymin xmax ymax] infile outfile.vrt

Leider benötigen Sie eine georeferenzierte Datei für die Verwendung von gdalbuildvrt.

Vergessen Sie nach dem Clip nicht, Pyramiden für eine einfache Anzeige zu erstellen. Mit dem folgenden Befehl werden externe Pyramiden erstellt, die mit dem DEFLATE- Algorithmus (verlustfrei) komprimiert wurden :

gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16

Als letzten Schritt können Sie auch die Statistiken berechnen, um einige dumme Probleme mit einem bestimmten kommerziellen Programm zu vermeiden:

gdalinfo -stats outfile

Danke für die Antwort Nickves. Ich habe ein virtuelles Raster erstellt und <code> gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16 </ code> ausgeführt. Ich bin mir nicht sicher, warum die folgende Fehlermeldung angezeigt wurde. FEHLER 1: TIFF-Datei kann nicht erstellt werden, da sie fehlt Codec für DEFLATE. Übersichtserstellung fehlgeschlagen.
Blau

Überprüfen Sie die Fehler qgis-bug: 8782 und osge4w-bug: 382, wenn sie Ihren Fall beschreiben. Versuchen Sie in der Zwischenzeit, die Übersichten ohne Komprimierungsalgorithmen zu erstellen, oder wählen Sie einen anderen aus .
Nickves

es sieht so aus, als hätte ich es in 2 Schritten arbeiten lassen: gdaladdo -ro input.vrt 2 4 8 16dann gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE input.vrt 2 4 8 16. Mein Ziel ist es, mit einer ECW zu enden, also habe ich versucht, gdal_translate -of ECW input.vrt output.ecw folgenden Fehler zu bekommen:0ERROR 6: GDALDriver::Create() ... no create method implemented for this format.
Blau

@blue ECW ist ein proprietäres Format und muss speziell behandelt werden. Bitte überprüfen Sie zuerst, ob gdal mit ECW schreiben kann gdalinfo --formats. Wenn Sie die ECW nicht in der Liste sehen, versuchen Sie diese Anweisungen: faunalia.pt/node/438
nickves

0

Ein direkter "Clip" gdalwarpsollte funktionieren (ich weiß, dass dies eine sehr alte Frage ist: 18 Monate IRL sind wie eine geologische Epoche in Internetjahren).

Ich habe eine 70-Gbit-Antenne (ECW, 94000 x 81000 Pixel bei 10 cm / Pixel), und GDAL kann sie mit einem Shapefile beliebig beschneiden

gdalwarp -cutline [clipfile] -crop_to_cutline [infile] [outfile]

in der Windows-Befehlszeile. (Mir ist klar, dass für diese Lösung ein Shapefile für den interessierenden Zielbereich erstellt werden muss, aber das ist nicht die größte Herausforderung, die GIS bekannt ist.)

Das Extrahieren eines Teils in der Größe eines halben Vorortes dauert ~ 0,4 Sekunden. Das Aufteilen der Datei in Viertel dauert 4 Sekunden. Die technischen Daten meines Computers unterscheiden sich nicht wesentlich (i7-4770 bei 3,4 GHz, 16 GB RAM, Win7-64 Ultimate).


gdalwarp wurde bereits erwähnt. Die Informationen zur Leistung und zur Größe des Beispielbilds sind eine willkommene Ergänzung, aber dies sollte eigentlich ein Kommentar zu gis.stackexchange.com/a/74450/108 sein (und eine vorgeschlagene Bearbeitung mit der Befehlszeile mit Code-Formatierung wäre ebenfalls willkommen ; es ist leichter zu lesen)
matt wilkie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.