Это процесс, который занимает всего несколько секунд в программном обеспечении ГИС. Моя попытка сделать это в R использует большой объем памяти, а затем терпит неудачу. Что-то не так в моем коде, или это просто то, что R не может сделать? Я прочитал, что R может работать внутри Grass, могу ли я использовать функцию Grass изнутри 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
Ответы:
Исходя из моего взгляда на источник,
raster
можно догадаться, помещается ли набор данных в память, и если да, выполнить операцию в памяти, в противном случае на диске. Вы можете заставить его выполнить вычисление, явно указавchunksize
(количество ячеек для обработки за один раз) иmaxmemory
(максимальное количество ячеек для чтения в память):В качестве альтернативы, вы можете выполнить преобразование напрямую с помощью GDAL:
Вероятно, это будет самый быстрый вариант и не требует явной настройки ГИС-среды.
источник
setOptions(chunksize = 1e+04, maxmemory = 1e+06)
времени восемь минут, гораздо меньше, чем потребуется, чтобы установить и использовать настоящую ГИС.writeRaster
.Вы также можете использовать пакет spgrass6 для интеграции между R и grass. Автор Roger Bivand (автор sp)
Этот пакет имеет много функций для полного запуска травы внутри R (или наоборот) и обмена данными между R и травой
для получения дополнительной информации: http://cran.r-project.org/web/packages/spgrass6/index.html
источник
ЗДРАВСТВУЙ,
Вы ответили на ваши вопросы, сделайте это в GRASS или GDAL и оставьте R для других задач.
источник