使用 R 语言制作六大地理区域 shp 数据

最近有小伙伴想寻找一份中国六大地理区域的 shp 数据,实际上由 R 语言就可以制作出来了。

首先我们可以查到六大地理区域的分区是这样的:

从市级地图数据出发:

library(tidyverse)
library(sf)
read_sf("2019行政区划/省.shp") %>%
st_transform(4236) %>%
st_make_valid() -> provmap

然后就可以依次提取合并各个区域了:

华东地区

provmap %>%
filter(省 %in% c("山东省", "江西省", "福建省",
"安徽省", "浙江省", "江苏省", "上海市")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "华东地区") -> region1

华北地区

provmap %>%
filter(省 %in% c("内蒙古自治区", "山西省", "河北省", "天津市", "北京市")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "华北地区") -> region2

西北地区

provmap %>%
filter(省 %in% c("新疆维吾尔自治区", "甘肃省", "青海省", "宁夏回族自治区", "陕西省")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "西北地区") -> region3

东北地区

provmap %>%
filter(省 %in% c("辽宁省", "吉林省", "黑龙江省")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "东北地区") -> region4

西南地区

provmap %>%
filter(省 %in% c("四川省", "重庆市", "贵州省", "云南省", "西藏自治区")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "西南地区") -> region5

中南地区

provmap %>%
filter(省 %in% c("湖南省", "湖北省", "河南省",
"海南省", "广西壮族自治区", "广东省",
"澳门特别行政区", "香港特别行政区")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "中南地区") -> region6

合并七个区域:

bind_rows(region1, region2, region3, region4, region5, region6) -> regionall

绘图展示下:

# devtools::install_github("r-stata/rstatatools")
library(leaflet)
leaflet() %>%
rstatatools::geoqmap(attribution = "微信公众号 RStata") -> map
mapview::mapview(regionall, map = map)

最后,保存成 shp 数据:

dir.create("region6")
regionall %>%
st_write("region6/region6.shp",
layer_options = "ENCODING=UTF-8",
delete_layer = TRUE, layer = "MULTIPOLYGON")

点击这里跳转到 RStata 短书平台获取附件:使用 R 语言制作六大地理区域 shp 数据

评论