На самом деле вы правы! Я вращал «назад» сетку, используя центр тяжести повернутого многоугольника вместо центра тяжести «оригинального». Ваше решение, кажется, работает отлично. Большое спасибо!

привет,

Я борюсь с этим и надеюсь, что кто-то может предложить простое решение.

Моя цель - создать правильную многоугольную сетку по размеру многоугольника, ноповернут на определенный пользователем угол.

Я знаю, что могу легко создать сетку многоугольника Север / Юг в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)

Любая умная идея о том, как я мог бы решить эту проблему исоздать повернутую сетку, полностью покрывающую многоугольник (кроме того, для начала нужно создать более крупную сетку, что совершенно неэффективно для небольших ячеек?)

Илиsf или жеsp решения будут приветствоваться. «Бонусные точки», если сетку можно начинать в одной из крайних вершин многоугольника (то есть первая линия сетки «касается» северной вершины многоугольника), но это не является «обязательным».

Создано в 2018-07-11представьте пакет (V0.2.0).

Ответы на вопрос(1)

Ваш ответ на вопрос