Ищем алгоритм смещения скелета или полигона в R
Я нашел несколько полезных ссылок в этом вопросе SO . Алгоритм для надувания / сдувания (смещения, буферизации) полигонов. Извините - нет сетевого доступа sos
не работает, так у кого-нибудь есть реализация алгоритма скелета в R?
Изменить: я хотел бы генерировать дефлированные полигоны, как в ссылке Stackru (верхнее изображение); или как видно на http://en.wikipedia.org/wiki/Straight_skeleton.
1 ответ
Решение
gBuffer()
от элегантного и мощного пакета rgeos принимает отрицательные значения в своем width
аргумент, возвращающийся SpatialPolygons
которые "сжались" на заданную сумму.
library(sp)
library(rgeos)
## Create a SpatialPolygons object from set of x-y coordinates (the hard part!)
xy2SP <- function(xy, ID=NULL) {
if(is.null(ID)) ID <- sample(1e12, size=1)
SpatialPolygons(list(Polygons(list(Polygon(xy)), ID=ID)),
proj4string=CRS("+proj=merc"))
}
xy <- data.frame(x=c(0,2,3,1,0), y=c(0,0,2,2,0))
SP <- xy2SP(xy)
## Shrink the SpatialPolygons object by supplying a negative width to gBuffer()
plot(SP)
plot(gBuffer(SP, width=-0.2), add=TRUE, border="red")