- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一个小程序,为了提高效率,我需要能够在我的数组中找到最接近的纬度和经度。
假设您有以下代码:
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 函数考虑这两个值,但我不完全确定如何。帮忙?
最佳答案
为了正确计算地球上各点之间的距离,您需要类似 Haversine 的东西公式。使用 this answer 中提供的 Python 实现,你可以这样编码:
from math import cos, asin, sqrt
def distance(lat1, lon1, lat2, lon2):
p = 0.017453292519943295
hav = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p)*cos(lat2*p) * (1-cos((lon2-lon1)*p)) / 2
return 12742 * asin(sqrt(hav))
def closest(data, v):
return min(data, key=lambda p: distance(v['lat'],v['lon'],p['lat'],p['lon']))
tempDataList = [{'lat': 39.7612992, 'lon': -86.1519681},
{'lat': 39.762241, 'lon': -86.158436 },
{'lat': 39.7622292, 'lon': -86.1578917}]
v = {'lat': 39.7622290, 'lon': -86.1519750}
print(closest(tempDataList, v))
维基百科给出的公式如下:
1 − cos(𝛳)
hav(𝛳) = ──────────
2
...其中 𝛳 是纬度差 (𝜑) 或经度差 (𝜆)。对于两点之间的实际角度𝛳,公式为:
hav(𝛳) = hav(𝜑₂ − 𝜑₁) + cos(𝜑₁)cos(𝜑₂)hav(𝜆₂ − 𝜆₁)
这样就变成了:
1 − cos(𝜑₂ − 𝜑₁) 1 − cos(𝜆₂ − 𝜆₁)
hav(𝛳) = ──────────────── + cos(𝜑₁)cos(𝜑₂)────────────────
2 2
距离是从中计算出来的,使用这个公式(也在维基百科上):
𝑑 = 2𝑟 arcsin(√hav(𝛳))
在上面的脚本中:
p
是将以度数表示的角度转换为弧度的因数:π/180 = 0.017453292519943295...
hav
是用上面公式计算的haversine
12742是以千米为单位的地球直径,即为上式中2𝑟的值。
关于python - 找到最近的纬度和经度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41336756/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!