2016-12-20 5 views
0

私は世界中の国々の首都の距離行列を作成しようとしています。私はこのような国の重心の距離行列を作成しました。シェープファイルはhttp://www.gadm.org/version2から派生さ:距離行列の地理的なポイント(首都)

library(rgeos) 
library(rgdal) 
shapefile <- readOGR("./Map/World Map", layer = "TM_WORLD_BORDERS-0.3") 

centroids <- gCentroid(shapefile, byid = TRUE, as.character([email protected]$UN) 
dist_matrix <- as.data.frame(geosphere::distm(centroids) 
colnames(dist_matrix) <- [email protected]$NAME 
rownames(dist_matrix) <- [email protected]$NAME 

今、私は同じことをしたいが、国の首都の代わりに、国の重心と。理想的には、資本ではない他の地理的なポイントがあっても機能するメソッドが必要です。これまで私は与えられたshapefileに大文字をプロットすることにしましたが、それらの中から距離行列を作成する方法を見つけることはできません。

library(rgeos) 
library(rgdal) 
library(maps) 
library(tidyverse) 
shapefile <- readOGR("./Map/World Map", layer = "TM_WORLD_BORDERS-0.3") 

data("world.cities) 
world..cities <- world.cities %>% 
filter(world.cities$capital == 1) 
plot(shapefile) 
points(world.cities$long, world.cities$lat, col ="red", cex = .6, pch = 22, add = TRUE) 

理想的な出力形式は、xがメートルまたはキロメートルで、それぞれの国の首都の間の距離を表し、この

  Algeria Albania Azerbaijan 
Algeria  0  x   x 
Albania  x  0   x 
Azerbaijan x  x   0 

ようになります。

答えて

1

あなたが必要とするのは、緯度/経度で与えられたポイント間の距離を計算する関数だと思います。これは地球圏パッケージで利用可能です。

library(geosphere) 
Caps = cbind(world.cities$long, world.cities$lat) 
CapDistMatrix = distGeo(Caps, Caps) 
+0

このコードスニペットは、(// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)[説明を含む]、疑問を解決するかもしれないが、実際の品質を向上させることができますあなたの投稿。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。あなたのコードに説明的なコメントを詰め込まないようにしてください。これは、コードと説明の両方の可読性を低下させます! – kayess

+0

私はこれをしましたが、最後には蒸留水を使用しました。それは正しいと思われるので、私はそれに固執します。ご協力ありがとうございました! – vio

関連する問題