1

Вычислить пробег по точкам

Topic: Вычислить пробег по точкам

Добрый день! Есть задача вычислить пробег за определенный интервал времени имея координаты точек. Использую функцию:

function latlng2distance(lat1, long1, lat2, long2) {
    //радиус Земли
    var R = 6372795;
     
    //перевод коордитат в радианы
    lat1 *= Math.PI / 180;
    lat2 *= Math.PI / 180;
    long1 *= Math.PI / 180;
    long2 *= Math.PI / 180;
     
    //вычисление косинусов и синусов широт и разницы долгот
    var cl1 = Math.cos(lat1);
    var cl2 = Math.cos(lat2);
    var sl1 = Math.sin(lat1);
    var sl2 = Math.sin(lat2);
    var delta = long2 - long1;
    var cdelta = Math.cos(delta);
    var sdelta = Math.sin(delta);
     
    //вычисления длины большого круга
    var y = Math.sqrt(Math.pow(cl2 * sdelta, 2) + Math.pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2));
    var x = sl1 * sl2 + cl1 * cl2 * cdelta;
    var ad = Math.atan2(y, x);
    var dist = ad * R; //расстояние между двумя координатами в метрах
 
    return dist
}

Все считает хорошо, но вот цифра не совсем идет с цифрой которая формируется в виалоне. К примеру, за сутки получается если вычислять через эту ф-ю на 1км меньше. Скажите пожалуйста каким образом  вычисляется пробег в виалоне?

2

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

treasury, по разному считается. Может по CAN шине, может по датчикам, может по GPS, с учетом высоты - в зависимости от настроек объектов. Это не всегда соответствует расчету по GPS координатам.

Если нужно совпадение, лучше всего задействовать встроенные механизмы подсчета (на сервере) Wialon.

At the dark side of telematics...
3

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

shal wrote:

может по GPS, с учетом высоты

Вот это интересует, нельзя ли увидеть фрагмент кода?

shal wrote:

встроенные механизмы подсчета (на сервере) Wialon

Имеется ввиду отчеты?

4

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

Да, конечно.
Вариант без учета высоты.

/// Calculate distance in meters between points (lat1, lon1) and (lat2, lon2)
ADF_GIS_EXPORT double adf_calc_distance(double lat1, double lon1, double lat2, double lon2, bool draft_calc)
{
    const double k = 3.14159265358979 / 180;
    const double ff = 1 / 298.257;
    double c, d, f, g, h1, h2, l, o, r, s, w1, w2, sg, cg, sf, cf, sl, cl;

    if (lat1 == lat2 && lon1 == lon2)
        return 0;

    if (draft_calc)
        return sqrt((lat2 - lat1)*(lat2 - lat1) + (lon2 - lon1)*(lon2 - lon1)) * 111000.0;

    // Compute auxiliary angles
    f = (lat1 + lat2) / 2;
    g = (lat1 - lat2) / 2;
    l = (lon1 - lon2) / 2;

    // Compute sines and cosines of auxiliary angles
    sg = sin(g * k);
    cg = cos(g * k);
    sf = sin(f * k);
    cf = cos(f * k);
    sl = sin(l * k);
    cl = cos(l * k);

    w1 = pow(sg * cl, 2);
    w2 = pow(cf * sl, 2);
    s = w1 + w2;

    w1 = pow(cg * cl, 2);
    w2 = pow(sf * sl, 2);
    c = w1 + w2;

    o = atan(sqrt(s / c));
    r = sqrt(s * c) / o;
    d = 2 * o * 6378.14;

    h1 = (3 * r - 1) / (2 * c);
    h2 = (3 * r + 1) / (2 * s);

    // Compute the angle between the points on a
    // synthetic sphere connecting the two points.
    w1 = sf * cg;
    w1 = w1 * w1 * h1 * ff + 1;
    w2 = cf * sg;
    w2 = w2 * w2 * h2 * ff;

    return d * (w1 - w2) * 1000;
}
At the dark side of telematics...
5

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

Спасибо! А можно с высотой, использовал эту функцию все равно показывает немного меньше чем виалон. Меня интересует цифра которая показывается в отчетах: "Пробег в поездках"

6

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

treasury,

shal wrote:

treasury, по разному считается. Может по CAN шине, может по датчикам, может по GPS, с учетом высоты - в зависимости от настроек объектов. Это не всегда соответствует расчету по GPS координатам.

Если нужно совпадение, лучше всего задействовать встроенные механизмы подсчета (на сервере) Wialon.

а может и самим трекером.
см. http://docs.wialon.com/ru/hosting/cms/units/general Счетчик пробега

At the dark side of telematics...
7

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

Добрый день, подскажите формулу для датчика пробега по координатам, которую можно вставить  в датчик пробега

