我有从这里下载的我们的形状文件:https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html
我正在制作一张地图,需要将一些州分成两个单独的对象(例如“北佛罗里达”和“南佛罗里达”),以便它们可以在地图上以不同的方式填充。我该怎么办?
理想情况下,分裂将在我分裂的州的中间点。
最简单的方法是找到状态的质心并为状态的上半部分/下半部分创建一个多边形。以下是佛罗里达州下半部分的示例:
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