Я хочу рассчитать расстояния между широтными и длинными координатами из таблицы базы данных, при этом первый запрошенный результат в таблице является ссылкой для других широтных и длинных местоположений. Таблица 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 .
Вот что вы должны сделать, если хотите сравнить каждую строку с длинной и широтой первой строки.
for i in range(1,len(results)):
print haversine(results[0][2],results[0][3],results[i][2]results[i][3])
Спасибо . Глядя на ваш ответ, сейчас это кажется таким простым. Мне определенно придется сделать некоторую домашнюю работу и больше читать о моих циклах For . Спасибо
Вы пытаетесь поместить значения lat и long строки 1, а также lat и long каждой другой строки в эту функцию?