2014-09-30 127 views
-3

我正在使用python及其第三方库 - geopy。城市列表之间的计算距离算法

,如果我有一个城市的列表,例如

cities = ["New York, NY","Chicago, IL","Denver, CO"] 

,我已经得到了他们的纬度和经度:

location = [(40.0149856, -105.2705456), (40.7127837, -74.0059413), (41.8781136, -87.6297982), (39.737567, -104.9847179)] 

我的问题是:

  1. 从34.0522342 -118.2436849开始;
  2. 比较列表中起点和城市之间的距离,找到距离最近的地方 。
  3. 从那个地方,找到下一个最接近的[除了 的起点]
  4. 重复,直到所有的地方都被使用。总距离为 。

我该如何在python中编写它?或者算法会是什么?

+0

你是怎么试过的? – 2014-09-30 16:36:15

+0

我已经完成了将列表与起点进行比较的情况。例如,如果我发现纽约是壁橱,我不知道如何将该城市与其他城市进行比较。 – ospzcn 2014-09-30 20:01:02

回答

0

Geopy能够使用vincenty或great_circles来计算距离。循环查找最小距离的列表,将该距离添加到离开该位置的总弹出距离并重复。 类似于:

total = 0 
while location != []: 
    test = float("inf") 
    for loc in location: 
     #do distance calc here set = to dist 
     if dist < test: 
      test = dist 
      temp = loc 
    total += test 
    location.remove(loc) 
+0

这就是我的想法。但是如何在比较第一个之后循环遍历列表。例如,如果我发现纽约是起点的壁橱,如何检查下一个是谁?列表的长度将改变 – ospzcn 2014-09-30 19:57:03

+0

更新我的答案应该接近你正在做的 – user2097159 2014-09-30 20:06:16

+0

什么是“test = float(”inf“)”? – ospzcn 2014-09-30 20:12:10