Використовуючи R для отримання даних з WorldClim? [зачинено]


9

У мене є набір даних з 1000 різних широт-довгот. Я хочу отримати середню річну температуру та річну кількість опадів для кожної з цих координат. Ці дані можна легко отримати від WorldClim та обробити за допомогою DIVA-GIS.

Чи потрібно це зробити на R?

Я хочу, щоб моїм кінцевим результатом був кадр даних із річною температурою та опадами для кожної координати. Я новачок в GIS в R, тому шукаю базовий фрагмент коду разом з необхідними бібліотеками для цього виводу.

Відповіді:


17

Ви можете використовувати 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")    

Нарешті, використовуйте extract. З cbind.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

Це було дуже корисно!
Еш

Отже, у мене pointsє кадр даних про тривалість і тривалість мого набору даних. Тоді я біжу саме так, як ви. Однак, коли я біжу , valuesя отримую повідомлення про помилку: not compatible with requested type. Я також зауважив, що ваш pointsщойно відмічає масштаб вибірки, але не створює вектор з координатами довгих довгих
Еш,

Так, десяткові знаки. Тому що CRS WorldClim - це WGS 84 lat / lon (EPSG 4326). Ви можете імпортувати координати в інші CRS та перетворювати їх spTransform. Якщо у вас є координати в DDMMSS, перетворіть їх у DD.MMM. По-друге, ви писали про різні координати, тому я трактую це як точки, замість цього можна використовувати багатокутники з тією ж схемою. Якщо у вас є шар з цією інформацією, використовуйте його shapefileдля завантаження.
aldo_tapia

Я не розумію вашої другої точки. Можливо, я не пояснив однозначно. Я позначив помилку тут: eval.in/733232
Ash Ash

А, добре. spsampleДля встановлення меж вибірки потрібен просторовий об'єкт. Вхідні дані - це сітки, багатокутники або лінії. Що я зробив, це використовувати граничне поле WorlClim для встановлення вибіркової міри. Я зробив це, щоб зробити відтворювальний приклад у своїй відповіді. У вашому випадку вам не потрібно використовувати spsample, ви вже маєте координати для вибірки.
aldo_tapia
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.