R: Завантажте велику DEM, змініть проекцію та налаштуйте на менший масштаб


11

Це процес, який займає всього кілька секунд у програмному забезпеченні ГІС. Моя спроба зробити це в 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)

Просто цікаво, який пакунок ви використовуєте?
djq

@celenius: цей пакет називаєтьсяraster
J. Win.

Відповіді:


9

З мого погляду на джерело, rasterздається здогадатися, чи вкладається набір даних у пам'ять, і якщо так, виконайте операцію в пам'яті, інакше на диску. Ви можете змусити його виконати обчислення, чітко встановивши chunksize(комірки для обробки за один раз) та maxmemory(максимальна кількість комірок для читання в пам'яті):

setOptions(chunksize = 1e+04, maxmemory = 1e+06)

Альтернативно, ви можете виконати перетворення за допомогою GDAL безпосередньо:

gdalwarp -t_srs '+proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0' HIDEM/hawaii_dem hawaii_dem_utm.tif

Це, швидше за все, буде найшвидшим варіантом і не потребує явної настройки GIS-середовища.


Це не зробило, але це зробило: setOptions(chunksize = 1e+04, maxmemory = 1e+06)часу на вісім хвилин, набагато менше, ніж потрібно для встановлення та використання справжнього ГІС.
Дж. Він.

@J. Вінчестер: Я оновив свою відповідь, щоб включити ваші налаштування, оскільки це кращий підхід. Автору пакету, ймовірно, буде цікаво почути, коли і чому він виходить з ладу, і сподіваємось оновити типові параметри, щоб відобразити це.
scw

1
хороша ідея додати (без втрат) стиснення та плитку (за замовчуванням 256x256) до GeoTIFF від gdalwarp, якщо ваша мета може впоратися з цим: -co COMPRESS = LZW -co TILED = ТАК
mdsumner

Я повідомив Роберту Хіджмансу про цю справу. На менших значеннях DEM параметри за замовчуванням майже оптимальні, тому поки що це загадка.
Дж. Він.

чудово! Це також дозволило мені експортувати RasterLayer до (3 ГБ) netcdf з writeRaster.
Девід Лебоуер

3

Ви також можете використовувати пакет spgrass6 для інтеграції між R та травою. Автор - Роджер Біванд (автор sp)

Цей пакет має багато функцій для повного запуску трави всередині R (або зворотного боку) та обміну даними між R та травою

для отримання додаткової інформації: http://cran.r-project.org/web/packages/spgrass6/index.html


1

ПРИВІТ,

його - це процес, який займає всього кілька секунд у програмному забезпеченні ГІС. Моя спроба зробити це в R використовує> великий об'єм пам'яті, тоді не вдається.

Ви відповіли на свої запитання, зробіть це в GRASS або GDAL і залиште R для інших завдань.


1
Для повноти: варто звернути увагу на пакет spgrass, щоб запустити траву в Р.
johanvdw

1
І третій варіант - використання saga gis. Є модуль (RSAGA), який з'єднує сагу та Р.
johanvdw

Ця функція R розроблена для використання GDAL, але, здається, у цьому випадку вона не використовується добре. Моє запитання: "Як мені найкраще виконати це завдання за допомогою R", а не "Яке програмне забезпечення GIS доступне, що може виконати це завдання".
Дж. Він.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.