2016-12-18 3 views
0

다음 코드를 사용하여 shapefile을 linnet 객체로 읽고 as.linnet을 사용하는 마지막 줄에서 프로세스가 멈추고 강제 종료해야합니다. Rstudio를 종료해야합니다. , 나는 무엇이 잘못되었는지 모른다. CRAN과 github에서 두 패키지를 모두 사용해 보았지만 두 결과 모두 동일합니다. Rstudio가 중단되었습니다.as.linnet 함수로 as 기계가 멈 춥니 다

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) 

내 셰이프 파일에 문제가 있는지 알 수 없습니까? 또한 나는 의해 무슨 뜻인지 모르겠어요.

In as.psp.SpatialLinesDataFrame(roads) : 1 columns of data frame discarded 

here 내가 읽기하고있는 라인 데이터입니다 어떤 도움이 좋을 것. 감사.

답변

2

짧은 대답 : 귀하의 데이터 세트가 큽니다. 마지막 행에 sparse=TRUE 인수를 설정하고 컴퓨터에 몇 분을줍니다.

긴 대답 : 개체는 기본적으로 곡선의 목록이며, 각 곡선은 직선 세그먼트의 시퀀스로 구성됩니다. 데이터 세트 roads은 174 곡선을 가지며 총 38635 개의 직선 세그먼트로 구성됩니다 (따라서 각 곡선에 평균 200 개 이상의 선분이 있음). as.psp(roads)을 수행하면 직선 세그먼트 만 추출되므로 38635 개가 있습니다 (개체 이름을 입력하면 인쇄되거나 nsegments을 사용하여 계산할 수 있습니다). head(spatstat.roads)을 입력하면 처음 5 개의 항목 만 표시됩니다.

데이터 집합은 각 곡선이 추가 데이터를 전달하는 SpatialLinesDataFrame입니다. 이 추가 데이터 열은 현재 as.psp에 의해 무시되므로 무시한 ㄴ다는 경고가 발행됩니다. 필요한 경우 원본 개체에서 추출 할 수 있습니다.

as.linnet(spatstat.roads) 명령은 as.linnet.psp을 호출합니다. 이렇게하면 선형 네트워크에서 결합하려는 선형 선분을 추측합니다. 이는 두 개의 서로 다른 세그먼트가 동일한 끝점 또는 매우 가까운 끝점을 갖는 경우를 찾아서 수행합니다. 인수 eps은 근사 임계 값을 제어합니다. 더 중요한 것은 인수 sparse은 네트워크 토폴로지의 스파 스 매트릭스 표현을 사용할지 여부를 결정합니다. 이 데이터 세트의 크기에 대해서는 확실히 희소 매트릭스가 필요하므로 sparse=TRUE으로 설정하십시오.

+0

고맙습니다. 나는 너의 제안을 시도 할 것이다. 여기에 두 가지 질문을 추가로 게시 할 예정입니다. – BKS

+0

고맙습니다. 귀하의 제안에 따라 버텍스의 수를 5000 개로 줄이고 제안 된대로 스파 스 = TRUE를 추가적으로 사용했습니다. 훨씬 빠릅니다. 나중에 spatstat을 가져 오기 전에 정점의 수를 확인하여 사전에 줄여 줄 수있는 방법을 알려주십시오. 감사합니다 – BKS

+0

당신이 사용하고 있을지도 모르는 GIS 소프트웨어의 정점 수를 어떻게 확인했는지 모르겠습니다. R에서 'SpatialLines' 객체의 정점 수를 대략적으로 계산하는 간단한 해킹입니다 :'길이 (unlist (좌표) (도로))/2 길이 (도로)''도로'가 대상입니다. 답을 수락하는 것을 고려해보십시오. 문제가 해결되었음을 알 수 있습니다. –