计算R中多边形的经度和纬度范围

calculate longitudinal and latitudinal range of a polygon in R

我正在尝试找出计算多边形的最大纬度和经度范围(即最大“高度”和“长度”)的最佳方法。

从多边形的 sf 对象开始,可能的方法是:

  1. st_cast("POINT")
  2. 提取所有点的纬度和经度
  3. 找到每个多边形的最大纬度、最大经度、最小纬度和最小经度的点
  4. 计算距离

但是,我必须对数百个多边形执行此操作,并且想知道是否有更多 elegant/easy 的方法来执行此操作。我在这上面找不到任何东西(这看起来很奇怪)...

谢谢。

编辑

当然,我没有包含示例,因为我认为这是一个非常笼统的问题。但这可能有用:

library(sf)
library(dplyr)

demo(nc, ask = FALSE, verbose = FALSE)

然后我需要计算每个多边形的“长度”(即最大经度和最小经度之间的距离)和“高度”(最大纬度和最小纬度之间的距离)。

我认为 bbox() 确实可以提供帮助。我想我可以在每个多边形上使用 for 循环或 apply 到 运行 bbox()。但是后来我不知道如何将 bbox() 对象转换为数据框,以便从那里开始工作。 有什么建议吗?

我认为您可以应用以下示例:

# packages
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1

# data
nc = st_read(system.file("shape/nc.shp", package="sf"))
#> Reading layer `nc' from data source `C:\Users\Utente\Documents\R\win-library.6\sf\shape\nc.shp' using driver `ESRI Shapefile'
#> Simple feature collection with 100 features and 14 fields
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
#> geographic CRS: NAD27
par(mar = rep(0, 4))
plot(st_geometry(nc))


# estimate bbox values for each feature: 
res <- as.data.frame(do.call("rbind", lapply(st_geometry(nc), st_bbox)))
head(res)
#>        xmin     ymin      xmax     ymax
#> 1 -81.74107 36.23436 -81.23989 36.58965
#> 2 -81.34754 36.36536 -80.90344 36.57286
#> 3 -80.96577 36.23388 -80.43531 36.56521
#> 4 -76.33025 36.07282 -75.77316 36.55716
#> 5 -77.90121 36.16277 -77.07531 36.55629
#> 6 -77.21767 36.23024 -76.70750 36.55629

reprex package (v0.3.0)

于 2020-06-23 创建

bbox 并不精确等于 lat/long 的 min/max,但也许它们是一个很好的近似值。