相关疑难解决方法(0)

在空间范围内创建规则的多边形网格,旋转给定角度

大家好,

我正在努力解决这个问题,希望有人能提出一个简单的解决方案.

我的目标是在多边形的范围内创建一个规则的多边形网格,但是按用户定义的角度旋转.

我知道我可以在sf使用中轻松创建一个北/南多边形网格,例如:

library(sf)
#> Linking to GEOS 3.6.2, GDAL 2.2.3, proj.4 4.9.3
inpoly <- st_read(system.file("shape/nc.shp", package="sf"))[1,] %>% 
  sf::st_transform(3857) %>% 
  sf::st_geometry()
grd <- sf::st_make_grid(inpoly, cellsize = 3000)
plot(inpoly, col = "blue")
plot(grd, add = TRUE)
Run Code Online (Sandbox Code Playgroud)

我也知道我可以使用以下方法轻松旋转给定的角度:

rotang = 20
rot = function(a) matrix(c(cos(a), sin(a), -sin(a), cos(a)), 2, 2)
grd_rot <- (grd - st_centroid(st_union(grd))) * rot(rotang * pi / 180) +
  st_centroid(st_union(grd))
plot(inpoly, col = "blue")
plot(grd_rot, add = TRUE)
Run Code Online (Sandbox Code Playgroud)

我的问题是,根据旋转角度,输入多边形的一般"方向"和单元格大小,旋转的网格可能不再覆盖多边形的整个范围,如下所示:

rotang = 45 …
Run Code Online (Sandbox Code Playgroud)

r r-sp r-sf

12
推荐指数
1
解决办法
808
查看次数

标签 统计

r ×1

r-sf ×1

r-sp ×1