Этот код является функцией, которая затем запускает его через цикл for с оператором if (для краткости не включен, но в основном он позволяет мне разделять некоторые заводские выходные данные по машине и местоположению). Эта функция предназначена для преобразования данных x и y, которые мне даны в метрах, из известной широты и длинной позиции и преобразования их в новую широту и длину. Я делаю это, используя Пифагора, а затем формулу, которую я нашел на SO.
Работает без ошибок, но математика терпит неудачу, поскольку добавляет к выводу более или менее степень долготы. Он должен давать данные, очень похожие на эталонное местоположение, поскольку он никогда не находится на расстоянии более 50 метров от него.
вот раздел JSON, из которого взяты данные для интереса
"id": "b4994c877c9c",
"name": "forklift_0001", <---forklift data used in IF statement
"areaId": "Tracking001",
"areaName": "hall_1",
"color": "#FF0000",
"coordinateSystemId": "CoordSys001",
"coordinateSystemName": null,
"covarianceMatrix": [
0.47,
0.06,
0.06,
0.61
],
"position": [
33.86, <---position data converted from known lat/long, X then Y.
33.07,
2.15
],
"positionAccuracy": 0.36,
"positionTS": 1489363199493,
"smoothedPosition": [
33.96,
33.13,
2.15
и вот код
import json
import pprint
import time
import math
file_list = ['13_01.json']
output_nr = 1
def positionToLatLon( position ):
posx = position[0]
posy = position[1]
R = 6371 #Radius of the Earth
brng = 1.57 #Bearing is 90 degrees converted to radians.
d = math.sqrt((posx*posx) + (posy*posy)) #Distance in km from the lat/long #Pythagoras formula
lat1 = math.radians(40.477719)#reference lat point converted to radians
lon1 = math.radians(16.941589)#reference long point converted to radians
lat2 = math.asin(math.sin(lat1)*math.cos(d/R) + math.cos(lat1)*math.sin(d/R)*math.cos(brng))
lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(d/R)*math.cos(lat1),
math.cos(d/R)-math.sin(lat1)*math.sin(lat2))
lat2 = math.degrees(lat2)
lon2 = math.degrees(lon2)
result = []
result.append(lat2)
result.append(lon2)
return result
Таким образом, он работает без каких-либо ошибок, но вывод неправильный, он добавляет более или менее градус долготы и поэтому сдвигает весь результат на 60 м к востоку, делая анализ бесполезным, и я не могу понять, почему.
Я искал другую формулу, но не повезло, и моя математика не достаточно хороша, чтобы понять, использую ли я неправильную функцию триггера или что-то в этом роде.
Вся помощь приветствуется.