如何使用数据帧中的数据点(坐标)提取栅格(在这种情况下为土地覆盖类型)栅格中的像元值

时间:2019-05-22 11:30:37

标签: r dataframe coordinates extract raster

我有一个带有坐标的相机陷阱数据的数据框(称为“事件”),并想使用每个位置的栅格文件提取栖息地类型,然后将栖息地类型添加到我的数据框中。如何使用栅格和数据框坐标提取此信息?之后如何将其添加到另一个主数据框中?

## 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 :(得分:0)

您似乎拥有点和多边形,以及用点查询其值的内容。换句话说,从多边形中提取点的值。在这种情况下,创建RasterLayer(和/或SpatialPixels)对象没有任何意义。

始终提供一些示例数据(p具有多边形,d是具有坐标的data.frame)

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