我从网站上获得了PHP课程:http://www.giswiki.org/wiki/Algorithmus_von_Dijkstra
在我看到的代码中:
// $points is an array in the following format: (router1,router2,distance-between-them)
$points = array(
array(0,1,4),
array(0,2,I),
array(1,2,5),
array(1,3,5),
array(2,3,5),
array(3,4,5),
array(4,5,5),
array(4,5,5),
array(2,10,30),
array(2,11,40),
array(5,19,20),
array(10,11,20),
array(12,13,20),
);
获得“他们之间的距离”的数学是什么?我无法弄清楚背后的数学。
我有WSG84坐标(GPS ...例如:56.292157,-88.022461)。我做了数学计算以获得UTM中相同的坐标(UTM给出数字X和Y,我有4142193,601021)。我得到了我的第一个和第二个值来填充我的数组。我不知道如何获得第三个值的距离。
任何线索?
答案 0 :(得分:3)
应使用Great-circle_distance算法计算第三个值。然后,您可以使用dijkstra's algorithm。
答案 1 :(得分:1)
前两个数字不是坐标 - 它们是索引。因此,您需要为每个点提供一个唯一的索引,可以用来回顾这一点。
array(0, 1, 4)
表示点0和点1之间的距离为4.距离的单位可以是您想要的任何值。
答案 2 :(得分:0)
我想你可能会对这个问题感到困惑。 Djistrka的算法在图形上运行,无论是有向还是无向。我不确定给出的图表是否应该是定向的。 (如果它是无向的,那么数组(n1,n2,d)也意味着数组(n2,n1,d)
图形不必具有物理x,y坐标。您可以简单地获得顶点或节点列表以及它们之间的距离。
给出的数据结构可能不是可视化问题的最佳方式。更好的方法可能如下:
$points = array(
array(0, array(1, 4). arrau(2. 1)),
array(1, array(2, 5). array(3. 5)),
array(2, array(3,5), array(10, 30), array(11, 30),
array(3, array(4,5)),
array(4, array(5,5)),
array(5, array(19,20)),
array(10, array(11,20)),
array(12, array(13,20)))
在伪代码中,这代表
Node 0 -> Node 1 (distance 4), Node 2 (distance 1)
Node 1 -> Node 2 (distance 1), Node 3 (distance 5)
etc.
假设这是有针对性的,这简化了问题,该数组现在代表所有节点的连接。例如,节点0连接到节点1和节点2两个节点。节点1连接到3个节点,节点2和节点3.节点3仅连接到一个节点,即节点4.
我们可能会遇到以下问题:从节点0开始,我们如何到达节点4?一个路由是节点0到节点1(距离4)到节点3(距离5)到节点4(距离5)。行进的总距离为4 + 5 + 5 = 14。
现在我们问一个问题:这是最短的路线吗?由于图表太小而连接不是很好,在这种情况下你可以看到它。到达节点4的唯一方法是来自节点3,到达节点3的唯一方法是来自节点2或节点1.要到达节点2,我们可以来自节点0或节点1。但是通过节点1只会使旅行更长,所以很明显解决方案是节点0 - >节点2 - >节点3 - >节点4。
希望澄清有所帮助。