Как извлечь значения ячейки в растре (в данном случае тип рельефа) с точками данных (координатами) во фрейме данных - PullRequest
0 голосов
/ 22 мая 2019

У меня есть фрейм данных (называемый «событиями») данных ловушки камеры с координатами, и я хочу извлечь тип среды обитания, используя растровый файл для каждого местоположения, и добавить тип среды обитания в мой фрейм данных. Как извлечь это, используя растр и координаты фрейма данных? Как добавить это в другой основной фрейм данных впоследствии?

## Creating the raster file from a shapefile

myfile <- shapefile("dpky.lc5.shp")

myfile@data$VALUE<-as.numeric(myfile@data$VALUE) # VALUE gives the numeric code for habitat type.

sr <- "+init=EPSG:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"

r <- raster(myfile, res=100, crs=sr)

myraster<-rasterize(myfile,r,field="VALUE")

myras_spdf <- as(myraster, "SpatialPixelsDataFrame")

myras_df <- as.data.frame(myras_spdf)

## Data frame with coordinates

events <- read.csv("DPKY.Clean.csv",h=T,sep=";")

events.sp<-SpatialPoints(events[,c("Longitude","Latitude")],proj4string = CRS("+init=EPSG:4326"))

events.sp

Я не смог найти ни одного кода для этой проблемы, но был специфичен для моей проблемы. Мне удалось использовать другой файл .gri, но этот код не работает для этого.

1 Ответ

0 голосов
/ 22 мая 2019

Похоже, у вас есть точки и полигоны, и что нужно запрашивать их значения с помощью точек. Другими словами, извлеките значения точек из многоугольников. В этом случае не имеет смысла создавать объект RasterLayer (и / или SpatialPixels).

Всегда предоставляйте некоторые примеры данных (p имеет многоугольники, d - это фрейм данных с координатами)

library(raster)
p <- shapefile(system.file("external/lux.shp", package="raster"))
set.seed(10)
d <- coordinates(spsample(p, 4, "regular"))
colnames(d) <- c("lon", "lat")
d <- data.frame(id=1:nrow(d), d)

Решение

x <- extract(p, d[,c("lon", "lat")])

Теперь вы можете сделать

cbind(d, x[,c(4,6)])
#  id      lon      lat     NAME_1           NAME_2
#1  1 5.889636 49.53576 Luxembourg Esch-sur-Alzette
#2  2 6.176340 49.53576 Luxembourg       Luxembourg
#3  3 5.889636 49.82246   Diekirch          Redange
#4  4 6.176340 49.82246   Diekirch         Diekirch

или как то так

d$NAME_2 <- x$NAME_2
d
#  id      lon      lat           NAME_2
#1  1 5.889636 49.53576 Esch-sur-Alzette
#2  2 6.176340 49.53576       Luxembourg
#3  3 5.889636 49.82246          Redange
#4  4 6.176340 49.82246         Diekirch
...