计算列表中从一个点到每个其他点的距离

时间:2014-10-16 14:29:12

标签: python python-2.7

我有以下代码,它将使用Google maps api计算任意两点之间的距离。

代码:

def calculateDistance(sourceLatitude, sourceLongitude, destinationLatitude, destinationLongitude):
        sourceCoordinates = sourceLatitude, sourceLongitude
        destinationCoordinates = destinationLatitude, destinationLongitude

        url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins={0}&destinations={1}&mode=driving&language=en-EN&sensor=false".format(str(sourceCoordinates),str(destinationCoordinates))
        result= simplejson.load(urllib.urlopen(url))
        resulting_distance = result['rows'][0]['elements'][0]['distance']['text']
        print "The distance is: " + resulting_distance

我有一个TSV文件,如下所示:

Longitude    Latitude

-4.143452    5.342044
-3.913602    5.341612
-3.967045    5.263331

...          ...
...          ...

我有一个读取TSV的下面方法

def readTSV():
    with open('TSVFile.txt','r') as f:
    myList = zip(*(line.strip().split('\t') for line in f))

现在,列表“myList”包含tsv文件中列表中的所有值。

我的问题是如何将这些值列表传递给“ calculateDistance ”方法,以便覆盖列表中每个值的组合?更确切地说,我需要计算列表中从一个点到每个其他点的距离。

1 个答案:

答案 0 :(得分:0)

您可以简单地使用列表理解:

distances = [[calculateDistance(sLa, sLo, dLa, dLo) for (dLa, dLo) in myList] for (sLa, sLo) in myList]

以下是使用曼哈顿距离的结果:

>>> myList = [(1,1),(3,2),(5,1)]
>>> def calculateDistance(a,b,c,d):
...   return abs(a-c)+abs(b-d)
...
>>> [[calculateDistance(sLa, sLo, dLa, dLo) for (dLa, dLo) in myList] for (sLa, sLo) in myList]
[[0, 3, 4], [3, 0, 3], [4, 3, 0]]