У меня есть 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 был только один Polygon, с площадью 5.5.
Это возможно?
РЕДАКТИРОВАТЬ
Калум Спасибо за ответ. Никогда не пользовался пакетом 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)