从 spatstat 中的顶点构建网络时出错
Error building network from vertices in spatstat
我有一个非常大的 (shapefile) 道路网络,可以在 spatstat 中读取为线性网络。因此,我正在尝试通过读取顶点和边来构建一个基本网络,正如 Baddeley 等人在书的第 17 章中讨论的空间点模式
我附上我的数据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
如上面的评论之一。我注意到 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)
这解决了我的问题。希望它能帮助别人。或者如果有人有其他解决方案,请随时分享。
我有一个非常大的 (shapefile) 道路网络,可以在 spatstat 中读取为线性网络。因此,我正在尝试通过读取顶点和边来构建一个基本网络,正如 Baddeley 等人在书的第 17 章中讨论的空间点模式
我附上我的数据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
如上面的评论之一。我注意到 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)
这解决了我的问题。希望它能帮助别人。或者如果有人有其他解决方案,请随时分享。