gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:05:02 29 4
gpt4 key购买 nike

大家好,

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

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

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com