Rを使用してWorldClimからデータを抽出しますか?[閉まっている]


9

1000の異なる緯度と経度のデータセットがあります。これらの各座標の平均年間気温と年間降水量を抽出したいと思います。これらのデータは、WorldClimから簡単に取得でき、DIVA-GISを使用して処理できます。

とにかくこれをRで行うことはありますか?

最終的な出力を、各座標の年間気温と降水量を含むデータフレームにしたいと考えています。私はRのGISに慣れていないので、この出力に必要なライブラリと共に基本的なコードチャンクを探しています。

回答:


16

rasterパッケージを使用してWorldClimデータをダウンロードできます?getdata。解像度、変数、座標については、を参照してください。

例として:

library(raster)
library(sp)

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

Bio 1とBio12は、平均気温と年間降水量です。

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

例としてランダムな点を作成しSpatialPointます。あなたの場合、座標を使用してオブジェクトを作成します。

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

最後に、を使用しますextractcbind.data.frameし、coordinatesあなたは欲望のdata.frameを取得します。

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ºC であることを忘れないでください。


座標の例:

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

それは本当に役に立ちました!
Ash

だから、私はpoints私のデータセットの緯度と経度のデータフレームです。それから私はあなたがしたのと全く同じように走ります。しかし、実行するvaluesとエラーが発生しますnot compatible with requested type。またpoints、サンプルの範囲をマークするだけで緯度経度の座標を持つベクトルが生成されないことにも気付きました
Ash

はい、小数です。WorldClimのCRSはWGS 84 lat / lon(EPSG 4326)だからです。座標を別のCRSにインポートして、で変換できspTransformます。DDMMSSに座標がある場合は、それをDD.MMMに変換します。第二に、あなたは異なる座標について書いたので、私はそれをポイントとして解釈します、同じスキーマで代わりにポリゴンを使用できます。この情報を含むレイヤーがある場合は、shapefileそれをロードするために使用します。
aldo_tapia 2017

2つ目のポイントはわかりません。おそらく、私は明確に説明しませんでした。ここでエラーをマークしました:eval.in/733232
Ash

あ、そう。spsampleサンプル境界を設定するには、空間オブジェクトが必要です。入力は、グリッド、ポリゴン、またはラインです。私がやったことは、WorlClim境界ボックスを使用してサンプル範囲を設定することでした。私の回答で再現可能な例を作るためにそれをしました。あなたの場合、を使用する必要はありませんspsample。すでにサンプリングするための座標があります。
aldo_tapia 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.