如何从六边形网格定义单元格大小?

问题描述 投票:0回答:1

我正在尝试从生物群系边界(cerrado,但它可以应用于任何其他政治边界)创建一个六角形网格。在 sf 文档中,我看到可以使用 st_make_grid 函数来完成它,但不清楚如何定义大小单元格。我想用 25km2 大小的单元格制作一个六角形网格。

我试过使用这个功能:

grid = sf::st_make_grid(x= shpCerrado, cellsize = 0.4, square = FALSE)

我用了0.4的尺寸,因为有朋友在QGis里比较过,说这个尺寸有25m的边。但是我们不确定小区的总面积(我们希望是 25 平方公里)。

我试图找到一些包文档或其他教程来解释如何定义六边形网格的单元格区域,但我找不到。有谁知道这个计算是如何完成的?或者还有另一种方法可以在 R 中制作这个网格吗?

r spatial shapefile sf rasterize
1个回答
0
投票

您可以从六边形面积的通用公式中推导出目标单元格大小;用一点代数你会到达

sqrt(2*cell_area/sqrt(3))

或者考虑这段代码;它涵盖了著名的

nc.shp
中的Ashe县,该
{sf}
在25平方公里的网格中。

library(sf)
library(dplyr)

nc <- st_read(system.file("shape/nc.shp", package="sf")) %>% 
  slice(1) %>% # coiunty Ashe only
  st_geometry() %>% # no need for data anymore
  st_transform(3857) # transform to a metric CRS 

cell_area <- units::as_units(25, "km^2") # target grid size

grid_spacing <- sqrt(2*cell_area/sqrt(3)) # size of hexagon calculated from area

grid <- nc %>% 
  st_make_grid(square = F, cellsize = grid_spacing)  # make the grid
  
plot(nc, col = "red")
plot(grid, add = T)

© www.soinside.com 2019 - 2024. All rights reserved.