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

标签 r sp sf

大家好,

我正在为此苦苦挣扎,希望有人能提出一个简单的解决方案。

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

我知道我可以在 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)



关于如何解决这个问题的任何聪明想法和 创建一个完全覆盖多边形的旋转网格 (除了创建一个更大的
网格开始,这对于小单元格来说效率很低?)?

要么sfsp欢迎提供解决方案。如果可能,“奖励积分”
使网格从多边形的极端顶点之一开始(即
网格的第一行“接触”多边形的北顶点),但这不是“强制性的”。

创建于 2018-07-11 由 reprex package (v0.2.0)。

最佳答案

您没有指定@JoshO'Brien 的建议究竟如何对您不起作用,但我怀疑您围绕不同的旋转中心旋转了多边形和网格。您没有对旋转原点指定任何约束,因此我在下面的代码片段中假设这并不重要,但是只要两个旋转相同,您就可以使用任何点:

library(sf)
rotang = 45
rot = function(a) matrix(c(cos(a), sin(a), -sin(a), cos(a)), 2, 2)
tran = function(geo, ang, center) (geo - center) * rot(ang * pi / 180) + center
inpoly <- st_read(system.file("shape/nc.shp", package="sf"))[1,] %>% 
  sf::st_transform(3857) %>% 
  sf::st_geometry()
center <- st_centroid(st_union(inpoly))
grd <- sf::st_make_grid(tran(inpoly, -rotang, center), cellsize = 3000)
grd_rot <- tran(grd, rotang, center)
plot(inpoly, col = "blue")
plot(grd_rot, add = TRUE)

关于r - 在空间范围内创建规则多边形网格,旋转给定角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51282724/

相关文章:

r - 在ggplot上绘制shapefile

r - 当我在 group_by() 和 summarize() 链中使用自己的函数时,它错误地为每个组返回相同的结果

r - 通过计算特定字符来对字符串进行分组

r - 将R解释器和R作为共享库安装在同一棵树下

r - PROJ4 到 PROJ6 升级和 "Discarded datum"警告

r - 将条形图绘制到 R ggplot2 中的 map

r - 带有 ggplot2 的堆叠蝴蝶/ Tornado 图,以零为中心,用于可视化前后李克特问卷

single-sign-on - Keycloak:外部 IdP 的无效 SAML 响应

r - 如何使用 sf 库查找多边形的质心

R 加载错误 - libproj.so.13 : cannot open shared object file: No such file or directory