чтобы получилось типа ((lat-#lat)^const2+(lon-#lon)^const2)^const0.5 - но это расстояние как я понимаю  в градусах, нужно преобразовать в километры

Системы мониторинга транспорта, системы оповещения населения ГО и ЧС, видеонаблюдение, охранная и пожарная сигнализация.
Skype: opl-sms
8

Вычислить пробег по точкам

(edited by SanderAMC 16/10/2018 10:12:38)

Re: Вычислить пробег по точкам

Что-то типа...
φ1, λ1; φ2, λ2 — широта и долгота двух точек в радианах
Δλ — разница координат по долготе
Δδ — угловая разница
Δδ = arccos {sin φ1 sin φ2 + cos φ1 cos φ2 cos Δλ}
Итог в метрах

9

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

opl wrote:

Добрый день, подскажите формулу для датчика пробега по координатам, которую можно вставить  в датчик пробега

чтобы получилось типа ((lat-#lat)^const2+(lon-#lon)^const2)^const0.5 - но это расстояние как я понимаю  в градусах, нужно преобразовать в километры

В документации к виалон, есть описания создания относительного одометра по координатом, "полистайте".

FFA0-0BBB-8911-15BB

https://www.reg.ru
10

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

vmtp  перелистал всю документацию, но там нет формулы - примера совсем
Если вы знаете где, дайте ссылку!!

Системы мониторинга транспорта, системы оповещения населения ГО и ЧС, видеонаблюдение, охранная и пожарная сигнализация.
Skype: opl-sms
11

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

SanderAMC  - формулу и я могу найти в интернете,
а вот как в виалоне взять 2arcsin  или sin  или cos - вот в чем вопрос

Системы мониторинга транспорта, системы оповещения населения ГО и ЧС, видеонаблюдение, охранная и пожарная сигнализация.
Skype: opl-sms
12

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

opl wrote:

SanderAMC  - формулу и я могу найти в интернете,
а вот как в виалоне взять 2arcsin  или sin  или cos - вот в чем вопрос

по таблицам (оно же тарировка)

All types of fuel sensors : capacitive Eurosens Dominator, fuel flow meters Eurosens Direct, Eurosens Delta, ultrasonic level sensor Eurosens Dizzi
Новости о продукции Мехатроники https://forum.gurtam.com/viewtopic.php? … 43#p135643
13

Вычислить пробег по точкам

(edited by SanderAMC 17/10/2018 13:49:44)

Re: Вычислить пробег по точкам

opl wrote:

SanderAMC  - формулу и я могу найти в интернете,
а вот как в виалоне взять 2arcsin  или sin  или cos - вот в чем вопрос

Численным методом, рядом Тейлора.Или приближенно arcsin как 90*sqrt(1-x)*(1-x/10)

14

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

Ребята, спасибо за ответы, но кто напишет в строчку всю формулу целиком, чтобы можно вставить было
в виалоне, то будет реально крутым специалистом в математике и виалоне:))

Системы мониторинга транспорта, системы оповещения населения ГО и ЧС, видеонаблюдение, охранная и пожарная сигнализация.
Skype: opl-sms
15

Вычислить пробег по точкам

Re: Вычислить пробег по точкам

Выше указан кусок кода для расчета по функциям.
Если по датчикам, то одной формулой не получится.

Создаете все нужные вам sin, cos и atan и пр. функции, указанные в коде,  через тарировку по таблицам, например, Брадиса. Для каждого из сочетаний параметра - свой датчик. Можно прямо как названы в коде.
В итоге дойдете до выражения в виде, что в return указано. Это ваш итог.

Либо просто по формуле sqrt((lat2 - lat1)*(lat2 - lat1) + (lon2 - lon1)*(lon2 - lon1)) * 111000.0

16

Вычислить пробег по точкам

(edited by opl 17/10/2018 15:21:49)

Re: Вычислить пробег по точкам

SanderAMC wrote:

Либо просто по формуле sqrt((lat2 - lat1)*(lat2 - lat1) + (lon2 - lon1)*(lon2 - lon1)) * 111000.0

т.е. вот это выражение можно вставить в параметр датчика пробега и километраж будет рассчитываться виалоном по координатам??

Системы мониторинга транспорта, системы оповещения населения ГО и ЧС, видеонаблюдение, охранная и пожарная сигнализация.
Skype: opl-sms
17

Вычислить пробег по точкам

(edited by SanderAMC 17/10/2018 16:13:41)

Re: Вычислить пробег по точкам

opl wrote:
SanderAMC wrote:

Либо просто по формуле sqrt((lat2 - lat1)*(lat2 - lat1) + (lon2 - lon1)*(lon2 - lon1)) * 111000.0

т.е. вот это выражение можно вставить в параметр датчика пробега и километраж будет рассчитываться виалоном по координатам??

Не совсем.
Как произвольный датчик ((#lat - lat)*(#lat - lat) + (#lon - lon)*(#lon - lon))^const0.5*const111000 - вот так можно, это в метрах. Но это грубая оценка, будет на большом пробеге расхождение набегать.