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.