sf 包:提取、剪辑和 return 多边形
sf package: extract, clip, and return a polygon
我有一个 sf table,我需要在其中提取其中一个多边形,将其剪辑到边界框,然后将其写回 sf,这样我就可以用一个修改后的多边形绘制原始图.除了将修改后的多边形写回原始 sf 之外,我已经想出了如何做所有事情。
这是一个使用 sf 包中的 NC 数据集的可重现示例。在我 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)
sf
对象中的 geometry
列是一个 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"
因此,为了让您更新一个 'geometry',它需要是一个 sfc
对象
nc[1,"geometry"] <- sf::st_sfc( county_clipped )
注意这个新形状的面积、周长和其他属性不正确
我有一个 sf table,我需要在其中提取其中一个多边形,将其剪辑到边界框,然后将其写回 sf,这样我就可以用一个修改后的多边形绘制原始图.除了将修改后的多边形写回原始 sf 之外,我已经想出了如何做所有事情。
这是一个使用 sf 包中的 NC 数据集的可重现示例。在我 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)
sf
对象中的 geometry
列是一个 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"
因此,为了让您更新一个 'geometry',它需要是一个 sfc
对象
nc[1,"geometry"] <- sf::st_sfc( county_clipped )
注意这个新形状的面积、周长和其他属性不正确