R: ดาวน์โหลด DEM ขนาดใหญ่เปลี่ยนการฉายภาพและปรับให้มีขนาดเล็กลง


11

นี่เป็นกระบวนการที่ใช้เวลาเพียงไม่กี่วินาทีในซอฟต์แวร์ GIS ความพยายามของฉันใน 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)เวลาแปดนาทีน้อยกว่าที่จะใช้ในการติดตั้งและใช้ GIS จริง
เจวิน

@J Winchester: ฉันได้อัปเดตการตอบกลับเพื่อรวมการตั้งค่าของคุณแล้วซึ่งเป็นวิธีการที่ดีกว่า ผู้เขียนแพ็คเกจน่าจะสนใจที่จะรับฟังว่าเกิดปัญหาเมื่อใดและสาเหตุใดและหวังว่าจะอัปเดตค่าเริ่มต้นเพื่อให้สะท้อนถึงสิ่งนี้
scw

1
เป็นความคิดที่ดีที่จะเพิ่มการบีบอัดและการเรียง (เริ่มต้นที่ 256x256) ลงใน GeoTIFF จาก gdalwarp หากเป้าหมายของคุณสามารถจัดการได้: -co COMPRESS = LZW -co TILED = YES
mdsumner

ฉันแจ้งให้ Robert Hijmans ทราบเกี่ยวกับคดีนี้ ใน DEM ที่เล็กลงการตั้งค่าเริ่มต้นใกล้จะเหมาะสมที่สุด
เจวิน

ที่ดี! นอกจากนี้ยังอนุญาตให้ฉันไปส่งออก RasterLayer ไป (3GB) NetCDF writeRasterกับ
David LeBauer

3

คุณยังสามารถใช้แพ็คเกจ spgrass6สำหรับการรวมระหว่าง R และหญ้า ผู้เขียนคือ Roger Bivand (ผู้เขียนของ sp)

แพคเกจนี้มีฟังก์ชั่นมากมายในการรันหญ้าภายใน R (หรือกลับด้าน) และแลกเปลี่ยนข้อมูลระหว่าง R และหญ้า

สำหรับข้อมูลเพิ่มเติม: http://cran.r-project.org/web/packages/spgrass6/index.html


1

สวัสดี

เขาเป็นกระบวนการที่ใช้เวลาเพียงไม่กี่วินาทีในซอฟต์แวร์ GIS ความพยายามของฉันที่จะทำใน R ใช้หน่วยความจำจำนวนมากแล้วล้มเหลว

คุณตอบคำถามของคุณทำในGRASSหรือGDALและปล่อยให้ R สำหรับงานอื่น ๆ


1
เพื่อความสมบูรณ์: คุณควรดูแพ็คเกจ spgrass เพื่อเรียกใช้หญ้าใน R.
johanvdw

1
และตัวเลือกที่สามคือการใช้ saga gis มีโมดูล (RSAGA) ซึ่งเชื่อมต่อ saga และ R.
johanvdw

ฟังก์ชั่น R นี้ออกแบบมาเพื่อใช้ GDAL แต่ดูเหมือนว่าจะไม่ได้ใช้งานได้ดีในกรณีนี้ คำถามของฉันคือ "ฉันจะทำภารกิจนี้ให้สำเร็จด้วย R ได้ดีที่สุด" ไม่ใช่ "ซอฟต์แวร์ GIS ใดที่มีให้ใช้ที่สามารถทำงานนี้ได้"
เจวิน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.