2014-10-16 39 views
0

我有下面的代码,它将使用谷歌地图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

你可以看看['itertools.combinations'(https://开头docs.python.org/2/library/itertools.html#itertools.combinations)。 – jonrsharpe 2014-10-16 14:31:24

+0

为什么你不通读文档,并尝试在解释器中的实现?这不是一个代码写入服务。 – jonrsharpe 2014-10-16 14:33:41

+0

@jonrsharpe,肯定感谢您的意见 – Varun 2014-10-16 14:35:26

回答

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]] 
相关问题