0

这是我希望用来通过纬度/经度计算距离的函数

def calculateDistance( latOne, lonOne, latTwo, lonTwo ):
    from decimal import Decimal
    latOne, lonOne, latTwo, lonTwo = [Decimal(x) for x in (latOne, lonOne, latTwo,lonTwo)]
    DISTANCE_CONSTANT = 111120.0
    coLat = math.fabs(lonOne - lonTwo)
    alpha = 90 - latTwo
    beta  = 90 - latOne

    cosAlpha = math.cos(math.radians(alpha))
    cosBeta  = math.cos(math.radians(beta))
    sinAlpha = math.sin(math.radians(alpha))
    sinBeta  = math.sin(math.radians(beta))
    cosC     = math.cos(math.radians(coLat))

    cos_of_angle_a = (cosAlpha * cosBeta)
    cos_of_angle_b = (sinAlpha * sinBeta * cosC)
    cos_of_angle_c = cos_of_angle_a + cos_of_angle_b
    angle          = math.degrees(math.acos(cos_of_angle_c))
    distance       = angle * DISTANCE_CONSTANT
    return distance

如果我有一组 lats 和 long 列表,例如:

lat = ['200', '210', '240', '300'] 
long = ['10', '20', '30', '40']

和 , 的已知坐标latOnelonOne它等于

lat = 100 
lon = 200 

有没有办法可以遍历列表并将它们应用于函数?本质上,我想设置latOnelonOne始终等于已知坐标,然后遍历列表并将列表中的这些值提供给列表中latTwolonTwo所有值。

简单地说,有没有办法将值传递给函数,然后返回距离并对所有 lat 和 long 值重做这个?

例如:

latOne =100, lonOne = 200, latTwo = 200, lonOne = 10 
to function then return distance.
then run 
latOne =100, lonOne = 200, latTwo = 210, lonOne = 20 

依此类推,直到 long 和 lat 的所有列表值都输入到函数中。

4

2 回答 2

3

你的意思是这样的:

results = [CalculateDistance(100,200,lattwo,lontwo) 
           for lattwo,lontwo in zip(latOne,lonOne)]
于 2013-06-03T13:12:39.863 回答
1

Python 的zip函数将两个列表组合成一个元组列表。您可以对其进行迭代以一次获得每一对:

for latTwo, lonTwo in zip(lat, long):
  print calculateDistance(latOne, lonOne, latTwo, lonTwo )

以上只是打印结果。您可以以老式方式生成数组:

out=[]
for latTwo, lonTwo in zip(lat, long):
  out.append(calculateDistance(latOne, lonOne, latTwo, lonTwo ))

或者您可以使用列表推导:

 [calculateDistance(latOne, lonOne, latTwo, lonTwo ) for latTwo, lonTwo in zip(lat, long)]
于 2013-06-03T13:16:02.077 回答