自然临近是R语言中spdep中内置的最后一种临近关系。

所谓的自然临近,指的是不进行任何的预设关系,通过其空间位置来判断是否属于相互临近,那么这个空间位置指的是什么呢?众所周知,在几何图形中,三角形是最稳定的一种结构,而以TIN(不规则三角网)为主要结构的地形结构数字化表达,在地理上也有非常广泛的应用。

那么这个自然临域关系,用的也是三角网的方式来进行划分的。

自然相邻要素的原理,就是将所有的点构造为狄罗尼三角网,然后如果两个点之间,共有一个三角形,那么就认为两个点是相邻的关系,在spdep里面,内置了这种空间关系的算法,下面来还是用中国的省会点要素,来看看自然临域关系:

定义语句如下:

library("sp")
library("maptools")
library("spdep")path <- "E:\\workspace\\IDE\\Rworkspace\\空间分析\\空间权重矩阵\\china\\"#将中国的省级行政区划读取为ploygon,省会读取成point
cnData <- readShapePoly(paste(path,"CNPG_S.shp",sep =""))
ctData <- readShapePoints(paste(path,"city_SH.shp",sep =""))
#定义投影为wgs84
proj4string(cnData) <- "+proj=longlat +datum=WGS84"
proj4string(ctData) <- "+proj=longlat +datum=WGS84"
#定义唯一标识符,用行政区划的编码
IDs <- ctData@data$ADCODE99
#将名称转换为gbk编码
ctData$NAME <- iconv(ctData$NAME,"UTF-8","GBK")
plot(cnData,border="grey")
plot(ctData,pch=19,cex=1,col='red',add=T)
text(ctData@coords[,1],ctData@coords[,2]+1,labels = ctData$NAME)#自然临域空间关系
t_nb <- tri2nb(ctData@coords,row.names = IDs)
plot(nb2listw(t_nb),ctData@coords,col='blue',add=T)

定义完成之后,我们来看看北京的自然领域有哪些城市:

自然临域关系无法向其他关系的那样,增加限定条件或者扩大范围,他就是默认按照空间的位置进行设定的,所以只要不改变空间位置,关系基本上就不会改变了……无任何参数可以设定。

自然临域因为狄罗尼三角网的构造算法,一定会以凸多边形为封闭,所以有些位置的构造会形成巨大的跨越,比如最外面的几个点,乌鲁木齐——哈尔滨——台北——海口——拉萨会形成一个封闭的凸多边形,所以可能造成极远位置被设置为临近关系的情况出现,这样就需要通过人工的关系进行处理了。

如同K临近一样,这种关系也可以作用在面要素上,而因为它用的点要素,所以依然采用的是几何质心来进行设定,如下:

定义语句如下:

t_nb2 <- tri2nb(coordinates(cnData),row.names = cnData$Code)
plot(cnData,border="grey")
plot(nb2listw(t_nb2),coordinates(cnData),col='blue',add=T)

但是通过面要素的质心来实现的,结果与使用省会的位置不一致,所以结果也是不同的,比如北京的临近要素:

那么实在实际的应用中,到底用省会来进行定义,还是用省面质心来进行定义,就仁者见仁智者见智了。

通常来说,如果是偏向经济、社会关系和政策方面的研究,使用省会进行定义关系比较合理,而偏向资源和地理空间方面的研究,用省域面进行定义比较合理。

当然还有一些主要是点状要素为主要空间载体的研究,比如学校的教育资源、交通事故高发位置、商圈购物点、酒店、医院等等的空间分布研究,那么建议使用自然临域关系比使用K临接关系要更好。

当然,默认的关系可以通过自定义的方式,来进行调整,调整之后可能会更加接近真实的研究状况。

好了,到此为止R语言spdep包的空间权重矩阵内置方法就讲完了,因为R语言的开源特性,它还支持对geoda的gal、gwt格式的空间权重矩阵文档的读取,这个方法大家自行去了解,我这里就不多说了。

最后做个总结:

1、R语言里面的spdep包支持四种默认的空间关系定义,分别是:共边相邻(rook' case),共点共边相邻(queen's case),K临近(K nearest neighbours)和自然临近(狄罗尼三角网临近)。
PS:当然,还有一种网格临近(cell2nb),这种一般在矢量数据里面很少存在,我就不说了。

2、spdep还支持利用距离函数来定义不同的权重,但是需要在定义了空间关系的情况下再使用。

3、如果对于默认的关系不满意,还可以自行定义空间关系。

4、空间关系可以不同类型的数据进行传递,如果有对应的唯一标识符,可以直接转换,如果没有,则需要但是需要自己写算法实现。直接转换的方法使用最简单排序即可。代码最后给出。

5、空间关系的选择没有一劳永逸的方法,需要根据研究的内容不断进行探索。

最后给出空间关系传统的方法:

首先两份数据,省会城市的点数据和省域面数据,其中,省会城市的点数据中有一列就是省域面数据的省级行政编码:

我们所要做的,就是同时对这两个空间数据框的这个一个列,进行排序即可,然后就可以进行自由传递了,如下所示:

代码实现如下

