背景
我使用 st_buffer 和 st_make_grid 从 xy 点创建绘图(如下面的代码所示)。 有了这些图,我想创建网格。创建网格后,我想将它们旋转到特定角度。在最后一步中我收到错误:
Error in MtrxSet(x, dim, type = "POLYGON", needClosed = TRUE) :
polygons not (all) closed
示例代码
library(dplyr)
library(tidyverse)
library(sf)
library(spatialEco)
xy <- st_as_sf(data.frame(x = 1,
y = 3),
coords = c("x", "y"))
plot(xy)
# 1) Buffer
cen_buffer = st_buffer(xy, 100)
ggplot() +
geom_sf(data= cen_buffer$geometry, color='black') +
geom_sf(data = xy$geometry, color = 'red')
# 2) Square
square_1ha <- st_make_grid(cen_buffer, n=1)
ggplot() +
geom_sf(data=cen_buffer, color='black') +
geom_sf(data=square_1ha, color='black', fill=NA) +
geom_sf(data = xy$geometry, color = 'red')
# 3) Grid
grid_spacing <- 10
grid_1ha <- st_make_grid(square_1ha, square = T, cellsize = c(grid_spacing, grid_spacing)) %>%
st_sf()
grid_1ha <- sf::st_set_precision(grid_1ha, 1000000) %>% sf::st_make_valid()
ggplot() +
geom_sf(data = grid_1ha$geometry, color = 'red') +
geom_sf(data=cen_buffer, color='black') +
geom_sf(data=square_1ha, color='black', fill=NA) +
geom_sf(data = xy$geometry, color = 'red')
# 4) Rotate
grid_1ha <- rotate.polygon(grid_1ha, angle = 45)
我尝试过的方法
使用 st_union(grid) 可以工作,并且多边形会旋转。然而,这并不能解决问题,因为内部网格将会消失。
我尝试使用这个
grid_1ha <- sf::st_set_precision(grid_1ha, 1000000) %>% sf::st_make_valid()
,因为根据其他stackoverflow问题,可以解决这个问题。就我而言,这不起作用。
我尝试使用
st_cast()
将网格转换为MULTIPOLYGON,但没有成功。