R:提取到shapefile的光栅数据作为矩阵添加-writeOGR中出错
我已使用以下方法将几个光栅层的中值提取到多边形形状文件中:R:提取到shapefile的光栅数据作为矩阵添加-writeOGR中出错,r,spatial,raster,shapefile,r-raster,R,Spatial,Raster,Shapefile,R Raster,我已使用以下方法将几个光栅层的中值提取到多边形形状文件中: #read shapefile huc12 <- readOGR(dsn=gdb1, layer="HUC12_proj") #read raster temp.avg <- raster("projected_climate_rasters/temp_avg_copy") #extract median of raster for each polygon huc12$Temp.Avg.Med <- extrac
#read shapefile
huc12 <- readOGR(dsn=gdb1, layer="HUC12_proj")
#read raster
temp.avg <- raster("projected_climate_rasters/temp_avg_copy")
#extract median of raster for each polygon
huc12$Temp.Avg.Med <- extract(temp.avg, huc12, fun = median)
而另一个(PET_AnCV)显示为:
.. ..$ PET_AnCV : num [1:87700, 1] 94.4 ...
直到尝试编写新的shapefile时,我才发现这一点,这导致了以下错误:
> write_shape(huc12, "huc12")
Error in writeOGR(shp, dir, base, driver = "ESRI Shapefile", overwrite_layer = TRUE) :
Can't convert columns of class: matrix; column names: PET_AnCV
有什么建议吗?(考虑到所涉及的数据,我无法使其再现,也无法用示例形状文件再现。)这是因为从
PET\u AnCV
提取的值是矩阵而不是向量。从多层光栅提取值时,这是正常的,在多层光栅中,每个特征(即多边形)有一行,每个层有一列。在这种情况下,您只有一个图层(和列),因此在将其指定给shapefile时,可以轻松地选择相应的列:
vals <- extract(PET_AnCV,huc12)
huc12$PET_AnCV <- vals[,1]
# load libraries
library(raster)
library(rgdal)
library(foreign)
# download shapefile which is used for extraction
huc12 <- getData('GADM', country='AUT', level=1)
这里我需要将它写入磁盘,因为我还没有dbf文件。既然你已经有了它,你可以跳过这部分
# write to disk
writeOGR(huc12,dsn = 'huc12.shp','huc12',driver = 'ESRI Shapefile')
创建具有一些随机值的10层rasterbrick以从中提取:
# create fake value rasterbrick
ras <- raster()
PET_AnCV <- lapply(1:10,function(x) setValues(ras,runif(ncell(ras))))
PET_AnCV <- do.call(brick,PET_AnCV)
HTHVal:非常感谢您抽出时间!这很有帮助!
# write to disk
writeOGR(huc12,dsn = 'huc12.shp','huc12',driver = 'ESRI Shapefile')
# create fake value rasterbrick
ras <- raster()
PET_AnCV <- lapply(1:10,function(x) setValues(ras,runif(ncell(ras))))
PET_AnCV <- do.call(brick,PET_AnCV)
# extract values and append to dbf
vals <- extract(PET_AnCV,huc12,fun=median)
dbf <- read.dbf('huc12.dbf')
dbf <- cbind(dbf,vals)
write.dbf(dbf,'huc12.dbf')