@krugliybublick

Можно ли считывать пройденное расстояние с сайта?

Всем привет.Сейчас будет очень дуратский наверное вопрос. Делаю веб разработку, которую перенесу в приложение. Задача такая. Есть пользователи зарегистрированные. Надо чтобы по кнопке старт срабатывал датчик который будет измерять пройденное расстояние (статическое) т.е задается изначально сколько ему пройти надо. Возможно ли сделать такое на сайте?заходя с телефона?Чтобы пройдя 200 метров он посчитал время и отследил конечно что он прошел 200 метров?Дайте пожалуйста решение.Ничего найти не могу. Желательно какое попроще. Сдплать хочу именно на сайте сперва.
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Дайте пожалуйста решение

Это на фриланс

Ничего найти не могу

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

Делаю веб разработку, которую перенесу в приложение.

Очень сомнительная затея.

Надо чтобы по кнопке старт срабатывал датчик который будет измерять пройденное расстояние (статическое)

Статическое расстояние - это новый термин в физике. Срочно пишите научную работу.
Данные можно получить только для geo позиционирования. Так что рассчитать расстояние можно, но точность будет не высокая. Плюс браузер будет уходить в офлайн и Вы ничего с этим не поделаете. Зачем Вам это? Почему человек будет юзать Ваш сайт вместо того, что бы юзать мобильное приложение (их просто тысячи). А вообще браслеты для этого есть.

ПС: затея странная. Потому что
- это уже реализовано много раз
- это реализовано на оптимальной платформе, Вы же выбрали самую странную для этого, а значит в любом случае получится в 100 раз хуже, чем у конкурентов.
Ответ написан
twobomb
@twobomb
Первое что пришло в голову использовать какие нибудь api для работы с геолокацией типа такого. Далее получать текущие координаты Geolocation.getCurrentPosition(). Запрашивать их например каждую секунду, далее я не помню, но нужно поискать есть формула определения расстояния между двумя точками. Ну и в конечном итоге , пройденное_растояние += расстояние_между_двумя_точками(предыдущие_координаты, текущие_координаты);
Крч я с этим не работал, но если подумать можно что то придумать.
P.S. Когда то была необходимость определять расстояние между двумя точками, я написал функцию на C# думаю сложности не возникнет переписать на javascript. Но там расстоянием как правило было сотни киллометров, поэтому супер точность не была важна.
Моя функция (C#)
static public double GPSTracker(Point pnt1, Point pnt2)
        {
            //pnt1, pnt2 - точки между которыми вычисляются расстояния
            // rad - радиус сферы (Земли), num - количество знаков после запятой
            //Отладка по входным данным (77.1539, 120.398)	(77.1804,129.55) return dist 225883	angle 84.7925159033
           //x - широта,y - долгота
           int rad = 6372795;
            double lat1, lat2, long1, long2;
            //получение координат точек в радианах
            lat1 = pnt1.X * Math.PI / 180;
            long1 = pnt1.Y * Math.PI / 180;

            lat2 = pnt2.X * Math.PI / 180;
            long2 = pnt2.Y * Math.PI / 180;
            //косинусы и синусы широт и разниц долгот
            double cl1 = Math.Cos(lat1);
            double cl2 = Math.Cos(lat2);
            double sl1 = Math.Sin(lat1);
            double sl2 = Math.Sin(lat2);
            double delta = long2 - long1;
            double cdelta = Math.Cos(delta);
            double sdelta = Math.Sin(delta);
            //вычисления длины большого круга
            double y = Math.Sqrt(Math.Pow(cl2 * sdelta, 2) + Math.Pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2));
            double x = sl1 * sl2 + cl1 * cl2 * cdelta;
            double ad = Math.Atan2(y, x);
            double dist = ad * rad;

            //вычисление начального азимута
            x = (cl1 * sl2) - (sl1 * cl2 * cdelta);
            y = sdelta * cl2;
            double z = (Math.Atan(-y / x)) * 180 / Math.PI;
            if (x < 0)
                z = z + 180;
            double z2 = (z + 180) % 360 - 180;
            z2 = -z2 * Math.PI / 180;
            double anglerad2 = z2 - ((2 * Math.PI) * Math.Floor((z2 / (2 * Math.PI))));
            double angledeg = (anglerad2 * 180) / Math.PI;
            //возврат значений длины большого круга и начального азимута
            //return dist, angledeg 
            return dist;//метров
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы