Dies ist ein Vorgang, der in der GIS-Software nur wenige Sekunden dauert. Mein Versuch, dies in R zu tun, verwendet eine große Menge an Speicher und schlägt dann fehl. Stimmt etwas in meinem Code nicht oder ist dies nur etwas, was R nicht kann? Ich habe gelesen, dass R in Grass funktionieren kann. Kann ich eine Grass-Funktion in R verwenden?
library(raster)
# I have many environmental rasters in this format
new_r <- raster(ncol=615, nrow=626, xmn=-156.2, xmx=-154.8, ymn=18.89, ymx=20.30)
res(new_r) <- 0.00225
projection(new_r) <- "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs +towgs84=0,0,0"
R> new_r ### not too big with a few hundred cells per side
class : RasterLayer
dimensions : 627, 622, 1 (nrow, ncol, nlayers)
ncell : 389994
resolution : 0.00225, 0.00225 (x, y)
projection : +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs +towgs84=0,0,0
extent : -156.2, -154.8, 18.89, 20.3 (xmin, xmax, ymin, ymax)
values : none
# I get the DEM at much higher resolution (zipfile is 182Mb)
zipurl <- "ftp://soest.hawaii.edu/coastal/webftp/Hawaii/dem/Hawaii_DEM.zip"
DEMzip <- download.file(zipurl, destfile = "DEMzip")
unzip("DEMzip", exdir = "HIDEM")
HIDEM <- raster("HIDEM/hawaii_dem")
R> HIDEM ### 10m resolution, file is way too big
class : RasterLayer
dimensions : 15067, 13136, 1 (nrow, ncol, nlayers)
ncell : 197920112
resolution : 10, 10 (x, y)
projection : +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0
extent : 179066, 310426, 2093087, 2243757 (xmin, xmax, ymin, ymax)
values : HIDEM/hawaii_dem
min value : 0
max value : 4200
# the following line fails (after a long time)
new_HIDEM <- projectRaster(HIDEM, new_r)
raster
Antworten:
raster
Wenn ich mir die Quelle anschaue, kann ich erraten, ob der Datensatz in den Speicher passt, und in diesem Fall den Vorgang im Speicher ausführen, andernfalls auf der Festplatte. Sie können die Berechnung erzwingen, indem Sie explizit festlegenchunksize
(gleichzeitig zu verarbeitende Zellen) undmaxmemory
(maximale Anzahl von Zellen, die in den Speicher eingelesen werden sollen):Alternativ können Sie die Transformation mit GDAL direkt durchführen:
Dies ist wahrscheinlich die schnellste Option und erfordert nicht das explizite Einrichten einer GIS-Umgebung.
quelle
setOptions(chunksize = 1e+04, maxmemory = 1e+06)
Zeit acht Minuten, viel weniger als für die Installation und Verwendung eines echten GIS erforderlich wäre.writeRaster
.Sie können das Paket spgrass6 auch für die Integration zwischen R und grass verwenden. Der Autor ist Roger Bivand (der Autor von sp)
Dieses Paket hat viele Funktionen, um Gras vollständig in R (oder umgekehrt) laufen zu lassen und Daten zwischen R und Gras auszutauschen
Weitere Informationen: http://cran.r-project.org/web/packages/spgrass6/index.html
quelle
HALLO,
Sie haben Ihre Fragen beantwortet, dies in GRASS oder GDAL getan und R für andere Aufgaben verlassen.
quelle