Il s'agit d'un processus qui ne prend que quelques secondes dans le logiciel SIG. Ma tentative de le faire dans R utilise une grande quantité de mémoire puis échoue. Y a-t-il quelque chose de mal dans mon code, ou est-ce juste quelque chose que R ne peut pas faire? J'ai lu que R peut fonctionner dans Grass, puis-je utiliser une fonction Grass depuis l'intérieur 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)
raster
Réponses:
De mon regard sur la source,
raster
cherche à deviner si l'ensemble de données s'inscrit dans la mémoire, et si oui, effectuez l'opération en mémoire, sinon sur le disque. Vous pouvez le forcer à effectuer le calcul en définissant explicitementchunksize
(cellules à traiter à la fois) etmaxmemory
(nombre maximal de cellules à lire en mémoire):Alternativement, vous pouvez effectuer la transformation directement avec GDAL:
Ce sera probablement l'option la plus rapide et ne nécessite pas la configuration explicite d'un environnement SIG.
la source
setOptions(chunksize = 1e+04, maxmemory = 1e+06)
Temps de huit minutes, beaucoup moins que ce qu'il faudrait pour installer et utiliser un vrai SIG.writeRaster
.Vous pouvez également utiliser le package spgrass6 pour l'intégration entre R et grass. L'auteur est Roger Bivand (l'auteur de sp)
Ce paquet a de nombreuses fonctions pour exécuter complètement l'herbe à l'intérieur de R (ou l'inverse) et échanger des données entre R et l'herbe
pour plus d'informations: http://cran.r-project.org/web/packages/spgrass6/index.html
la source
SALUT,
Vous avez répondu à vos questions, faites-le dans GRASS ou GDAL et laissez R pour d'autres tâches.
la source