从空间数据创建矩阵

时间:2017-12-05 23:42:32

标签: r matrix geospatial spatial

我根据家庭范围创建了大量的质心(84)。所有这些质心都是单独的Formal Class 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 

我想创建一个这84个质心的矩阵,基本上是84x84,每个质心之间的距离填充细胞;但是我不太确定如何从84个单独的Formal Class SpatialPoints转换为矩阵。看起来首先要做的是将所有这些质心组合成一个Formal Class SpatialPoints,但到目前为止我发现的所有内容都涉及SpatialPointsDataFrames。是否可以将84个单独的SpatialPoints合并为一个?

感谢RobertH提供生成距离的命令。

1 个答案:

答案 0 :(得分: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)

如果你不想要NA,你可以这样做:

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