2017-12-05 24 views
0

집 범위를 기반으로 많은 중심 (84)을 만들었습니다. 이러한 중심은 모두 값으로 저장된 개별 Formal 클래스 SpatialPoints입니다. 여기 네 예입니다공간 데이터에서 행렬 만들기

> C004cen 
SpatialPoints: 
       x  y 
homerange -122.7916 42.87038 
Coordinate Reference System (CRS) arguments: +proj=longlat +datum=WGS84 
+ellps=WGS84 +towgs84=0,0,0 

> C006cen 
SpatialPoints: 
       x  y 
homerange -122.5906 42.96253 
Coordinate Reference System (CRS) arguments: +proj=longlat 
+datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

> C008cen 
SpatialPoints: 
       x  y 
homerange -122.5926 42.95456 
Coordinate Reference System (CRS) arguments: +proj=longlat 
+datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

> C012cen 
SpatialPoints: 
      x  y 
homerange -122.567 42.68344 
Coordinate Reference System (CRS) arguments: +proj=longlat 
+datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

나는 본질적으로 각 셀을 채우는 간의 거리와 84x84 이들 무게 중심 (84)의 행렬을 생성하고자; 그러나 나는 84 개의 개별 Formal Class SpatialPoints에서 행렬로가는 방법을 확실히 모른다. 이러한 중심을 모두 SpatialPoints로 결합하는 것이 가장 먼저해야 할 일이지만 SpatialPointsDataFrames를 지금까지 살펴 보았습니다. 84 개의 개별 SpatialPoint를 단일 SpatialPoint로 통합 할 수 있습니까?

거리를 생성하라는 명령 RobertH. 감사합니다. 당신이 거리 행렬을 원하는 경우

+1

질문을 재현 할 수 있다면, 응답을 얻을 가능성이 높습니다. 예를 들어 다른 사람들이 작업 할 수 있도록 데이터를 제공하십시오. 이는 아마도 문제를 설명하는 작은 데이터 세트를 만드는 것을 의미합니다. 또한, 실제 작업을 수행하지 않고 '이 작업을 수행하고 싶습니다.'라고 묻는 것은 가난한 형태이며 StackOverflow의 '주제를 벗어난'것입니다. – SymbolixAU

+0

그래서 내가 놓친 부분은 실제로 아주 단순한 것으로 밝혀졌습니다. 모든 Formal 클래스 SpatialPoint를 함께 묶은 다음 RobertH가 제안한 방식대로 처리 할 수 ​​있습니다. –

답변

1
# Please provide example data! 
library(raster) 
n <- 10 
set.seed(123) 
x <- runif(n) * 360 - 180 
y <- runif(n) * 180 - 90 
xy <- SpatialPoints(cbind(x, y), proj4string=CRS('+proj=longlat +datum=WGS84')) 
xy 
#class  : SpatialPoints 
#features : 10 
#extent  : -163.5997, 158.5682, -82.42928, 82.23 (xmin, xmax, ymin, ymax) 
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

을 감안할 때 SpatialPoints * 객체 XY, 우리는

d <- pointDistance(xy) 
round(d/1000) 

#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
# [1,]  0 NA NA NA NA NA NA NA NA NA 
# [2,] 11799  0 NA NA NA NA NA NA NA NA 
# [3,] 5857 14840  0 NA NA NA NA NA NA NA 
# [4,] 9276 4456 14923  0 NA NA NA NA NA NA 
# [5,] 18285 7930 15556 9508  0 NA NA NA NA NA 
# [6,] 2146 10976 7871 7574 16150  0 NA NA NA NA 
# [7,] 14955 9631 9627 13941 6769 17060  0 NA NA NA 
# [8,] 19451 8406 14380 10604 1285 17416 5524  0 NA NA 
# [9,] 13471 9090 8817 13543 8223 15442 1790 7053  0 NA 
#[10,] 901 11372 5594 9377 18842 2829 14231 19647 12662  0 

을 수행 할 수 있습니다, 당신은 할 수 있습니다 :

dd <- as.dist(d) 

당신은 NAS를하지 않으려면 할 수 있습니다 :

d <- as.matrix(as.dist(d)) 
round(d/1000) 

#  1  2  3  4  5  6  7  8  9 10 
#1  0 11799 5857 9276 18285 2146 14955 19451 13471 901 
#2 11799  0 14840 4456 7930 10976 9631 8406 9090 11372 
#3 5857 14840  0 14923 15556 7871 9627 14380 8817 5594 
#4 9276 4456 14923  0 9508 7574 13941 10604 13543 9377 
#5 18285 7930 15556 9508  0 16150 6769 1285 8223 18842 
#6 2146 10976 7871 7574 16150  0 17060 17416 15442 2829 
#7 14955 9631 9627 13941 6769 17060  0 5524 1790 14231 
#8 19451 8406 14380 10604 1285 17416 5524  0 7053 19647 
#9 13471 9090 8817 13543 8223 15442 1790 7053  0 12662 
#10 901 11372 5594 9377 18842 2829 14231 19647 12662  0