R : 큰 DEM을 다운로드하고 프로젝션을 변경하고 더 작은 스케일로 조정


11

이 과정은 GIS 소프트웨어에서 몇 초 밖에 걸리지 않습니다. R에서 내 시도는 많은 양의 메모리를 사용하고 실패합니다. 내 코드에 문제가 있습니까? 아니면 R이 할 수없는 것입니까? R이 Grass 내부에서 작동 할 수 있다고 읽었습니다. R 내부에서 Grass 기능을 사용할 수 있습니까?

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), 실제 GIS를 설치하고 사용하는 것보다 훨씬 적은 8 분의 시간이 걸렸습니다.
J. Win.

@제이. Winchester : 더 나은 접근 방식이므로 설정을 포함하도록 응답을 업데이트했습니다. 패키지 작성자는 충돌이 발생한시기와 이유를 듣고이를 반영하도록 기본값을 업데이트하기를 원할 것입니다.
scw

1
-co COMPRESS = LZW 딜 타일 = YES : 대상이 그것을 처리 할 수있는 경우는 gdalwarp에서 GeoTIFF에 (무손실) 압축과 기와 (256 × 256 기본값)를 추가 할 좋은 아이디어이다
mdsumner

Robert Hijmans에게 사건에 대해 알 렸습니다. 더 작은 DEM에서는 기본 설정이 거의 최적화되어 있으므로 지금까지는 미스터리입니다.
J. Win.

큰! 또한 RasterLayer를 사용하여 (3GB) netcdf로 내보낼 수 있습니다 writeRaster.
David LeBauer

3

R과 잔디의 통합을 위해 spgrass6 패키지 를 사용할 수도 있습니다 . 저자는 Roger Bivand (sp의 저자)입니다.

이 패키지에는 R 내부에서 잔디를 완전히 실행하고 R과 잔디 사이에서 데이터를 교환하는 많은 기능이 있습니다.

자세한 정보 : http://cran.r-project.org/web/packages/spgrass6/index.html


1

안녕,

그의 프로세스는 GIS 소프트웨어에서 몇 초 밖에 걸리지 않습니다. R에서 그것을 시도하면> 큰 양의 메모리를 사용하고 실패합니다.

질문에 대답하고 GRASS 또는 GDAL 에서 수행 한 다음 다른 작업을 위해 R을 남겨 두십시오.


1
완전성을 위해 : 당신은 R에 잔디를 달리기 위해 spgrass 패키지를 봐야합니다.
johanvdw

1
그리고 세 번째 옵션은 saga gis를 사용하는 것입니다. saga와 R을 연결하는 모듈 (RSAGA)이 있습니다.
johanvdw

이 R 함수는 GDAL을 사용하도록 설계되었지만이 경우에는 잘 사용하지 않는 것 같습니다. 제 질문은 "이 작업을 수행 할 수있는 GIS 소프트웨어는 무엇입니까?"가 아니라 "R을 사용하여이 작업을 가장 잘 수행 할 수있는 방법"입니다.
J. Win.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.