白话空间统计之二十五:空间权重矩阵(四)R语言中的空间权重矩阵(4):K临近
分享
前面几节已经将spdep定义空间关系和转换为空间权重矩阵的方法及原理给大家做了个简单的介绍,本章将spdep中的其他几种空间关系做一个简单介绍,就当资讯存档了。
除去触点连接和距离范围(上一节描述的,触点连接加上范围限制,能够设定在一定距离范围内的要素为临近)以外,还有几种经典的空间关系,比如k临近和自然临近。
因为空间要素的特征,触点连接仅在面要素和线要素之间存储,点要素之间是没有触点这种说法的——点与点之间,只存在两种关系:分离与重合。所以除了距离范围方法以外,K临近和自然临近这两种关系就有很大的作用了。
下面我们来看看K临近:
K临近的K,指的是在中心要素旁边,需要指定多少个要素作为我的临近要素,由近至远选择:
这种关系忽略了距离,不管千山万水,一定要找到指定的数量,所以特别适用于点要素和有岛和空洞的面状要素。下面我们用中国省会的点要素作为数据来演示k临近空间关系。
数据如下:
绘图脚本如下:
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)
设定K=3,首先定义临近关系:
然后查看北京的临近要素:
在knn对象下面,有个叫做nn的数组,就是临近关系信息,表示谁与谁临近。下面将这个knn对象,转换为nb对象:
NB对象的结构,前几节已经说明了,大家有兴趣直接回去翻。
定义完成之后,就可以直接将NB对象给转换为空间权重矩阵了:
绘制关系如下:
定义及绘图语句如下:
#定义k临近关系,k=3:
kn1 <- knearneigh(ctData, k=3)
w_kn1 <- knn2nb(kn1, row.names=IDs)
w_kn1_mat <- nb2listw(w_kn1)
plot(cnData,border="grey")
plot(ctData,pch=19,cex=1,col='red',add=T)
plot(w_kn1_mat,ctData@coords,add=T,col='blue')
text(ctData@coords[,1],ctData@coords[,2]+1,labels = ctData$NAME)
title("K临近,K=3")
下面定义多个不同的K,来看看:
定义完之后,如果还需要进行反距离权重设定,只需要继续计算距离然后设定glist参数即可,可以参考上一节内容。
当然,这个方法也能够直接给面要素做临近关系矩阵,但是它用的是面状要素的中心点,效果如下:
但是实际上来说,在面要素中,设定K临近本来就是不太合理的,你怎么知道一个面最后与多少个面临近呢?所以更多时候,K临近主要给点状要素使用,还有的情况就是以面中的关键点来做为K临近进行设定,然后把这个关系再交付给面,比如用省会城市作为K临近设定,然后把临近关系转移给面要素来作为面要素的空间关系。(这个方法很简单,只要数据结构学的比较过关的同学,三五分钟就写完了,我在讲完所有的空间关系之后,将给出示例代码)
K临近就先写到这里,下面做个简单总结:
1、在R语言里面,K临近主要给的点要素来用,如果要对面要素进行K临近设定,需要用面要素的中心点做设定,也就是说,在方法里面,设定的参数,空间要素一定是要面要素的。 2、K临近的设定相对比较死板,用的时候需要特别关注。 3、可以用K临近配合自定义空间关系和距离权重来使用。
下一节,讲spdep中最后一种预设的空间关系:自然临域。
(待续未完)
文章来源:http://blog.csdn.net/allenlu2008/article/details/78163009
除去触点连接和距离范围(上一节描述的,触点连接加上范围限制,能够设定在一定距离范围内的要素为临近)以外,还有几种经典的空间关系,比如k临近和自然临近。
因为空间要素的特征,触点连接仅在面要素和线要素之间存储,点要素之间是没有触点这种说法的——点与点之间,只存在两种关系:分离与重合。所以除了距离范围方法以外,K临近和自然临近这两种关系就有很大的作用了。
下面我们来看看K临近:
K临近的K,指的是在中心要素旁边,需要指定多少个要素作为我的临近要素,由近至远选择:
这种关系忽略了距离,不管千山万水,一定要找到指定的数量,所以特别适用于点要素和有岛和空洞的面状要素。下面我们用中国省会的点要素作为数据来演示k临近空间关系。
数据如下:
绘图脚本如下:
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)
设定K=3,首先定义临近关系:
然后查看北京的临近要素:
在knn对象下面,有个叫做nn的数组,就是临近关系信息,表示谁与谁临近。下面将这个knn对象,转换为nb对象:
NB对象的结构,前几节已经说明了,大家有兴趣直接回去翻。
定义完成之后,就可以直接将NB对象给转换为空间权重矩阵了:
绘制关系如下:
定义及绘图语句如下:
#定义k临近关系,k=3:
kn1 <- knearneigh(ctData, k=3)
w_kn1 <- knn2nb(kn1, row.names=IDs)
w_kn1_mat <- nb2listw(w_kn1)
plot(cnData,border="grey")
plot(ctData,pch=19,cex=1,col='red',add=T)
plot(w_kn1_mat,ctData@coords,add=T,col='blue')
text(ctData@coords[,1],ctData@coords[,2]+1,labels = ctData$NAME)
title("K临近,K=3")
下面定义多个不同的K,来看看:
定义完之后,如果还需要进行反距离权重设定,只需要继续计算距离然后设定glist参数即可,可以参考上一节内容。
当然,这个方法也能够直接给面要素做临近关系矩阵,但是它用的是面状要素的中心点,效果如下:
但是实际上来说,在面要素中,设定K临近本来就是不太合理的,你怎么知道一个面最后与多少个面临近呢?所以更多时候,K临近主要给点状要素使用,还有的情况就是以面中的关键点来做为K临近进行设定,然后把这个关系再交付给面,比如用省会城市作为K临近设定,然后把临近关系转移给面要素来作为面要素的空间关系。(这个方法很简单,只要数据结构学的比较过关的同学,三五分钟就写完了,我在讲完所有的空间关系之后,将给出示例代码)
K临近就先写到这里,下面做个简单总结:
1、在R语言里面,K临近主要给的点要素来用,如果要对面要素进行K临近设定,需要用面要素的中心点做设定,也就是说,在方法里面,设定的参数,空间要素一定是要面要素的。 2、K临近的设定相对比较死板,用的时候需要特别关注。 3、可以用K临近配合自定义空间关系和距离权重来使用。
下一节,讲spdep中最后一种预设的空间关系:自然临域。
(待续未完)
文章来源:http://blog.csdn.net/allenlu2008/article/details/78163009
0 个评论
相关问题
- 【抽奖结果已出】ArcGIS知乎社区活动 之 你不知道的地理空间革命【转发分享有奖】【附奖品寄送照片】
- 如何统计shp点数据落在栅格不同区间的个数?
- Engine中如何判断两个要素类的空间参考是否是同一个?
- 如何按空间位置顺序编号,并保持相邻图斑不跳号?
- 市区择房分析时,需要添加字段并将其赋值1或者-1,怎么做? 在开始编辑的时候,总是出现空间参考与数据框不匹配提示,原因是什么?会影响下面的赋值吗?
- Arcgis for flex API是否支持读取arcsde的空间数据?
- 请问请问如何添加空间索引?
- 空间分析工具用不了
- 通过桌面链接sde oracle 怎么样可以创建空间数据库? 现在新建没有要素类可以选择? 是不是新建有什么顺序
- 空间分析创建网络数据集
- 重复创建内存工作空间 ,系统内存上升很快,调用Marshal.ReleaseComObject释放AE对象 并没有起作用,请问如何正确的释放所有的AE对象?