当前位置: 首页 > 面试题库 >

查找最接近的纬度和经度

百里意智
2023-03-14
问题内容

我正在编写一个小程序,为了提高效率,我需要能够找到数组中最接近的纬度和经度。

假设您有以下代码:

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公式。使用此答案中提供的Python实现,您可以像这样进行编码:

from math import cos, asin, sqrt

def distance(lat1, lon1, lat2, lon2):
    p = 0.017453292519943295
    a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p)*cos(lat2*p) * (1-cos((lon2-lon1)*p)) / 2
    return 12742 * asin(sqrt(a))

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))


 类似资料:
  • 问题内容: 我在SQLite数据库中存储了经度和纬度数据,我想获取与所输入参数最接近的位置(例如,我当前的位置-纬度/经度等)。 我知道这在MySQL中是可能的,并且我已经做了大量的研究,认为SQLite需要Haversine公式的自定义外部函数(计算球体上的距离),但是我还没有发现任何用Java编写并且可以工作的东西。 另外,如果要添加自定义功能,则需要org.sqlite.jar(用于org.

  • 问题内容: 我想从下面的数据库表中找到最近的位置 我已经从Google地图中获取了所有数据。在这里,我必须找到一个地方最近的位置。假设我在Surkhet地方,其纬度为28.6,经度为81.6,如何找到距Surkhet地方最近的地方。 问题答案: 这是最好的查询

  • 我正在尝试检索我的地理位置的最新长使用一个谷歌API。此api接受蜂窝塔信息。尽管我提供了所有的信息,但在很长一段时间内,我都没有得到正确的信息。 https://developers.google.com/maps/documentation/geolocation/intro 有人用这个API找到lat long吗?GoogleGEO定位API的精确度有多高?

  • 本文向大家介绍使用Google Maps和PHP查找PostCode或ZipCode的经度和纬度,包括了使用Google Maps和PHP查找PostCode或ZipCode的经度和纬度的使用技巧和注意事项,需要的朋友参考一下 从PostCode转换为映射参考远非准确,但可以使用Google Maps API来完成。尽管每天您的请求数量受到一定限制,但您只需要询问即可从Google获得Google

  • 问题内容: 在询问具体的代码示例之前,我只想问一下是否可以进行类似此伪代码的查询: 从表中选择项目,其中经度/经度=-在某个经度/经度点的x英里内- 那可行吗?还是我必须跳过一些箍?可以推荐的任何好的方法都很棒! 问题答案: 您应该搜索Haversine公式,但是一个好的开始可能是: 使用PHP,MySQL和Google Maps创建商店定位器 -请参见“使用MySQL查找位置”部分 使用MySQ

  • 问题内容: 目前,我在mysql数据库中的位置不足一百万,所有位置都包含经度和纬度信息。 我试图通过查询找到一个点和许多其他点之间的距离。它并没有我想要的那么快,尤其是每秒100次以上的命中。 是否有更快的查询,或者可能是比mysql更快的系统?我正在使用此查询: 注意:提供的距离以 英里为单位 。如果您需要 公里 ,请使用代替。 问题答案: 使用表中数据类型的值创建点。从Mysql 5.7.5开