Удаление дырок из многоугольников в R sf - PullRequest
0 голосов
/ 04 октября 2018

Есть ли способ удалить отверстия из многоугольника в R с пакетом sf?Я был бы заинтересован в решениях, которые включают и другие пакеты.Вот пример многоугольника с двумя отверстиями.

library(sf)
outer = matrix(c(0,0,10,0,10,10,0,10,0,0),ncol=2, byrow=TRUE)
hole1 = matrix(c(1,1,1,2,2,2,2,1,1,1),ncol=2, byrow=TRUE)
hole2 = matrix(c(5,5,5,6,6,6,6,5,5,5),ncol=2, byrow=TRUE)
pts = list(outer, hole1, hole2)
(pl1 = st_polygon(pts))
# POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1),(5 5, 5 6, 6 6, 6 5, 5 5))    

Вот рисунок:

plot(pl1, col="red")

plot(pl1, col=

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Пакет nngeo представил функцию, которая делает это после того, как @lbusett ответил на этот вопрос (и ссылается на него в описании, молодец).

Таким образом, вы можете использовать:

nngeo::st_remove_holes(your_sf_object)

См. https://rdrr.io/cran/nngeo/man/st_remove_holes.html

0 голосов
/ 05 октября 2018

После https://github.com/r-spatial/sf/issues/609#issuecomment-357426716, это может работать:

library(sf)
outer = matrix(c(0,0,10,0,10,10,0,10,0,0),ncol=2, byrow=TRUE)
hole1 = matrix(c(1,1,1,2,2,2,2,1,1,1),ncol=2, byrow=TRUE)
hole2 = matrix(c(5,5,5,6,6,6,6,5,5,5),ncol=2, byrow=TRUE)
pts = list(outer, hole1, hole2)
pl1 = st_geometry(st_polygon(pts))

plot(pl1)

pl2 <- st_multipolygon(lapply(pl1, function(x) x[1]))
plot(pl2)

Создано в 2018 году-10-05 * представит пакет (v0.2.1)

...