Ich habe ein Raster (USGS DEM tatsächlich) und ich muss es in kleinere Stücke aufteilen, wie das Bild unten zeigt. Dies wurde in ArcGIS 10.0 mit dem Werkzeug "Raster teilen" durchgeführt. Ich möchte eine FOSS-Methode, um dies zu tun. Ich habe mir GDAL angesehen und gedacht, es würde es schaffen (irgendwie mit gdal_translate), aber ich kann nichts finden. Letztendlich möchte ich in der Lage sein, das Raster zu nehmen und zu sagen, in wie große (4KM mal 4KM große Stücke) ich es aufteilen möchte.
18
Antworten:
gdal_translate funktioniert mit den Optionen -srcwin oder -projwin.
Sie müssten sich die Pixel- / Linienpositionen oder Eckkoordinaten einfallen lassen und dann die Werte mit gdal_translate durchlaufen. Etwas wie das schnelle und schmutzige Python unten wird funktionieren, wenn die Verwendung von Pixelwerten und -srcwin für Sie geeignet ist, wird ein bisschen mehr Arbeit sein, um mit Koordinaten zu sortieren.
quelle
Meine Lösung, die auf der von @wwnick basiert, liest die Rastermaße aus der Datei selbst und deckt das gesamte Bild ab, indem die Randkacheln bei Bedarf verkleinert werden:
quelle
Es gibt ein gebündeltes Python-Skript speziell für das Retiling von Rastern, gdal_retile :
z.B:
gdal_retile.py -ps 512 512 -targetDir C:\example\dir some_dem.tif
quelle
Für @Aaron, der gefragt hat:
Leichter Haftungsausschluss
Dies nutzt
gdalwarp
, obwohl ich nicht ganz davon überzeugt bin, dass es viel Leistungsgewinn geben wird. Bisher war ich an E / A gebunden - das Ausführen dieses Skripts auf einem großen Raster, das es in viele kleinere Teile zerlegt, scheint nicht CPU-intensiv zu sein, daher gehe ich davon aus, dass der Engpass beim Schreiben auf die Festplatte besteht. Wenn Sie vorhaben, die Kacheln oder ähnliches gleichzeitig erneut zu projizieren, kann sich dies ändern. Es gibt Tuning - Tipps hier . Ein kurzes Spiel brachte für mich keine Besserung und die CPU schien nie der limitierende Faktor zu sein.Abgesehen vom Haftungsausschluss ist hier ein Skript, mit
gdalwarp
dem Sie ein Raster in mehrere kleinere Kacheln aufteilen können. Aufgrund der Bodenteilung kann es zu Verlusten kommen. Dies kann jedoch durch Auswahl der gewünschten Anzahl von Fliesen behoben werden. Es wird sein,n+1
won
die Zahl ist, durch die Sie dividieren, um die Variablentile_width
und zu erhaltentile_height
.quelle
Sie können r.tile verwenden von GRASS GIS verwenden. r.tile generiert eine separate Rasterkarte für jede Kachel mit nummerierten Kartennamen basierend auf dem benutzerdefinierten Präfix. Die Breite der Kacheln (Spalten) und die Höhe der Kacheln (Zeilen) können definiert werden.
Mit Hilfe des Gras-Sitzung Python API nur ein paar Zeilen Python - Code benötigt , um die r.tile Funktionalität von außen zu nennen, dh ein eigenständiges Skript zu schreiben. Bei Verwendung von r.external und r.external.out tritt während des GRASS GIS-Verarbeitungsschritts auch keine Datenverdoppelung auf.
Pseudocode:
quelle