В R у меня есть один объект SpatialPolygons
(т. Е. Многополигоны), содержащий несколько сотен полигонов. Я хотел бы разбить этот объект SpatialPolygons
на список Polygons
(то есть отверстия должны оставаться прикрепленными к родительскому многоугольнику).Разделить многоугольные части одного объекта SpatialPolygons
Любая идея, как это сделать?
EDITED:
Используя следующий пример, приведенный в sp
упаковке:
# simple example, from vignette("sp"):
Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1 = Polygons(list(Sr1), "s1")
Srs2 = Polygons(list(Sr2), "s2")
Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
Затем работает out = lapply([email protected], slot, "Polygons")
. Я получаю список из трех Polygons
(то есть Srs1
, Srs2
, Srs3
).
Однако случай, который я пытаюсь решить, немного отличается от этого примера. Объект SpatialPolygons
, который я пытаюсь разбить, является результатом геометрического объединения, выполненного с помощью функции gUnaryUnion
(в пакете RGEOS
). Если я применил out <- lapply([email protected], slot, "Polygons")
, я получаю уникальный список объектов Polygon
(n.b. не список объектов Polygons
). Другими словами, каждый многоугольник отделен от его отверстия (я).
Запуск topol <- sapply(unlist(out), function(x) [email protected])
я получаю:
> length(topol)
[1] 4996
> sum(topol, na.rm=TRUE)
[1] 469
Согласно RGEOS
v0.3-2 вручную (http://cran.r-project.org/web/packages/rgeos/rgeos.pdf):
Для того, чтобы rgeos функционировать должным образом, необходимо что все отверстия в заданной геометрии POLYGON или MULTIPOLYGON должны принадлежать специфицированному полигону . В реализации класса SpatialPolygons в данный момент не включена . Чтобы обойти это ограничение rgeos использует дополнительный атрибут комментария в классе Polygons, который указывает, какое отверстие принадлежит к тому многоугольнику. В текущей реализации этот комментарий представляет собой текстовую строку чисел, разделенных пробелами , где порядок номеров соответствует порядку объектов Polygon в слоте Polygons объекта Polygons. A 0 подразумевает, что объект Polygon является многоугольником, отличное от нуля число подразумевает , что объект Polygon является отверстием со значением, указывающим индекс многоугольника, который «владеет» отверстием.
Так createSPComment()
функция в RGEOS
, вероятно, будет обходной путь перегруппировываться многоугольников и отверстий.