如何使用 SF 包计算质心和多边形边缘之间的最大距离?

Joh*_* J. 4 gis r r-sp r-sf

我有一堆不同形状和大小的具有质心的多边形。我想计算从每个质心到其各自多边形最远点的距离。

这个问题已经在这里使用 package::sp 和 package::rgeos 解决了。

根据其简介,SF 包“旨在长期接替 SP”。查看文档我无法找到解决方案,但我不是简单功能的专家。有没有一个好的方法可以使用 sf 包完成此操作,或者我现在应该坚持使用 sf 和 rgeos 吗?

lbu*_*ett 6

将多边形投射到 POINT(从而获取顶点),然后计算质心的距离应该可以工作。就像是:

library(sf)

# build a test poly
geometry <- st_sfc(st_polygon(list(rbind(c(0,0), c(1,0), c(1,3),  c(0,0))))) 
pol <- st_sf(r = 5, geometry)

# compute distances 
distances <- pol %>% 
  st_cast("POINT") %>% 
  st_distance(st_centroid(pol))

distances
#>          [,1]
#> [1,] 1.201850
#> [2,] 1.054093
#> [3,] 2.027588
#> [4,] 1.201850

# maximum dist:
max_dist <- max(distances)
max_dist
#> [1] 2.027588

# plot to see if is this correct: seems so.
plot(st_geometry(pol))
plot(st_centroid(pol), add = T)
plot(st_cast(pol, "POINT")[which.max(distances),],
     cex =3, add = T, col = "red")
Run Code Online (Sandbox Code Playgroud)

由于第一个和最后一个顶点相同,您会得到两次相同的距离,但由于您对最大值感兴趣,所以这应该不重要。

华泰