2017-12-05 5 views
0

Ich habe eine große Anzahl von Schwerpunkten (84) basierend auf den Home-Bereichen erstellt. Alle diese Zentroide sind individuelle Formal Class SpatialPoints, gespeichert als Werte; Hier sind vier Beispiele:Erstellen einer Matrix aus räumlichen Daten

> 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 

Ich möchte eine Matrix dieser 84 Zentroiden schaffen, die im wesentlichen 84x84 mit den Abständen zwischen jedem Auffüllen der Zellen ist; Ich bin mir jedoch nicht ganz sicher, wie ich von 84 einzelnen Formal Class SpatialPoints zu einer Matrix übergehen kann. Es scheint, als ob das Erste wäre, alle diese Zentroide zu einem einzigen Formal Class SpatialPoints zu kombinieren, aber alles, was ich bisher gefunden habe, beschäftigt sich mit SpatialPointsDataFrames. Ist es möglich, 84 separate SpatialPoints in einem einzigen zu konsolidieren?

Vielen Dank RobertH für den Befehl zum Erzeugen von Entfernungen.

+1

Wenn Sie Ihre Frage reproduzierbar machen Sie ' Re eher eine Antwort bekommen. Geben Sie beispielsweise Daten an, mit denen andere arbeiten können. Dies bedeutet wahrscheinlich, dass Sie einen kleineren Datensatz erstellen, der Ihr Problem veranschaulicht. Auch wenn Sie nur nach 'Ich möchte das erledigt' fragen, ohne selbst etwas zu tun, ist dies eine schlechte Form und ein 'Off-Thema' für StackOverflow. – SymbolixAU

+0

Also der Teil, den ich vermisste, stellte sich als ziemlich einfach heraus; Sie können einfach alle SpatialPoints der Formal Class zusammenfügen und dann so verfahren, wie es RobertH vorgeschlagen hat. –

Antwort

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 

Gegeben SpatialPoints * Objekt xy, können wir

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 

tun Wenn Sie eine Distanzmatrix möchten, können Sie tun:

dd <- as.dist(d) 

Wenn Sie nicht über die nationalen Agenturen möchten, können Sie kann tun:

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 
Verwandte Themen