R Buffer / Увеличить многоугольник - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть простой многоугольник.

dfr <- data.frame(x=c(2,2.5,4,5,4.5,3,2),y=c(2,3,3.5,3,2.8,2.5,2))
plot(dfr)
polygon(dfr)

enter image description here

Существуют ли функции R для одинакового увеличения размера многоугольника во всех направлениях?

enter image description here

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Для чистого построения я нашел это решение.

library(ggplot2)
dfr <- data.frame(x=c(2,2.5,4,5,4.5,3,2),y=c(2,3,3.5,3,2.8,2.5,2))

# vanilla polygon
ggplot(dfr,aes(x,y))+
  geom_polygon(fill=NA,col="black")+
  theme_minimal()

enter image description here

# enlarge polygon
library(ggforce)
ggplot(dfr,aes(x,y))+
  geom_polygon(fill=NA,col="black")+
  geom_shape(fill=NA,col="red",expand=unit(0.2,"cm"))+
  theme_minimal()

enter image description here

# enlarge with pretty curved edges
library(ggforce)
ggplot(dfr,aes(x,y))+
  geom_polygon(fill=NA,col="black")+
  geom_shape(fill=NA,col="red",expand=unit(0.2,"cm"),radius=unit(0.2,"cm"))+
  theme_minimal()

enter image description here

Обратите внимание, что версия ggforce 0.1.3 в CRAN пока не имеет этой функции. Версия на GitHub имеет эту функцию.

0 голосов
/ 09 сентября 2018

Используя пакет sf, вы можете преобразовать полигон в пространственный объект и использовать st_buffer:

> p = st_polygon(list(as.matrix(dfr)))
> pbuf = st_buffer(p, .4)
> plot(pbuf)
> plot(p,add=TRUE,col="red")
> 

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...