R: एक बड़ा DEM डाउनलोड करें, प्रोजेक्शन बदलें, और छोटे पैमाने पर समायोजित करें


11

यह एक ऐसी प्रक्रिया है जो जीआईएस सॉफ्टवेयर में बस कुछ सेकंड का समय लेती है। R में इसे करने का मेरा प्रयास स्मृति की एक बड़ी मात्रा का उपयोग करता है, फिर विफल हो जाता है। क्या मेरे कोड में कुछ गड़बड़ है, या यह ऐसा कुछ है जो 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

@सेलीनियस: इस पैकेज को कहा जाता हैraster
जे विन।

जवाबों:


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

यह संभवतः सबसे तेज़ विकल्प होगा, और इसे स्पष्ट रूप से जीआईएस वातावरण स्थापित करने की आवश्यकता नहीं है।


यह नहीं किया है, लेकिन यह किया था: setOptions(chunksize = 1e+04, maxmemory = 1e+06)समय आठ मिनट, इसे स्थापित करने और एक वास्तविक जीआईएस का उपयोग करने की तुलना में बहुत कम होगा।
जे विन।

@जे। विनचेस्टर: मैंने आपकी प्रतिक्रियाओं को शामिल करने के लिए अपनी प्रतिक्रिया अपडेट की है क्योंकि यह बेहतर तरीका है। पैकेज लेखक की यह सुनने की रुचि होगी कि यह कब और क्यों दुर्घटनाग्रस्त हो जाता है, और यह प्रतिबिंबित करने के लिए डिफॉल्ट को अपडेट करता है।
SCW

1
यह gdalwarp से GeoTiff में जोड़ने के लिए (दोषरहित) संपीड़न और खपरैल का छत (256x256 के लिए डिफ़ॉल्ट) एक अच्छा विचार है यदि आपका लक्ष्य इसे संभाल कर सकते हैं: -co संक्षिप्त = LZW -co टाइलों = हाँ
mdsumner

मैंने रॉबर्ट हिजमैन को मामले के बारे में बताया। एक छोटे डेम पर, डिफ़ॉल्ट सेटिंग्स निकट-इष्टतम हैं, इसलिए यह अब तक एक रहस्य है।
जे विन।

महान! इसने मुझे एक (3 जीबी) नेटकैंफ के साथ रैस्टरलेयर निर्यात करने की भी अनुमति दी writeRaster
डेविड लेबॉयर

3

आप R और घास के बीच एकीकरण के लिए spgrass6 पैकेज का भी उपयोग कर सकते हैं । लेखक रोजर बिवांड (सपा के लेखक) हैं

इस पैकेज में आर (या रिवर्स) के अंदर पूरी तरह से घास चलाने और आर और घास के बीच डेटा का आदान-प्रदान करने के लिए कई फ़ंक्शन हैं

अधिक जानकारी के लिए: http://cran.r-project.org/web/packages/spgrass6/index.html


1

नमस्ते,

उसकी एक प्रक्रिया है जो GIS सॉफ्टवेयर में बस कुछ ही सेकंड लेती है। R में इसे करने का मेरा प्रयास> बड़ी मात्रा में मेमोरी का उपयोग करता है, फिर विफल हो जाता है।

आपने अपने प्रश्नों का उत्तर दिया, कि GRASS या GDAL में और अन्य कार्यों के लिए R छोड़ दें।


1
पूर्णता के लिए: आप spgrass पैकेज के लिए रन घास के लिए आर में दिखना चाहिए
johanvdw

1
और एक तीसरा विकल्प सागा जीआईएस का उपयोग कर रहा है। एक मॉड्यूल (RSAGA) है जो गाथा और आर को जोड़ता है
johanvdw

यह R फ़ंक्शन GDAL का उपयोग करने के लिए डिज़ाइन किया गया है, लेकिन लगता है कि इस मामले में इसका अच्छी तरह से उपयोग नहीं किया जा रहा है। मेरा प्रश्न है "मैं इस कार्य को R के साथ कैसे पूरा कर सकता हूं", "क्या जीआईएस सॉफ्टवेयर उपलब्ध है जो इस कार्य को कर सकता है।"
जे विन।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.