大家好,
我正在努力解决这个问题,希望有人能提出一个简单的解决方案.
我的目标是在多边形的范围内创建一个规则的多边形网格,但是按用户定义的角度旋转.
我知道我可以在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)