sf package: извлечь, обрезать и вернуть многоугольник - PullRequest
1 голос
/ 22 мая 2019

У меня есть таблица sf, где мне нужно извлечь один из полигонов, обрезать его в ограничивающий прямоугольник, а затем записать его обратно в sf, чтобы я мог построить оригинал с одним пересмотренным полигоном. Я разобрался, как сделать все, но записать исправленный многоугольник обратно в исходный sf.

Вот воспроизводимый пример с использованием набора данных NC из пакета sf. Когда я county_clipped обратно в набор данных nc, я получаю сообщение об ошибке. Что мне нужно сделать здесь?

#Read NC shape from sf package
nc <- st_read(system.file("shape/nc.shp", package="sf"))

#extract county of interest
county <-nc[[1,"geometry"]]

#construct polygon to be clipped
bboxpolygon = st_polygon(list(rbind(c(-81.65,36.23), 
                                     c(-81.65,36.45), 
                                     c(-81.23,36.45), 
                                     c(-81.23,36.23), 
                                     c(-81.65,36.23))))
#Plot bounding box and county
par(mar = c(0,0,1,0))
plot(county)
plot(bboxpolygon, add=TRUE)   

#clip county
county_clipped <-st_intersection(county,bboxpolygon)

#confirm clipping worked
plot(county_clipped)

#write revised polygon back to dataset
nc[1,"geometry"]<-county_clipped

#plot revised object
plot(nc$geometry)

1 Ответ

2 голосов
/ 22 мая 2019

Столбец geometry в объекте sf является объектом sfc, который представляет собой коллекцию объектов sfg.

attr( nc, "class" )
# [1] "sf"         "data.frame"

attr( nc$geometry, "class" )
# [1] "sfc_MULTIPOLYGON" "sfc"

Ваш объект county_clipped равен sfg

attr( county_clipped, "class" )
# [1] "XY"      "POLYGON" "sfg"

Итак, чтобы обновить «геометрию», это должен быть sfc объект

nc[1,"geometry"] <- sf::st_sfc( county_clipped )

Отметив ОБЛАСТЬ, ПЕРИМЕТР,и другие атрибуты будут неправильными для этой новой формы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...