距离矩阵地理点(省会城市)

时间:2016-12-20 13:48:20

标签: r matrix

我正在寻找世界各国首都城市的距离矩阵。我创建了像这样的国家质心的距离矩阵。 Shapefile派生自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(shapefile@data$UN)
dist_matrix <- as.data.frame(geosphere::distm(centroids)
colnames(dist_matrix) <- shapefile@data$NAME
rownames(dist_matrix) <- shapefile@data$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)

理想的输出格式看起来像这样

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

其中x表示各国首都之间的距离,以米或公里为单位。

1 个答案:

答案 0 :(得分:1)

我认为你需要的只是一个函数来计算lat / lon中给出的点之间的距离。这可以在geosphere包中找到。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h3>A demonstration of how to access a SELECT element</h3>

<select id="mySelect" >
  <option>Apple</option>
  <option>Pear</option>
  <option>Banana</option>
  <option>Orange</option>
    <option>Apple</option>
  <option>Pear</option>
  <option>Banana</option>
  <option>Orange</option>
</select>

<table style="width:700px;height:700px;margin:0 auto;border:1px solid black;" >
<tr>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
</tr>
<tr>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
</tr>
<tr>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
</tr>
<tr>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
    <td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
	<td style="border:1px solid black;border-collapse:collapse;" > <div>Try it</div></td>
</tr>
</table>