计算R中多边形的经度和纬度范围
calculate longitudinal and latitudinal range of a polygon in R
我正在尝试找出计算多边形的最大纬度和经度范围(即最大“高度”和“长度”)的最佳方法。
从多边形的 sf 对象开始,可能的方法是:
- st_cast("POINT")
- 提取所有点的纬度和经度
- 找到每个多边形的最大纬度、最大经度、最小纬度和最小经度的点
- 计算距离
但是,我必须对数百个多边形执行此操作,并且想知道是否有更多 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,但也许它们是一个很好的近似值。
我正在尝试找出计算多边形的最大纬度和经度范围(即最大“高度”和“长度”)的最佳方法。
从多边形的 sf 对象开始,可能的方法是:
- st_cast("POINT")
- 提取所有点的纬度和经度
- 找到每个多边形的最大纬度、最大经度、最小纬度和最小经度的点
- 计算距离
但是,我必须对数百个多边形执行此操作,并且想知道是否有更多 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,但也许它们是一个很好的近似值。