比较Python中数据库的Lat / Lon值

时间:2018-03-28 09:42:53

标签: python mysql

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

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个不同的答案

1 个答案:

答案 0 :(得分:0)

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

<!DOCTYPE html>
    <html>
        <head>
            <title>test CSS Grid</title>
            <link media="all" type="text/css" rel="stylesheet" href="product.css">
            <script src = "jquery-3.3.1.min.js"></script>
            <script type="text/javascript" src="productScript.js"></script>
            <div class="hide">
                <div id="product" class="product">
                    <div><u>Pos: </u></div><div class="Pos">test1</div>
                    <div><u>Artikel: </u></div><div class="Artikel">test2</div>
                    <div><u>Menge: </u></div><input class="Menge" type="text" />
                    <div><u>Lagerplatz: </u></div><div class="Lagerplatz">test6</div>
                    <div><u>Bezeichnung: </u></div><div class="Bezeichnung">test3</div>
                </div>
            </div>
        </head>
        <body>
            <div class="grid">
                <div id="wrapper" class="wrapper">
                </div>
                <div class="menu">
                    <button type="button" onclick="mockConfirm()"> barcode</button>
                    <button type="button" onclick="cancelPicklist()"> cancel</button>
                </div>
            </div>
        </body>
    </html>