根据培训班的一个小伙伴的需要,我再帮大家计算一下中国各个地级市距离北上广深的距离,首先加载相关的 R 包:
library(tidyverse) library(sf)
|
读取各个城市的地理数据:
read_sf("2019行政区划/市.shp") -> city 计算质心:
city %>% st_centroid() -> city_centroid
|
先以北京市为例,计算所有的地级市距离北京的距离:
st_distance( city_centroid, city_centroid %>% dplyr::filter(市 == "北京市") ) -> mat mat[,1]
...
city_centroid %>% mutate(dist = units::set_units(mat[,1], km), dist = as.numeric(dist)) -> df
bind_cols( df %>% st_drop_geometry(), df %>% st_coordinates() %>% as_tibble() %>% set_names(c("经度", "纬度")) ) %>% rename(距离北京市的距离 = dist)
|
然后我们可以使用 lapply() 计算距离北上广深四个城市的距离并分别保存为四个文件:
lapply(c("北京市", "上海市", "广州市", "深圳市"), function(x){ st_distance( city_centroid, city_centroid %>% dplyr::filter(市 == x) ) -> mat mat[,1]
city_centroid %>% mutate(dist = units::set_units(mat[,1], km), dist = as.numeric(dist)) -> df
bind_cols( df %>% st_drop_geometry(), df %>% st_coordinates() %>% as_tibble() %>% set_names(c("经度", "纬度")) ) %>% writexl::write_xlsx(paste0("各个地级市质心距离", x, "质心的距离.xlsx")) })
|
这样就完成了,所有文件里面的距离单位都是 km。
点击这里跳转到 RStata 短书平台获取附件:使用R语言计算各个城市距离北上广深的距离
评论