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

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

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

  1. 华东地区:包括山东省、江西省、福建省、安徽省、浙江省、江苏省和上海市。
  2. 华北地区:包括内蒙古自治区、山西省、河北省、天津市和北京市。
  3. 华南地区:包括海南省、广西壮族自治区、广东省、澳门特别行政区和香港特别行政区。
  4. 西北地区:包括新疆维吾尔自治区、甘肃省、青海省、宁夏回族自治区和陕西省。
  5. 东北地区:包括辽宁省、吉林省、黑龙江省和内蒙古自治区东部五盟市(呼伦贝尔市、兴安盟、通辽市、赤峰市和锡林郭勒盟)。
  6. 西南地区:包括四川省、重庆市、贵州省、云南省、西藏自治区。
  7. 华中地区:包括湖南省、湖北省、河南省。

由于涉及到市级层面,所以我们需要从市级地图数据出发:

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

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

华东地区

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

华北地区

citymap %>%
filter(省 %in% c("内蒙古自治区", "山西省", "河北省", "天津市", "北京市")) %>%
filter(!市 %in% c("呼伦贝尔市", "兴安盟", "通辽市", "赤峰市", "锡林郭勒盟")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "华北地区") -> region2

华南地区

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

西北地区

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

东北地区

citymap %>%
filter(省 %in% c("辽宁省", "吉林省", "黑龙江省") | 市 %in% c("呼伦贝尔市", "兴安盟", "通辽市", "赤峰市", "锡林郭勒盟")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "东北地区") -> region5

西南地区

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

华中地区

citymap %>%
filter(省 %in% c("湖南省", "湖北省", "河南省")) %>%
st_union() %>%
st_sfc() %>%
st_sf() %>%
mutate(region = "华中地区") -> region7

合并七个区域:

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

绘图展示下:

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

最后,保存成 shp 数据:

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

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

评论