如何将Haversine公式应用于一组坐标

问题描述 投票:0回答:1

我需要计算一组坐标的距离。我具有计算它的功能,但我不知道如何在数据上使用它。

from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
  lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
  dlon = lon2 - lon1 
  dlat = lat2 - lat1 
  a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
  c = 2 * asin(sqrt(a)) 
  r = 6371
  return c * r

到目前为止,我所做的是将列转换为列表:

lat1= frame['Start Station Lat'].values.tolist()
long1= frame['Start Station Long'].values.tolist()
long2=frame['End Station Long'].values.tolist()
lat1= frame['End Station Lat'].values.tolist()

然后我尝试使用apply()函数:

frame['distance_travelled'] = frame.apply(lambda lon1,lat1,lon2,lat2: haversine(lon1,lat1,lon2,lat2), axis=1)

但是它没有用。请指教!

非常感谢。

python coordinates distance
1个回答
0
投票

因此,如果我理解正确,这可能会有所帮助;在框架上使用Apply函数可让您访问行的值,这意味着您无需将列转换为列表。因此,对于您的示例案例,您可以执行以下操作:

frame['distance_travelled'] = frame.apply(lambda x: haversine(x['Start Station Lat'],x['Start Station Long'],x['End Station Long'],x['End Station Lat']), axis=1)

以防万一,您有2x lat1作为变量名:

lat1 = frame['Start Station Lat'].values.tolist() ###HERE
long1= frame['Start Station Long'].values.tolist()
long2=frame['End Station Long'].values.tolist()
lat1= frame ['End Station Lat'].values.tolist() ###HERE
© www.soinside.com 2019 - 2024. All rights reserved.