library("sp")
library("maptools")
library("spdep")path <- "E:\\workspace\\IDE\\Rworkspace\\空间分析\\空间权重矩阵\\china\\"#将中国的省级行政区划读取为ploygon,省会读取成point
cnData <- readShapePoly(paste(path,"CNPG_S.shp",sep =""))
ctData <- readShapePoints(paste(path,"city_SH.shp",sep =""))
cnData$FIRST_NAME <- iconv(cnData$FIRST_NAME,"UTF-8","GBK")
ctData$NAME <- iconv(ctData$NAME,"UTF-8","GBK")
#定义投影为wgs84
proj4string(cnData) <- "+proj=longlat +datum=WGS84"
proj4string(ctData) <- "+proj=longlat +datum=WGS84"
#同时利用同一字段排序即可实现传递
cnData <-cnData[order(cnData@data$Code),]
ctData <- ctData[order(ctData@data$S_CODE),]
ctIDs <- ctData$S_CODE
cnIDs <- cnData$Codew_rn1 <- tri2nb(coordinates(ctData),row.names = ctIDs)
par(mfrow=c(2,1),mar=c(0,0,1,0))
plot(ctData,pch=19,cex=1,col='red')
text(ctData@coords[,1],ctData@coords[,2]+1,labels = ctData$NAME)
plot(nb2listw(w_rn1),coordinates(ctData),add=T)
title("省会点数据自然临近关系")
plot(cnData,border="grey")
plot(nb2listw(w_rn1),coordinates(cnData),add=T)
title("省会点数据自然临近关系传递")

白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(5)完结篇:自然临近关系相关推荐

  1. moran指数 r语言_白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(2):不同空间关系对莫兰指数的影响...

    原标题:白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(2):不同空间关系对莫兰指数的影响 上一篇,讲了R语言中的空间权重矩阵的结构,这一节讲讲R语言里面空间权重矩阵的自定义. 与Ar ...

  2. 二进制空间权重矩阵_白话空间统计之二十五:空间权重矩阵(三)解构空间权重矩阵...

    原标题:白话空间统计之二十五:空间权重矩阵(三)解构空间权重矩阵 中国古代就有"天圆地方"一说,所谓的"方"就是所谓的矩阵-- 在军事上面,最为讲究就是团体的力 ...

  3. 白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(2)

    上一篇,讲了R语言中的空间权重矩阵的结构,这一节讲讲R语言里面空间权重矩阵的自定义. 与ArcGIS自定义空间权重矩阵一样,R语言的空间权重矩阵如果纯粹从零开始自定义生成,是非常麻烦的事情,所以我们一 ...

  4. 白话空间统计之二十五:空间权重矩阵(一)点数据的空间关系(1)

    空间分析的根基,来源于60年代Waldo R. Tobler教授"地理学第一定律"的"Tobler's First Law"(简称TFL),即为"Ev ...

  5. 白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近

    前面几节已经将spdep定义空间关系和转换为空间权重矩阵的方法及原理给大家做了个简单的介绍,本章将spdep中的其他几种空间关系做一个简单介绍,就当资讯存档了. 除去触点连接和距离范围(上一节描述的, ...

  6. raster | R语言中的空间栅格对象及其基本处理方法(Ⅰ)

    前面的系列推文已经完成了对R语言中的两个管理空间矢量数据的工具包(sf和sp)的介绍,以及空间自相关.空间插值等空间分析方法. 这里小编再推出一个系列来介绍R语言中管理空间栅格数据的工具包:raste ...

  7. raster | R语言中的空间栅格对象及其基本处理方法(Ⅱ):投影、属性提取

    library(raster) 投影 设置投影 在使用raster()函数创建栅格对象时,调用crs参数可以定义其投影.投影参数具有默认值: r <- raster() crs(r) ## CR ...

  8. raster | R语言中的空间栅格对象及其基本处理方法(Ⅳ):数据聚合、重采样

    本篇示例数据: library(raster) # 2015年中国人口空间分布公里网格数据集 # 数据来源:https://www.resdc.cn/DOI/DOI.aspx?DOIid=32 pop ...

  9. raster | R语言中的空间栅格对象及其基本处理方法(Ⅲ):切片/掩膜、图层叠加...

    本篇介绍如下处理方法: 根据矢量数据的范围对栅格数据进行裁剪: 通过对栅格数据进行运算得到新的栅格对象,如通过人口和GDP的栅格数据得到人均GDP的栅格数据. 示例的栅格数据是2015年中国人口和GD ...

最新文章

  1. UIViewController的生命周期及iOS程序执行顺序
  2. 商汤再挖MSRA大将:R-FCN作者代季峰加盟任执行研究总监
  3. anaconda python 版本对应关系
  4. 形象理解操作系统的进程与线程
  5. php升级的痛苦,升级 PHP 7.4 带来的两个大坑
  6. ML之HMM:HMM算法相关论文、关键步骤、测试代码配图集合
  7. mysql占位符 防注入_PyMySQL防止SQL注入
  8. 使用计算机管理文件教后反思,《管理计算机中的文件》教学反思
  9. 1.无重复字符的最长子串
  10. 启动vue项目报错faield at the vue-cli-service serve
  11. 十六. 面向对象上下文管理协议
  12. 为什么我们应该学马化腾,而不是马云
  13. android selector的item属性
  14. Springboot项目中Pom.xml报错
  15. 太原科技大学计算机宿舍,太原科技大学宿舍怎么样
  16. NJUPT南邮 | 离散数学_实验一
  17. 使用GCJ编译Java程序供Matlab调用Java对象方法实践
  18. 一分钟掌握卡诺图化简法
  19. Problem B 1076 素数
  20. vue遇到的小白问题之三——按钮的点击效果的实现

热门文章

  1. java 支付宝退款_java实现支付宝退款功能
  2. 经济危机,其实机会大于危险
  3. 杭电oj 1002 C语言解法
  4. 最新多用途的APP软件业务介绍官网模板源码
  5. 二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现
  6. 第五十一章 SQL函数 DECODE
  7. 【SW7203】智融新料号SW7203,支持1-4S,双向升降压,路径管理,可搭配SW2303,实现车充、移动电源100W
  8. 一起来看流星雨--------魏晨
  9. (thinkPHP)入门
  10. 误删除Linux下/etc/shadow文件,linux修改密码出现Authentication token manipulation error的解决办法