在 R 中使用 shapefile 进行映射

Mapping with shapefiles in R

提问人:confusedindividual 提问时间:9/25/2022 最后编辑:Philconfusedindividual 更新时间:9/26/2022 访问量:283

问:

我有一个 shapefile,其中包含大量不同的多边形,代表不同的水体(湖泊、河流等)。

我想创建某些多边形的地图。我目前能找到的所有示例都只展示了如何绘制 shapefile,其中只有想要的多边形。所以我不确定如何只绘制特定的多边形。

指向 shapefile 的链接:https://hub.arcgis.com/datasets/esri::usa-detailed-water-bodies/explore?location=45.461044%2C-84.374110%2C10.71

我想策划OBJECTID295061、295018和295017

当前代码:

library(sf)
shp = st_read("USA_Detailed_Water_Bodies.shp")
ggplot(data = shp) + 
  geom_sf()+ 
  coord_sf()+
  theme_bw()

当前地图:enter image description here

R shapefile R-SF

评论

1赞 tlhenvironment 9/25/2022
您可以像普通数据帧一样对 shapefile 进行子集化,例如 shp_subset <- shp[c(295061, 295018, 295017, ] 或者使用 dplyr 或 base r 进行过滤
0赞 Grzegorz Sapijaszko 9/26/2022
subset()或会有所帮助,例如:dplyr::filter()shp = st_read("USA_Detailed_Water_Bodies.shp") |> subset(OBJECTID %in% c(295061, 295018, and 295017))

答:

1赞 Spacedman 9/26/2022 #1

假设是数据的数字列:OBJECTID

library(sf)
shp = st_read("USA_Detailed_Water_Bodies.shp")

然后,您可以创建如下所示的“感兴趣区域”子集:

aoi = shp[shp$OBJECTID %in% c(295061, 295018, 295017),]

然后使用 .aoi

如果数字与行号相同,则可以按行选择:OBJECTID

aoi = shp[c(295061, 295018, 295017),]

但我不确定,因为现在没有时间下载 250Mb,但我认为这是正确的。

空间数据帧的行为大多与常规数据帧类似,但有一些奇怪的例外。但是对于选择行和列,它没有太大区别。sf