簡體   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