sf 包中的 M 值和 st_zm 函数出现错误

问题描述 投票:0回答:1

我导入了一个包含不同森林补丁(称为“补丁”)的多多边形 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 文件如何包含它们。 预先感谢!

r-sf r-raster sentinel2 multipolygons
1个回答
0
投票

你的

contains_M_values
不检查m值是否消失;按照您的方式使用
st_zm
然后打印对象;现在应该显示
Dimension:     XY
,表明
M
已被删除。阅读
?st_coordinates
了解该函数返回的内容(除了顶点、环 ID)。

© www.soinside.com 2019 - 2024. All rights reserved.