R:将给定的 Box 分成 X 个具有给定对角线的新框

R: divide a given Box into X amount of new boxes with given diagonal

我有一个坐标为 (lon,lat) 的德国 Bbox:

g_bbox<-c(xmin=5.98865807458, ymin=47.3024876979, xmax=15.0169958839, ymax=54.983104153)

我想将 bbox 分成 (x) 个对角线为 50 km 的 bbox。

对角线的长度可能会略有不同(+/-10km).

生成的 BBox 不应重叠。

BBoxes 的数量 (x) 应该是适合 g_bbox[= 的 BBoxes 的最大数量11=]

我想要的结果在最好的情况下是一个包​​含 xmin,ymin,xmax,ymax 列的数据框。

我该怎么做?

我会建议以下解决方案。

加载包

library(sf)
#> Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1

加载数据

g_bbox <- st_bbox(c(xmin = 5.98865807458, ymin = 47.3024876979, xmax = 15.0169958839, ymax = 54.983104153), crs = 4326)

将 bbox 转换为具有投影坐标的多边形

g_poly <- st_as_sfc(g_bbox) %>%
  st_transform(32632)

情节

mapview::mapview(g_poly)

创建网格

g_grid <- st_make_grid(g_poly, cellsize = 50000 / sqrt(2))

检查一条对角线

sqrt(
  (st_bbox(g_grid[[1]])[3] - st_bbox(g_grid[[1]])[1]) ^ 2 # x axis
  +
  (st_bbox(g_grid[[1]])[4] - st_bbox(g_grid[[1]])[2]) ^ 2 # y axis
)
#>  xmax 
#> 50000

情节

mapview::mapview(g_grid)

估计所有bbox

head(do.call("rbind", lapply(g_grid %>% st_transform(4326), st_bbox)))
#>          xmin     ymin     xmax     ymax
#> [1,] 5.970445 47.30249 6.455849 47.63163
#> [2,] 6.440454 47.31382 6.923301 47.64117
#> [3,] 6.910729 47.32325 7.390967 47.64877
#> [4,] 7.381223 47.33077 7.858798 47.65445
#> [5,] 7.851885 47.33638 8.326746 47.65819
#> [6,] 8.322667 47.34009 8.794764 47.66001

reprex package (v2.0.0)

于 2021-06-30 创建