繁体   English   中英

在Python中比较数据库中的纬度/经度值

[英]Comparing Lat/Lon values from the Database in Python

我有一个python程序,将特定的纬度/经度与一组纬度/经度进行比较,并显示最接近的纬度/批次。代码如下:

def distance(lat1, lon1, lat2, lon2):
    p = 0.017453292519943295#degree to radian
    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)) #print data in kms


def closest(data, v):
    return min(data, key=lambda p: distance(v['lat'],v['lon'],p['lat'],p['lon']))

sdata = [{'lat': 37.82, 'lon': 86.142}, 
    {'lat': 38.88,  'lon': 87.251 }, 
    {'lat': 39.78, 'lon': 89.336},
    {'lat': 40.42, 'lon': 86.123}, 
    {'lat': 41.35,  'lon': 90.21 }, 
    {'lat': 39.66, 'lon': 87.11}]

lat = input("Latitude:")
lon = input("Longitude:")

cust = {'lat': lat, 'lon':lon}

print(closest(sdata,cust))

结果:

Input: Latitude:45
Longitude:85
Output:{'lat': 40.42, 'lon': 86.123}

这个代码片段工作正常,但是我想集成数据库中的数据,因此数据库中有lat和lon的列表,如下所示:

(('25.2748603820801', '55.327449798584'), ('25.2712', '55.298'), ('25.277031', '55.275226'), ('25.251389', '55.332222'), ('25.275397', '55.328213'), ('25.275397', '55.328213'))

如何集成以上代码,以便可以对数据库中的值运行循环并在没有输入的情况下比较它们之间的值,即它有望给我7个不同的答案

遍历元组,并按以下方式转换为dicts格式数组的所需格式,并将其用作方法的输入。

sdata = (('25.2748603820801', '55.327449798584'), ('25.2712', '55.298'), ('25.277031', '55.275226'), ('25.251389', '55.332222'), ('25.275397', '55.328213'), ('25.275397', '55.328213'))
b = [{'lat':l1, 'lon':l2} for l1,l2 in sdata]

i = 0
for cust in b:
    tempb = [{'lat':l1, 'lon':l2} for l1,l2 in sdata]
    tempb.pop(i)
    print(closest(tempb,cust))
    i += 1

 #value of b
 [{'lat': '25.2748603820801', 'lon': '55.327449798584'}, 
 {'lat': '25.2712', 'lon': '55.298'}, 
 {'lat': '25.277031', 'lon': '55.275226'}, 
 {'lat': '25.251389', 'lon': '55.332222'}, 
 {'lat': '25.275397', 'lon': '55.328213'}, 
 {'lat': '25.275397', 'lon': '55.328213'}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM