2016-12-19 14 views
0

spatstatで線形ネットワークとして読み込むための非常に大きな(シェイプファイル)道路ネットワークがあります。だから私は、この本の第17章で説明したように頂点と辺を読んでから、基本的なネットワークを構築しようとしています - 空間点パターンをバデリーらによってspatstatの頂点からネットワークを構築する際のエラー

私はエラーを取得するの下に、私はこのコードを使用して私のデータ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<[email protected][1,]#read x bounds of owin 
yy<[email protected][2,]#read y bounds of owin 

v<-ppp([email protected][,1], [email protected][,2], xx,yy) #read list of vertices 


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

built_network<-linnet(v,edges = edg) 

これは、上記のコメントの1つに記載のエラー

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

未加工のデータファイルにアクセスする(または気にする)ことはありません。小さな自己完結型の再現可能な例を提供してください。 –

+0

ご意見ありがとうございます。データは問題のリンクにあります。私はGoogleドライブを介してアクセスを公開しました。アクセスできないのですか?そのデータに対してこのコードを実行すると、再現性があるはずです。 – BKS

+0

私は、GISファイルが0からインデクシングを開始することに気付きました.Rは1から始まります.GISを1に変更したとき、エラーなしで動作しますが、良い結論を導いているかどうかはわかりません。私はRの専門家ではない。 – BKS

答えて

0

もたらします。 Rインデックスが1から始まる間にGISインデックスが0から始まることに気付きました。

この問題を解決するために、エッジマトリックスに+1を追加しました。 GISソフトウェアからエッジ行列を収集した場合、from_nodeまたはto_nodeのいずれかでノード0への参照があるためです。 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) 

これは私にとって問題を解決しました。誰かを助けることを願っています。または、他の解決策がある場合は、自由に共有してください。

関連する問題