Hi all,
我正在努力解决这个问题,希望有人能提出一个简单的解决方案。
我的目标是在多边形的范围内创建一个规则的多边形网格,但是旋转的
按用户定义的角度.
我知道我可以轻松地创建北/南多边形网格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)
我还知道我可以使用以下方法轻松地将其旋转给定角度:
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)
我的问题是,根据旋转角度,一般的“方向”
输入多边形和像元大小,旋转的网格可能不再覆盖整个范围
多边形, 如下所示:
rotang = 45
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)
关于如何解决这个问题的任何聪明的想法创建完全覆盖多边形的旋转网格(此外通过创建一个更大的
首先是网格,这对于小单元来说效率很低?)?
Either sf
or sp
解决方案将受到欢迎。如果可能的话,“奖励积分”
使网格从多边形的最极端之一开始(即
网格的第一条线“接触”多边形的北顶点),但这不是“强制性的”。
创建于 2018-07-11代表包 http://reprex.tidyverse.org(v0.2.0)。