I am using the following code to read a shapefile as a linnet object, and in the last line where I use as.linnet, the process just hangs and I have to force quit Rstudio, I do not know what is wrong? I tried both packages on CRAN and on github, but both have the same outcome: Rstudio hangs.
library(spatstat)
library(maptools)
library(sp)
setwd("~/documents/rwork/traced")
roads<-readShapeSpatial('NLroads')
spatstat.roads<-as.psp(roads)
#when I do head(spatstat.roads), it gives me only 5 line segments
#while the shapefile has 174 line segments
plot(spatstat.roads)
final_roads<-as.linnet(spatstat.roads)
I do not know then if the problem is with my shapefile? Also I do not know what it means by:
In as.psp.SpatialLinesDataFrame(roads) : 1 columns of data frame discarded
here is the line data i am reading in. Any help would be great. Thanks.
The short answer: your dataset is large; set the argument
sparse=TRUEin the last line, and give the computer a few minutes.The long answer: a
SpatialLinesobject is basically a list of curves, each curve consisting of a sequence of straight line segments. Your datasetroadshas 174 curves, consisting of a total of 38635 straight line segments (so there is an average of over 200 line segments in each curve). When you doas.psp(roads), you extract just the straight line segments, so there are 38635 of them (this would be printed out if you typed the name of the object, or you could usensegmentsto count them). When you typehead(spatstat.roads)you are just getting the first 5 entries.Your dataset is a
SpatialLinesDataFramein which each curve carries additional data. These additional columns of data are ignored byas.pspcurrently, so it issues a warning that it has ignored them. You can extract them from the original object if you need them.The command
as.linnet(spatstat.roads)calls the functionas.linnet.psp. This tries to guess which of the line segments you intended to be joined in the linear network. It does this by finding cases where two different segments have identical endpoints or very close endpoints. The argumentepscontrols the closeness threshold. More importantly the argumentsparsedetermines whether to use a sparse matrix representation of the network topology. For this size of dataset, you definitely need the sparse matrices, so setsparse=TRUE.