Измерение расстояния между координатами широты и долготы из таблицы базы данных с использованием Python

Я хочу рассчитать расстояния между широтными и длинными координатами из таблицы базы данных, при этом первый запрошенный результат в таблице является ссылкой для других широтных и длинных местоположений. Таблица Db будет состоять из «USR,REF,LONG,LAT».

В конечном счете, моя цель — создать графический интерфейс, в котором пользователь ищет REF-запись. Затем пользователь сделает выбор из таблицы. И на основе выбранной записи, которая будет использоваться в качестве эталона для других точек широты и долготы, будет отображаться расстояние между опорными точками широты и долготы и другие различия точек широты и долготы.

Я попробовал формулу гаверсинуса. Но я вижу, что большинство руководств показывают только две точки широты и многоугольника для удаленных измерений.

import sys
import math 


def haversine(lon1, lat1, lon2, lat2):

    # convert decimal degrees to radians    
    lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])

    # haversine formula    
    dlon = lon2 - lon1 
    dlat = lat2 - lat1

    a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) *math.sin(dlon/2)**2

    c = 2 * math.asin(math.sqrt(a))

    km = 6367 * c

    return km

conn = pypyodbc.connect(# My MsAccessDB Location)


cursor = conn.cursor()

query = "SELECT*FROM Test_dist ORDER BY Licensee"

cursor.execute(query)

results = cursor.fetchall()


for x in results:

     print(x) ```



OUTPUT


(' ABC JIM', 469.55, 18.533333, -33.85)
(' CALLY', 383.5125, 23.460278, -33.234722)
(' ROSS', 469.55, 21.983333, -34.166667)
(' SALLY M', 383.5625, 23.2325, -33.072222)
('KRACE', 400.36, 23.5688, -33.045668)
('LEEMER', 202.36, 23.2566, -33.158859)



When i run the code it displays all my records . I am not sure how to implement this into the haversine function thou as I would need to do it from my database table .

Вы пытаетесь поместить значения lat и long строки 1, а также lat и long каждой другой строки в эту функцию?

lc74 20.06.2019 00:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот что вы должны сделать, если хотите сравнить каждую строку с длинной и широтой первой строки.

for i in range(1,len(results)):
     print haversine(results[0][2],results[0][3],results[i][2]results[i][3])

Спасибо . Глядя на ваш ответ, сейчас это кажется таким простым. Мне определенно придется сделать некоторую домашнюю работу и больше читать о моих циклах For . Спасибо

Garth 20.06.2019 08:21

Другие вопросы по теме