我正在写一个小程序,为了提高效率,我需要能够在我的数组中找到最接近的纬度和经度。
假设您有以下代码:
tempDataList = [{'lat': 39.7612992 , 'lon': -86.1519681},
{"lat": 39.762241, "lon": -86.158436},
{"lat": 39.7622292, "lon": -86.1578917}]
tempLatList = []
tempLonList = []
for item in tempDataList:
tempLatList.append(item['lat'])
tempLonList.append(item['lon'])
closestLatValue = lambda myvalue: min(tempLatList, key=lambda x: abs(x - myvalue))
closestLonValue = lambda myvalue: min(tempLonList, key=lambda x: abs(x - myvalue))
print(closestLatValue(39.7622290), closestLonValue(-86.1519750))
我得到的结果是:
(39.7622292, -86.1519681)
它应该是什么(在这个例子中,列表中的最后一个对象)
(39.7622292, -86.1578917)
我知道如何获取单个值最接近的单元格,但是,我想让 lambda 函数考虑这两个值,但我不完全确定如何。帮助?
原文由 booky99 发布,翻译遵循 CC BY-SA 4.0 许可协议
要正确计算地球上各点之间的距离,您需要像 Haversine 公式这样的东西。使用 此答案 中提供的 Python 实现,您可以这样编码:
半正弦公式
维基百科上给出的公式如下:
…其中 𝛳 是纬度差 (𝜑) 或经度差 (𝜆)。对于两点之间的实际角度𝛳,公式为:
这样就变成了:
距离是从中计算出来的,使用这个公式(也在维基百科上):
在上面的脚本中:
p
是将以度数表示的角度转换为弧度的因数:π/180 = 0.017453292519943295…hav
是用上面的公式计算出来的haversine12742是以千米为单位的地球直径,因此就是上式中2𝑟的值。