R 语言地理距离计算:中国各市的邻接权重矩阵距离权重矩阵和反距离权重矩

Posted RStata

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R 语言地理距离计算:中国各市的邻接权重矩阵距离权重矩阵和反距离权重矩相关的知识,希望对你有一定的参考价值。

今天要给大家分享的是使用 R 语言计算中国各市的邻接权重矩阵、距离权重矩阵和反距离权重矩阵的方法。

首先加载相关的 R 包:

library(sf)
library(tidyverse)

读取中国市级地图数据:

read_sf('china_city_full_map_long.json') -> city
ggplot(city) + 
  geom_sf(aes(fill = 类型), color = "white", size = 0.01) +
  geom_sf(data = subset(city, 市 == "国界线"),
          color = "white", size = 0.1) +
  theme_modern_rc(base_family = cnfont,
                  caption_family = cnfont) +
  scale_fill_viridis_d(option = "D") +
  labs(title = "中国市级行政区划",
       caption = "数据:搜集自网路")

去掉国界线和台湾省:

read_sf('china_city_full_map_long.json') %>% 
  dplyr::filter(市 != "国界线" & 市 != "台湾省") -> city

两个城市的邻接权重矩阵,也就是两个市接壤取 1,不接壤取 0:

st_touches(city, city) %>% 
  as.matrix() -> touchmat
touchmat %>% 
  as_tibble() %>% 
  mutate_all(as.numeric) %>% 
  set_names(city$市) %>% 
  mutate(city = city$市) %>% 
  select(城市 = city, everything()) -> touchdf

touchdf %>% 
  writexl::write_xlsx("邻近矩阵.xlsx")

计算各个市的质心:

city %>% 
  st_centroid() -> citypoint

计算各个市质心之间的距离权重矩阵:

st_distance(citypoint) -> distmat
dim(distmat)

将距离的单位设置为 km:

library(units)
set_units(distmat, km) -> distmat

distmat %>% 
  as_tibble() %>% 
  set_names(city$市) %>% 
  mutate(city = city$市) %>% 
  select(城市 = city, everything()) %>% 
  writexl::write_xlsx("距离矩阵.xlsx")

反距离权重矩阵:

reversefun <- function(x){
  1/x
}
distmat %>% 
  as_tibble() %>% 
  set_names(city$市) %>% 
  mutate_all(reversefun) %>% 
  mutate(city = city$市) %>% 
  select(城市 = city, everything()) %>% 
  writexl::write_xlsx("距离倒数矩阵.xlsx")

范围权重矩阵,以 200km 为例:

# 200 权重矩阵
ifelse(distmat <= set_units(200, km), 10) %>% 
  as_tibble() %>% 
  set_names(city$市) %>% 
  mutate(city = city$市) %>% 
  select(城市 = city, everything()) %>% 
  writexl::write_xlsx("距离200矩阵.xlsx")

作业:试着计算下 400km,600km,800km 和 1000 km 的权重矩阵

获取本文的数据和代码

如何获取本文的代码呢?很简单:

  1. 关注本公众号 RStata,这样你能够第一时间获取课程预告和我提供的学习资源;
  2. 转发本文至朋友圈(加上一句推荐语:“这个公众号好棒呀!推荐关注!”)集齐 12 个赞或者转发至超过 200 人的大群;
  3. 截图发给公众号后台或私信发给我,我就会把本文的代码和数据分享给你啦!

以上是关于R 语言地理距离计算:中国各市的邻接权重矩阵距离权重矩阵和反距离权重矩的主要内容,如果未能解决你的问题,请参考以下文章

空间权重矩阵的那些事-球面距离权重矩阵

R语言distRhumb函数计算距离实战(两个地理点之间的Rhumb距离)

2022-06-11:注意本文件中,graph不是邻接矩阵的含义,而是一个二部图。 在长度为N的邻接矩阵matrix中,所有的点有N个,matrix[i][j]表示点i到点j的距离或者权重, 而在二部

数据可视化应用IDW插值计算实战案例(附Python和R语言代码)

R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离dist函数计算矩阵中两两元素的曼哈顿距离

如何计算大地理距离矩阵