从spatstat中的顶点构建网络时出错

时间:2016-12-19 09:54:08

标签: r spatstat

我有一个非常大的(shapefile)道路网络,可以在spatstat中读取为线性网络。所以我试图通过读取顶点和边缘来构建一个基本网络,如本书第17章 - Baddeley等人的空间点模式所讨论的

我附上了我的数据here

使用下面的代码我收到错误Error: length(x0) == length(x1) is not TRUE。我不清楚什么是x0和x1才能找到问题。

library(maptools)
library(spatstat)
setwd("~/documents/rwork/traced/a")

pt <- readShapePoints("collected.shp") #read vertices from a shapefile.

edgeRecords<-read.delim("edgelist.txt") #read edge connectivity list

ed<-data.frame(from=edgeRecords$from,to=edgeRecords$to)

xx<-pt@bbox[1,]#read x bounds of owin
yy<-pt@bbox[2,]#read y bounds of owin

v<-ppp(x=pt@coords[,1], y=pt@coords[,2], xx,yy) #read list of vertices


edg<-as.matrix(ed) # read node pairs as matrix

built_network<-linnet(v,edges = edg)

这会导致错误

Error: length(x0) == length(x1) is not TRUE

1 个答案:

答案 0 :(得分:0)

如上面的评论之一。我注意到GIS索引从0开始,而R索引从1开始。

所以为了解决这个问题,我只是在边缘矩阵上加了+1。因为如果您从GIS软件收集了边缘矩阵,它将在from_node或to_node中引用节点零。如果R中的边缘矩阵为em,则添加+1,如下所示:em+1。示例代码可能是这样的

edgelist <- read.delim("edgelist.txt")
em <- matrix(c(edgelist$from, edgelist$to), ncol=2) +1
net <- linnet(n,edges = em)
plot(net)

这解决了我的问题。希望它可以帮助某人。或者,如果有人有其他解决方案,请随时分享。