【问题标题】:Calculate the distance between each GPS points of two lists in python在python中计算两个列表的每个GPS点之间的距离
【发布时间】:2021-07-09 07:36:36
【问题描述】:

假设我们有一个熊猫数据框,它包含两列(“经度”和“纬度”),例如用(逗号)分隔:

longitude latitude
[116.415642, 116.41832, 116.418976, 116.419029, 116.421791, 116.426666, 116.429077, 116.43174, 116.434334, 116.436806] [39.897133, 39.897213, 39.898766, 39.900906, 39.900486, 39.90062, 39.900681, 39.900738, 39.900749, 39.900818]

我很困惑如何计算每个长/纬点之间的距离以获得一个新列作为它们每个之间的距离间隙 (KM) 为 (''gap_dist'')。输出应该是这样的:

我找到了许多教程,只是为了找到一对坐标(源和目标)之间的距离。那么在 python 中实现这一目标的最佳方法是什么?

提前致谢

【问题讨论】:

  • 你的参考点是什么?您必须计算 (x,y) 和参考 (x0, y0) 之间的距离。从你的结果来看,你的第一点是 (x0, y0) 吗?
  • 你想要haversine函数,堆栈上有很多例子。如果您的搜索没有给您想要的,请告诉我
  • @user3184950 是的,我需要半正弦距离或欧几里得距离,我可以计算它们,例如给定(一对一),我目前的情况(点列表)。有什么想法吗?
  • 如果您将数据格式化为易于复制的可粘贴形式,我可以举个例子。

标签: python pandas distance geopandas euclidean-distance


【解决方案1】:

如果你想要每个点和第一个点之间的差距,它是这样的:

from math import dist
lats   = [float(lat)  for lat  in df['latitude'][0]]
longs  = [float(long) for long in df['longtitude'][0]]
p0 = [lats[0], longs[0]]
dists = [dist(p0, [x,y]) for x, y in zip(lats, longs)]

【讨论】:

  • 您好@aSaffary 感谢您的回复,我尝试这样做,但实际上我得到了这个错误(TypeError:必须是实数,而不是列表),我认为它是因为“p0”是列表的字符串。那么我们如何将字符串列表转换为浮点列表呢?
  • in (.0) 3 longs = df2['longitude'] 4 p0 = [lats[0], longs[0]] -- --> 5 dists = [dist(p0, [x,y]) for x, y in zip(lats, longs)] TypeError: must be real number, not list
  • @M_Fatih89 我认为问题在于 lats 和 longs 变量不是列表,因为您的字段包含值列表,那么 lats 可能是列表列表。我编辑了答案以仅获取第一行数据框。
  • print(type(lats[0])) print(type(longs[0])) print(type(lats[0][0])) print(type(longs[0][ 0])) 输出:
  • 在您的问题中它们是浮动的,但现在看来它们是字符串。只需在使用它们之前调用 float 即可: lats = [float(i) for i in df['latitude'][0]]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多