计算列表中一个点到其他所有点的距离

0 投票
1 回答
1032 浏览
提问于 2025-04-27 23:12

我有一段代码,可以利用谷歌地图的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

你可以简单地使用列表推导式:

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]]

撰写回答