Ini adalah proses yang hanya membutuhkan beberapa detik dalam perangkat lunak GIS. Upaya saya untuk melakukannya di R menggunakan sejumlah besar memori kemudian gagal. Apakah ada yang salah dalam kode saya, atau ini hanya sesuatu yang R tidak bisa lakukan? Saya telah membaca R dapat bekerja di dalam Rumput, dapatkah saya menggunakan fungsi Rumput dari dalam 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
Jawaban:
Dari pandangan saya pada sumbernya,
raster
sepertinya menebak apakah dataset cocok dengan memori, dan jika demikian, lakukan operasi dalam memori, jika tidak pada disk. Anda dapat memaksanya untuk melakukan perhitungan dengan menetapkan secara eksplisitchunksize
(sel untuk diproses pada satu waktu) danmaxmemory
(jumlah sel maksimum untuk dibaca ke dalam memori):Atau, Anda dapat melakukan transformasi dengan GDAL secara langsung:
Ini kemungkinan akan menjadi opsi tercepat, dan tidak memerlukan pengaturan lingkungan GIS secara eksplisit.
sumber
setOptions(chunksize = 1e+04, maxmemory = 1e+06)
Waktu delapan menit, jauh lebih sedikit daripada yang diperlukan untuk menginstal dan menggunakan GIS yang sebenarnya.writeRaster
.Anda juga dapat menggunakan paket spgrass6 untuk integrasi antara R dan rumput. Penulisnya adalah Roger Bivand (penulis sp)
Paket ini memiliki banyak fungsi untuk melengkapi menjalankan rumput di dalam R (atau sebaliknya) dan bertukar data antara R dan rumput
untuk informasi lebih lanjut: http://cran.r-project.org/web/packages/spgrass6/index.html
sumber
HAI,
Anda menjawab pertanyaan Anda, lakukan itu dalam GRASS atau GDAL dan tinggalkan R untuk tugas-tugas lain.
sumber