У меня есть SpatialPolygons
объект. Этот объект имеет одну особенность, объект Polygons, который сам состоит из нескольких объектов Polygon.
Я хотел бы установить объект SpatialPolygons так, чтобы у объекта Polygons был только один объект Polygon, то есть Polygon с наибольшей площадью.
Я пробовал много разных подходов и не могу понять, как выполнить поднаборы на уровне субполигонов.
Вот пример:
#create polygon
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)))
Srs = Polygons(list(Sr1,Sr2), "s1/2")
SpP = SpatialPolygons(list(Srs))
В этом примере SpP имеет один объект Polygons. Первый под-полигон объекта Polygons имеет область 5.5, а второй - область 1.5. Я хотел бы установить объект SpatialPolygons таким образом, чтобы у объекта Polygons был только один полигон, один с площадью 5.5.
Возможно ли это?
EDIT
Калум. Спасибо, что ответили. Я никогда не использовал пакет sf, но выглядит круто. Тем более, что он так хорошо играет с dplyr!
Я, в конце концов, нашел другое решение. Моя главная проблема заключалась в том, что я не понимал, как работает структура объекта SpatialPolygons. Объект SpatialPolygons содержит объекты 1 .. * Polygons, поэтому конструктор получает список объектов Polygons. Объект Polygons содержит 1 .. * объекты Polygon, поэтому конструктор получает список объектов Polygon. Имея это в виду, я использовал следующее решение.
plst <- SpP@polygons[[1]]@Polygons #get the list of Polygon objects
plst <- plst[which.max(sapply(plst,function(p) return(p@area)))] #filter to the max area
spoly2 <- SpatialPolygons(list(Polygons(plst,'id')))
График показывает, что кольца будут фильтроваться по наибольшей области.
plot(SpP)
plot(spoly2,col=alpha('red',0.1),add=T)