R: Büyük bir DEM indirin, projeksiyonu değiştirin ve daha küçük ölçeğe ayarlayın


11

Bu, CBS yazılımında sadece birkaç saniye süren bir işlemdir. R'de yapmayı denediğimde büyük miktarda bellek kullanıyor ve başarısız oluyor. Kodumda yanlış bir şey mi var, yoksa bu sadece R'nin yapamayacağı bir şey mi? R'nin Çim içinde çalışabileceğini okudum, R içinden bir Çim fonksiyonu kullanabilir miyim?

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)

Sadece merak ediyorum, kullandığınız paket nedir?
djq

@celenius: bu pakete denirraster
J. Win.

Yanıtlar:


9

Kaynağa baktığımda raster, veri kümesinin belleğe uyup uymadığını tahmin ediyor ve eğer öyleyse, işlemi bellekte, aksi takdirde diskte gerçekleştirin. Açıkça chunksize(bir anda işlenecek hücreler) ve maxmemory(belleğe okunacak maksimum hücre sayısı ) ayarlayarak hesaplamayı yapmaya zorlayabilirsiniz :

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

Alternatif olarak, dönüşümü doğrudan GDAL ile yapabilirsiniz:

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

Bu muhtemelen en hızlı seçenek olacaktır ve açıkça bir CBS ortamının kurulmasını gerektirmez.


Bu olmadı, ama bu yaptı: setOptions(chunksize = 1e+04, maxmemory = 1e+06)Sekiz dakika, gerçek bir CBS kurmak ve kullanmak için gerekenden çok daha az zaman.
J. Win.

@J. Winchester: Daha iyi bir yaklaşım olduğu için ayarlarınızı dahil etmek için yanıtımı güncelledim. Paket yazarı, muhtemelen ne zaman ve neden çöktüğünü duymak isteyecek ve umarım varsayılanları bunu yansıtacak şekilde güncelleyecektir.
scw

1
Hedefiniz işleyebilirse, gdalwarp'tan GeoTIFF'e (kayıpsız) sıkıştırma ve döşeme (varsayılan olarak 256x256) eklemek iyi bir fikirdir: -co COMPRESS = LZW -co TILED = EVET
mdsumner 23:11

Robert Hijmans'a olay hakkında bilgi verdim. Daha küçük bir DEM'de, varsayılan ayarlar neredeyse optimaldir, bu yüzden bu bir gizemdir.
J. Win.

harika! Bu da bir RasterLayer'ı bir (3GB) netcdf'ye dışa aktarmama izin verdi writeRaster.
David LeBauer

3

Spgrass6 paketini R ve çim arasındaki entegrasyon için de kullanabilirsiniz . Yazar Roger Bivand (sp yazarı)

Bu paket, R (veya tersi) içinde çimleri tamamen çalıştırmak ve R ve çim arasında veri alışverişi yapmak için birçok işleve sahiptir

daha fazla bilgi için: http://cran.r-project.org/web/packages/spgrass6/index.html


1

SELAM,

onun CBS yazılımında sadece birkaç saniye süren bir süreç. R'de yapma girişimim büyük miktarda bellek kullanır> sonra başarısız olur.

Sorularınızı cevapladınız, bunu GRASS veya GDAL ile yapın ve R'yi diğer görevler için bırakın.


1
Tamlık için: R'de çim çalıştırmak için spgrass paketine
bakmalısınız

1
Üçüncü bir seçenek de destan kullanmaktır. Saga ve
R'yi

Bu R işlevi GDAL kullanmak üzere tasarlanmıştır, ancak bu durumda iyi kullanmıyor gibi görünüyor. Benim sorum, "Bu görevi yerine getirebilecek hangi GIS yazılımı mevcut değil" değil, "Bu görevi en iyi R ile nasıl başarabilirim" dir.
J. Win.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.