之前给大家分享过三份相邻省份、相邻城市、相邻区县附近工企到共同边界距离的数据。
×
×
×
今天就让我们以城市为例学习下这些数据是如何计算的,也就是如何提取相邻城市的共同边界并计算这两个城市的工企距离共同边界的距离。
加载所需的 R 包
library(tidyverse) library(sf)
|
读取工企地理位置数据
工企地理位置数据是以 dta 格式存储的,可以使用 haven 包读取:
haven::read_dta("2012~2013工企地理位置.dta") -> df
|
剔除没有经纬度的:
df %>% mutate(经度 = as.numeric(经度), 纬度 = as.numeric(纬度)) %>% dplyr::filter(!is.na(经度), !is.na(纬度)) -> df
df
|
后面我们会使用 sf 包进行地理距离的计算,所以我们需要把 df 数据转换成 sf 对象:
df %>% st_as_sf(coords = c("经度", "纬度"), crs = 4326) -> dfsf dfsf
|
找到所有的相邻城市对
read_sf("2019行政区划/市.shp") %>% st_transform(4326) %>% dplyr::filter(!is.na(市)) %>% st_make_valid() -> city
st_intersects(st_make_valid(city), st_make_valid(city), sparse = F) -> touchmat touchmat %>% as_tibble() %>% mutate_all(as.numeric) %>% mutate(市代码 = city$市代码) %>% select(市代码, everything()) %>% set_names(c("市代码", city$市代码)) %>% gather(2:372, key = "key", value = "value") %>% dplyr::filter(市代码 != key & value == 1) -> pairdf
pairdf
pairdf %>% mutate(key = as.numeric(key)) %>% dplyr::filter(市代码 > key) %>% rename(相邻市 = key) %>% select(-value) -> pairdf
pairdf %>% writexl::write_xlsx("2019年中国相邻市对.xlsx")
|
提取每个相邻相对的工企业,计算它们距离相邻市界的距离

使用 Stata
虽然计算过程是使用 R 语言完成的,但是得到的数据可以使用 Stata 继续处理,另外还可以使用 Stata 绘图:

循环所有的城市对
上面的代码中仅仅演示了第一个城市对的处理过程,只要循环所有的城市对就可以得到所有城市对的数据了,大家可以自己试试。
点击这里跳转到 RStata 短书平台获取附件:R 语言课程|相邻城市共同边界附近的工企与共同边界的距离计算 & 绘图展示
评论