Время прочтения: 4 мин.

На транспортном средстве (далее ТС) компании, установлено оборудование, позволяющее контролировать и получать данные о состоянии и местонахождении ТС. Информация о местонахождении ТС в режиме реального времени поступает на сервер компаний и хранится в базе данных (БД).

Естественно, ТС нуждается в услугах стационарного технического пункта (далее СТО). Данные объекты стационарны и имеют адрес, адреса занесены в базу. Аудитору требуется проверить, в какой момент времени ТС находилась на СТО.

Чтобы рассчитать расстояние между координатами требуется формула. В геометрии имеется три способа расчета расстояний на объектах (рисунок 1).

Рисунок 1. Координаты точек на земной поверхности
  1. Сферическая теорема косинусов 

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

 φ1, λ1; φ2, λ2 — широта и долгота двух точек в радианах

Δλ — разница координат по долготе

Δδ — угловая разница

2. Формула гаверсинусов используется, чтобы избежать проблем с небольшими расстояниями. Данную формулу удобно использовать для проверки факта грузоперевозки, а также определения времени простоя автотранспорта, например, в точке доставки груза (расскажем об этом в следующей статье)

3. Модификация для антиподов 

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

Рассмотрим подробнее последнюю формулу для поиска расстояний. Ежемесячно компания формирует в программе Excel списки ТС, которым проводилась техническая обслуживание, с указанием времени и места прохождения. Кроме этого нужно учесть погрешность в виде потерю сигнала в радио канале связи (рисунок 2).

Рисунок 2. Расчет потеря сигналов по координаты точек

С помощью excel и расчета по формуле (1) мы определяем в каких точках была потеря сигнала, чтобы исключить данный случай из запроса.

Формула для расчета расстояния между точками.

ATAN2(SIN(X2*ПИ()/180)*SIN(Y2*ПИ()/180)+COS(X2*ПИ()/180)*COS(Y2*ПИ()/180*COS(Y1*ПИ()/180-X1*ПИ()/180);КОРЕНЬ(COS(Y2*ПИ()/180)*SIN(Y1*ПИ()/180-X1*ПИ()/180)*COS(Y2*ПИ()/180) *SIN(Y1*ПИ()/180-X1*ПИ()/180)+(COS(X2*ПИ()/180)*SIN(Y2*ПИ()/180)-SIN(X2*ПИ()/180)*COS(Y2*ПИ()/180) *COS(Y1*ПИ()/180-                                                                            (1) X1*ПИ()/180))*(COS(X2*ПИ()/180)*SIN(Y2*ПИ()/180) -SIN(X2*ПИ()/180)*COS(Y2*ПИ()/180)*COS(Y1*ПИ()/180-X1*ПИ()/180))))*R

С учетом списка ТС и потери сигнала сформировать запрос SQL системе управление базы данных (СУБД) на сервер компаний. Таким образом формула для расчета программы SQL будет иметь следующий вид (пример запроса SQL по нахождению ТС):

Select  m.[time],
m.[id], 
m.[CarNumber]
m.[x2],
m.[y2]
From [qwe]. GpsHistory m, [qwe].Devices m
CREAT TABLE m.CarNumber as [Номер], m.time as [Дата], m.time as [Дата выдачи],  as [Часы], X2 as [x], Y2 as [y] Into 
X2 as [x], Y2 as [y] Where m.DeviceId = m.id;
INSERT INTO #Remont ([Номер], [Дата], [Дата выдачи], [Часы], [x], [y]) 
Values (Номер ТС 1, Convert (Date, '2018.11.23'), Convert (Date, '2018.11.26'), 6.8, X1, Y1);
SELECT m.id, X2, Y2, m.time,    
atn2(sqrt(COS(Y2*pi()/180)*SIN(Y1*pi()/180-X1*pi()/180)*COS(Y2*pi()/180)*SIN(Y1*pi()/180-X1*pi()/180)+(COS(Y2*pi()/180)*SIN(Y2*pi()/180)-SIN(Y2*pi()/180)*COS(Y2*pi()/180)*COS(Y1*pi()/180-X1*pi()/180))*(COS(Y2*pi()/180)*SIN(Y2*pi()/180)-SIN(Y2*pi()/180)*COS(Y2*pi()/180)*COS(Y1*pi()/180-X1*pi()/180))),SIN(Y2*pi()/180)*SIN(Y2*pi()/180)+COS(Y2*pi()/180)*COS( Y2*pi()/180)*COS(Y1*pi()/180-X1*pi()/180))*R as [ Расстояние до СТО]    
From [qwe]. GpsHistory m, [qwe].Devices m, 

где,

X1 — долгота (Longitude) ТС

X2 — широта (Latitude) СТО

Y1 — долгота (Longitude) ТС

Y2 — широта (Latitude) СТО

R- радиус Земли (6372795 метров)

S- расстояние

Для перевода углового расстояния в метрическое, нужно угловую разницу умножить на радиус Земли (6372795 метров), единицы конечного расстояния будут равны единицам, в которых выражен радиус (в данном случае — метры).

При расчете рассматривалось 15 ТС, которые были на ремонте, и по которым сформировали таблицу (рисунок 3).

Рисунок 3

Анализируя полученные результаты выяснилось, что адреса данных СТО не совпадают с местом ремонта ТС. Более того не все ТС были в координатах данных СТО в заданное время в радиусе 500 метров. Исключения составляют поломка электроснабжения ТС и отсутствие данных о месторасположении объекта.

Однако, большинство автотранспорта, тем не менее, находилось в заданных координатах и в указанное время.