如何在 R 中分割状态形状文件?

问题描述 投票:0回答:1

我有从这里下载的我们的形状文件:https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html

我正在制作一张地图,需要将一些州分成两个单独的对象(例如“北佛罗里达”和“南佛罗里达”),以便它们可以在地图上以不同的方式填充。我该怎么办?

理想情况下,分裂将在我分裂的州的中间点。

r shapefile
1个回答
0
投票

最简单的方法是找到状态的质心并为状态的上半部分/下半部分创建一个多边形。以下是佛罗里达州下半部分的示例:

florida <- geodata::gadm("USA", level = 1, path = "data") |>
  sf::st_as_sf() |>
  subset(NAME_1 == "Florida")

c <- sf::st_centroid(florida)

plot(sf::st_geometry(florida))
plot(sf::st_geometry(c), col = "red", add = TRUE)

现在让我们采用状态边界框来获取

xmin
xmax
ymin
ymax
坐标,并创建下“一半”的多边形


bb <- sf::st_bbox(florida)

lon <- c(bb["xmin"], bb["xmax"])
lat <- c(bb["ymin"], sf::st_coordinates(c)[1, "Y"])

lower_bb <- 
  data.frame(lon, lat) |>
    sf::st_as_sf(coords = c("lon", "lat"), 
             crs = "EPSG:4326") |>
    sf::st_bbox() |>
    sf::st_as_sfc() |>
    sf::st_as_sf()

plot(sf::st_geometry(florida))
plot(sf::st_geometry(lower_bb), add = TRUE, lty = 3)

最后使用

lower_bb
多边形找到它与我们状态的交集:

florida_low <- sf::st_intersection(florida, lower_bb)

plot(sf::st_geometry(florida))
plot(sf::st_geometry(florida_low), col = "blue", add = TRUE)

创建于 2024-09-26,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.