Добрый день, пишу сейчас программу для заполнения документации по средствам kml файла, но возникли проблемы...
import urllib.request
import math
from pykml import parser
cos = math.cos
sqrt = math.sqrt
sin = math.sin
arctan = math.atan
asin = math.asin
acos = math.acos
radians = math.radians
def toFixed(numObj, digits=0):
return f"{numObj:.{digits}f}"
def haversine(lat1, lon1, lat2, lon2):
# Конвертируем в список
lon1, lat1, lon2, lat2 = map(radians, (lon1, lat1, lon2, lat2))
# Формула
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
c = 2 * asin(sqrt(a))
km = 6367 * c
km = km*1000
km = toFixed(km, '2')
print ('Расстояние в метрах:', km)
url = 'https://berezca.com/test.kml'
fileobject = urllib.request.urlopen(url)
root = parser.parse(fileobject).getroot()
i = 0
print('=======НАЧАЛА ОБРАБОТКИ==========')
while i<20:
try:
namet = (str(f'Имя точки: {root.Document.Folder.Placemark[i].name}'))
coordt = str(root.Document.Folder.Placemark[i].Point.coordinates).split(',')
coordt2 = str(root.Document.Folder.Placemark[i+1].Point.coordinates).split(',')
sh1= (float(coordt[0]))
dg1= (float(coordt[1]))
sh2= (float(coordt2[0]))
dg2= (float(coordt2[1]))
print (namet)
print (coordt[0], coordt[1])
haversine(sh1,dg1,sh2,dg2)
i = i+1
except (IndexError):
if i == 0 or i >= 5:
tchk = 'точек'
elif i == 1:
tchk = 'точка'
elif i == 2 or i == 3:
tchk = 'точки'
print ('Найдено:',(i+1),tchk)
print('========КОНЕЦ ОБРАБОТКИ========')
break
То что кот не ахти - знаю, но сейчас не об этом.
Программа нормально принимает файл и выводит информацию о точках, то есть парсит их имена/координаты и выводит длину между точек, вот с ней и возникли проблемы, перебрал уже с десяток формул, сейчас нашёл функцию в паблике поставил её в свой код, но вывод меня не радет, допустим между 1-ой и 2-ой точкой должно получится 147,20, а программа выводит 250.50...
(не вписал ещё получение длины, между первой и последней)
Ещё бы разобраться с азимутами, но я думаю если этот вопрос решится, то и с ними быстро разберусь, спасибо
Помогите, пожалуйста(