Este es un proceso que lleva solo unos segundos en el software SIG. Mi intento de hacerlo en R utiliza una gran cantidad de memoria y luego falla. ¿Hay algo mal en mi código o es algo que R no puede hacer? He leído que R puede funcionar dentro de Grass, ¿puedo usar una función Grass desde dentro de R?
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)
                
rasterRespuestas:
Desde mi observación de la fuente,
rasterbusca adivinar si el conjunto de datos se ajusta a la memoria y, de ser así, realizar la operación en la memoria, de lo contrario en el disco. Puede forzarlo a realizar el cálculo estableciendo explícitamentechunksize(celdas para procesar a la vez) ymaxmemory(número máximo de celdas para leer en la memoria):Alternativamente, puede realizar la transformación con GDAL directamente:
Esta será probablemente la opción más rápida y no requiere la configuración explícita de un entorno SIG.
fuente
setOptions(chunksize = 1e+04, maxmemory = 1e+06)tiempo ocho minutos, mucho menos de lo que tomaría instalar y usar un SIG real.writeRaster.También puede usar el paquete spgrass6 para la integración entre R y grass. El autor es Roger Bivand (el autor de sp)
Este paquete tiene muchas funciones para ejecutar completamente hierba dentro de R (o al revés) e intercambiar datos entre R y hierba
Para más información: http://cran.r-project.org/web/packages/spgrass6/index.html
fuente
HOLA,
Respondiste tus preguntas, hazlo en GRASS o GDAL y dejas R para otras tareas.
fuente