WorldClim'den veri ayıklamak için R'yi mi kullanıyorsunuz? [kapalı]


9

1000 farklı enlem-boylam içeren bir veri setim var. Bu koordinatların her biri için ortalama yıllık sıcaklık ve yıllık yağış elde etmek istiyorum. Bu veriler WorldClim'den kolayca elde edilebilir ve DIVA-GIS kullanılarak işlenebilir.

R üzerinde bunu yapmak için yine de var mı?

Son çıktımın her koordinat için yıllık sıcaklık ve yağışa sahip bir veri çerçevesi olmasını istiyorum. Ben GIS R yeni, bu yüzden bu çıktı için gerekli kitaplıkları ile birlikte bir temel kod yığın aramak.

Yanıtlar:


17

rasterPaketi WorldClim verilerini indirmek için kullanabilirsiniz , ?getdataçözünürlük, değişkenler ve koordinatlar hakkında bilgi edinin.

Örnek olarak:

library(raster)
library(sp)

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

Bio 1 ve Bio12 ortalama yıllık sıcaklık ve yıllık yağıştır :

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

Örnek olarak rastgele noktalar oluşturuyorum, durumunuzda bir SpatialPointnesne oluşturmak için koordinatları kullanın .

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

Son olarak, kullanın extract. İle cbind.data.frameve coordinatesarzu data.frame alacaksınız.

values <- extract(r,points)

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

Rastgele noktalar kullandım, bu yüzden çok şey aldım NA. Beklenecek.

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)

resim açıklamasını buraya girin

WorldClim verilerinin ölçek faktörü 10'dur, Temp = -37-3,7 isC'dir.


Koordinatlar örneği:

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

Bu gerçekten yardımcı oldu!
Ash

Yani, pointsveri setlerimin yassı ve uzun bir veri çerçevesi var. Sonra tam olarak senin gibi koşuyorum. Ancak, ne zaman çalıştırmak valuesbir hata alıyorum: not compatible with requested type. Ayrıca points, numunenizin boyutunu işaretlediğini, ancak enlemesine uzun koordinatlarla bir vektör üretmediğini fark ettim
Ash

Evet, derece ondalıkları. Çünkü WorldClim'in CRS'si WGS 84 lat / lon'dur (EPSG 4326). Farklı bir CRS'de koordinatları alabilir ve ile dönüştürebilirsiniz spTransform. DDMMSS'de koordinatlarınız varsa, bunu DD.MMM'ye dönüştürün. İkincisi, farklı koordinatlar hakkında yazdınız, bu yüzden puan olarak yorumluyorum, aynı şema yerine çokgenleri kullanabilirsiniz. Bu bilgileri içeren bir katmanınız varsa, shapefileyüklemek için kullanın .
aldo_tapia

İkinci noktanı anlamıyorum. Belki de net bir şekilde açıklama yapmadım. Burada hatayı işaretledim: eval.in/733232
Ash

Ah tamam. spsampleörnek sınırlarını belirlemek için uzamsal bir nesne gerektirir. Girişler ızgaralar, çokgenler veya çizgilerdir. Yaptığım şey, örnek kapsamını ayarlamak için WorlClim sınır kutusunu kullanmaktı. Cevabımda tekrarlanabilir bir örnek yapmak için yaptım. Sizin durumunuzda, kullanmak zorunda değilsiniz spsample, zaten örneklemek için koordinatlarınız var.
aldo_tapia
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.