WorldClim से डेटा निकालने के लिए R का उपयोग करना? [बन्द है]


9

मेरे पास 1000 अलग-अलग अक्षांश-देशांतरों के साथ एक डेटा सेट है। मैं इनमें से प्रत्येक निर्देशांक के लिए औसत वार्षिक तापमान और वार्षिक वर्षा निकालना चाहता हूं। ये डेटा आसानी से WorldClim से प्राप्त किए जा सकते हैं और DIVA-GIS का उपयोग करके संसाधित किया जा सकता है ।

आर पर ऐसा करने के लिए वैसे भी क्या है?

मैं चाहता हूं कि मेरा अंतिम आउटपुट प्रत्येक समन्वय के लिए वार्षिक तापमान और वर्षा के साथ डेटाफ्रेम हो। मैं आर में जीआईएस में नया हूं, इसलिए मैं इस आउटपुट के लिए आवश्यक पुस्तकालयों के साथ एक मूल कोड चंक चाहता हूं।

जवाबों:


17

आप rasterWorldClim डेटा डाउनलोड करने के लिए पैकेज का उपयोग कर सकते हैं , ?getdataरिज़ॉल्यूशन, चर और निर्देशांक के बारे में जान सकते हैं।

उदाहरण के रूप में:

library(raster)
library(sp)

r <- getData("worldclim",var="bio",res=10)

बायो 1 और बायो 12 औसत तापमान और एनुअल वर्षा हैं:

r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")

मैं उदाहरण के लिए यादृच्छिक बिंदु बनाता हूं, आपके मामले में SpatialPointऑब्जेक्ट बनाने के लिए निर्देशांक का उपयोग करता है।

points <- spsample(as(r@extent, 'SpatialPolygons'),n=100, type="random")    

अंत में, उपयोग करें extract। के साथ cbind.data.frameऔर coordinatesआप इच्छा डेटा प्राप्त करेंगे।

values <- extract(r,points)

df <- cbind.data.frame(coordinates(points),values)

मैंने यादृच्छिक बिंदुओं का उपयोग किया, इसलिए मुझे बहुत कुछ मिला NA। यह उम्मीद की जानी है।

head(df)
           x          y Temp Prec
1  112.95985  52.092650  -37  388
2  163.54612  85.281643   NA   NA
3   30.95257   5.932434  270  950
4   64.66979  40.912583  150  150
5 -169.40479 -58.889104   NA   NA
6   51.46045  54.813600   36  549

plot(r[[1]])
plot(points,add=T)

यहाँ छवि विवरण दर्ज करें

यह मत भूलो कि WorldClim डेटा में 10 का स्केल फैक्टर है, इसलिए Temp = -37-3.7 limC है।


निर्देशांक उदाहरण के साथ:

library(raster)
library(sp)

r <- getData("worldclim",var="bio",res=10)

r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")

lats <- c(9.093028 , 9.396111, 9.161417)
lons <- c(-11.7235, -11.72975, -11.709417) 

coords <- data.frame(x=lons,y=lats)

points <- SpatialPoints(coords, proj4string = r@crs)

values <- extract(r,points)

df <- cbind.data.frame(coordinates(points),values)

df
          x        y Temp Prec
1 -11.72350 9.093028  257 2752
2 -11.72975 9.396111  257 2377
3 -11.70942 9.161417  257 2752

यह वास्तव में मददगार था!
राख

तो, मेरे पास है pointsजो मेरे डेटा सेट के लैट और लॉन्ग का डेटाफ्रेम है। फिर मैं वैसे ही दौड़ता हूं जैसे तुमने किया था। हालांकि, जब मैं चलाने valuesमैं एक त्रुटि मिलती है: not compatible with requested type। मैंने यह भी देखा कि आपके pointsनमूने की मात्र सीमा को चिन्हित करती है, लेकिन लम्बे-लम्बे निर्देशांक के साथ एक वेक्टर उत्पन्न नहीं करती है
ऐश

हाँ, डिग्री दशमलव। क्योंकि WorldClim का CRS WGS 84 lat / lon (EPSG 4326) है। आप एक अलग सीआरएस में निर्देशांक आयात कर सकते हैं और इसके साथ परिवर्तित कर सकते हैं spTransform। यदि आपके पास DDMMSS में निर्देशांक हैं, तो इसे DD.MMM में रूपांतरित करें। दूसरा, आपने विभिन्न निर्देशांक के बारे में लिखा है, इसलिए मैं इसे बिंदुओं के रूप में व्याख्या करता हूं, आप एक ही स्कीमा के बजाय बहुभुज का उपयोग कर सकते हैं। यदि आपके पास इस जानकारी के साथ एक परत है, तो shapefileइसे लोड करने के लिए उपयोग करें।
aldo_tapia

मुझे आपका दूसरा बिंदु नहीं मिला। शायद, मैंने स्पष्ट रूप से नहीं बताया। मैंने यहां त्रुटि को चिह्नित किया है: eval.in/733232
ऐश

आह अच्छा। spsampleनमूना सीमाओं को निर्धारित करने के लिए एक स्थानिक वस्तु की आवश्यकता होती है। इनपुट ग्रिड, बहुभुज या रेखाएँ हैं। नमूना सीमा निर्धारित करने के लिए मैंने WorlClim सीमा बॉक्स का उपयोग किया था। मैंने अपने उत्तर में एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण बनाने के लिए ऐसा किया। आपके मामले में, आपको उपयोग करने की आवश्यकता नहीं है spsample, आप पहले ही नमूने के लिए निर्देशांक कर चुके हैं।
aldo_tapia
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.