我导入了一个包含不同森林补丁(称为“补丁”)的多多边形 shp 文件: 补丁
然后,我在名为“SenBel”的栅格中为同一区域砖砌了不同的 Sentinel-2 波段
数据:SentinelB6-8_patch
代码变砖:
SenBel <- brick(Sentinel_noCl_B6_10m,
Sentinel_noCl_B7_10m, Sentinel_noCl_B8, nl=3)
我想计算每个补丁每个波段的平均反射率值,并将其添加到 shp 文件的属性表中作为新列,分别包含波段名称。 首先我创建了这个函数:
`f1 <- function(raster, column_name) {
values <- extract(raster, patch)
mean_values <- unlist(lapply(values, mean, na.rm = TRUE))
patch[[column_name]] <- mean_values
}
#Calculate mean values for bands
bands <- c( "B6", "B7", "B8")
for (i in bands) {
f1(SenBel[[i]], paste0("mean", i))
}`
我收到以下错误:
Error in h(simpleError(msg, call)) : error in evaluating the argument 'x' in selecting a method for function 'addAttrToGeom': geometries containing M not supported by sp use
st_zm(...,什么=“M”)
当我尝试使用 st_zm 函数时,如下所示:
`st_zm(patch,drop=TRUE, what="ZM")
`
我在上面的函数中不断收到相同的错误,就好像什么都没有改变一样。 如果我检查 M 值,它仍然显示“TRUE”:
`contains_M_values <- function(x) {
coords <- st_coordinates(st_geometry(x))
dim(coords)[[2]] > 2 # Check if coordinates have more than 2 dimensions (indicating M values)
}
contains_M_values(patch)
[1] TRUE`
还有其他方法可以解决这个问题吗?我不完全理解 M 值是什么或我的 shp 文件如何包含它们。 预先感谢!
你的
contains_M_values
不检查m值是否消失;按照您的方式使用 st_zm
然后打印对象;现在应该显示 Dimension: XY
,表明 M
已被删除。阅读 ?st_coordinates
了解该函数返回的内容(除了顶点、环 ID)。