最近有小伙伴问到如何判断每个区县位于秦岭淮河线的北侧、南侧还是被穿过。这个可以使用 R 语言计算,也就是一种空间拓扑计算,今天就让我们一起看一下如何操作。
附件中我准备了如下地理矢量数据:
- 秦岭淮河线(新).geojson
- 2019行政区划:各省市区县行政区划矢量数据;
- 秦岭淮河线北方区域.geojson: 也是地理矢量数据
- 秦岭淮河线南方区域.geojson: 也是地理矢量数据
其中后面两个文件是使用这个应用制作的:https://tidyfriday.cn/geojson/
这里使用的秦岭淮河线仅供参考,大家要是感觉不准,也可以替换成适合自己研究的秦岭淮河线数据。
首先加载所需的 R 包和读取上面的数据:
这里以区县的为例,省市的也类似。
# 循环所有年份 |
这里的 st_make_valid() 用以纠正可能存在的拓扑错误。其中 north 和 south 就是南北方区域的范围了,使用 st_intersection() 就可以提取省市区县中位于分别位于南北方以及被秦岭淮河线穿过的了:
# 秦岭淮河线上的区县 |
然后再计算质心和距离:
county %>% |
由于秦岭淮河线在东侧的部分我是使用的省界作为分界线,但是绘制的可能有误差,所以结尾进行了手动的分类。
resdf |
城市和省份的操作类似,这里就不再展示代码了,经过计算可以得到下面两个文件:
- 2019年各省份南北方分类.xlsx
- 2019年各城市南北方分类.xlsx
下面我们再绘图展示下计算的结果:
library(ggspatial) |
![]()
省市的绘图结果如下:
)![]()
另外之前给大家分享过 1949~2021 年历年的省市区县矢量数据,这里正好我写了个循环计算了历年的结果。
×
另外可以结合这个课程掌握本文的代码:
×
相关代码和结果都在附件中~
点击这里跳转到 RStata 短书平台获取附件:使用 R 语言计算秦岭—淮河线两侧的省市区县(含结果)
评论