我有一个带有坐标的相机陷阱数据的数据框(称为“事件”),并想使用每个位置的栅格文件提取栖息地类型,然后将栖息地类型添加到我的数据框中。如何使用栅格和数据框坐标提取此信息?之后如何将其添加到另一个主数据框中?
## 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文件,但是该代码对此无效。
答案 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