【问题标题】:Error building network from vertices in spatstat从 spatstat 中的顶点构建网络时出错
【发布时间】:2016-12-20 13:47:28
【问题描述】:

我有一个非常大的(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 开始。当我将 GIS 更改为 1 时,它可以正常工作,但我不确定我是否正在绘制好结论。我不是 R 专家。
  • 考虑在这篇文章中封装所有内容。请记住,并非每个人都可以访问您当前链接到的资源,一旦他们下线,这个问题将被渲染为无用。
  • 如果现在一切正常,你应该考虑回答你自己的问题并接受答案,这样它就不会看起来仍然是开放的。

标签: r spatstat


【解决方案1】:

如上面的 cmets 之一。我注意到 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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2017-04-06
    • 2022-11-05
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多