【发布时间】:2020-05-02 02:29:22
【问题描述】:
我正在尝试计算一组多边形的质心。
我的数据集geodata 包含五列,其中一列geometry 属于sfc_GEOMETRY 类,共有45759 行。
当我运行 sf::st_centroid(geodata) 时,我收到以下消息
CPL_geos_op("centroid", x, numeric(0), integer(0), numeric(0), 中的错误:评估错误:IllegalArgumentException:LinearRing 的点不形成闭合线串。
另外:警告信息:
1:在 st_centroid.sf(geodata) 中: st_centroid 假设属性在 x 的几何图形上是恒定的
2:在 st_centroid.sfc(st_geometry(x), of_largest_polygon = of_largest_polygon) 中: st_centroid 没有为经度/纬度数据提供正确的质心
- 我应该运行一个循环来检测哪个几何图形没有闭合吗?
- 这是我的几何类的问题吗?应该是
sfc_MULTIPOLYGON吗?
可能的解决方案:
我在通过循环读取文件列表时遇到了这个问题。循环会读入文件,然后将rbind 它们一起放入geodata,然后然后计算质心:
for(i in 1:length(list)){
file <- st_read(list[i])
geodata <- rbind(geodata, file) #geodata is here a void sf object
}
geocent <- st_centroid(geodata)
当我计算循环中的质心 时(对于列表中的每个文件),错误消失了。
for(i in 1:length(list)){
file <- st_read(list[i])
file <- st_centroid(file)
geocent <- rbind(geodata, file) #geodata is here a void sf object
}
因此,我认为问题在于绑定操作。
- 也许我没有以正确的方式定义我的 void
sf对象。 - 也许
rbind不是合适的函数,或者我应该指定它的参数。
【问题讨论】:
-
在您的数据子集上是否会像这样失败?在每一行?在一排还是几排?这些行有什么不同?没有你的数据很难说,所以你应该自己调查一下。