Запись пройденного маршрута на основе геолокации в Mapbox - PullRequest
0 голосов
/ 24 августа 2018

Есть ли способ рассчитать пройденное расстояние в Mapbox?

Например: если пользователь нажимает кнопку запуска, он записывает пройденный путь и рассчитывает расстояние. Я знаю, что можно рассчитать расстояние между двумя гео-точками , описанными здесь , однако пользователь может уйти с дороги и, следовательно, не выберет самый быстрый / наиболее подходящий маршрут между двумя гео-точками. Я хотел бы суммировать ВСЕ пройденные километры.

Положение монитора

navigator.geolocation.watchPosition(function(position) {
  document.getElementById('distance').innerHTML =
      calculateDistance(startPos.coords.latitude, startPos.coords.longitude,
                        position.coords.latitude, position.coords.longitude);
});

Рассчитать расстояние

function calculateDistance(lat1, lon1, lat2, lon2) {
  var R = 6371; // km
  var dLat = (lat2 - lat1).toRad();
  var dLon = (lon2 - lon1).toRad(); 
  var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
          Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
          Math.sin(dLon / 2) * Math.sin(dLon / 2); 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
  var d = R * c;
  return d;
}
Number.prototype.toRad = function() {
  return this * Math.PI / 180;
}

РЕДАКТИРОВАТЬ: одним из возможных решений может быть то, что каждый раз, когда я получаю новое местоположение, я вычисляю расстояние между предыдущим геопунктом и новым геопунктом и использую его для расчета расстояния. Если я хочу увидеть общее расстояние, я суммирую все расстояния между предыдущими точками. Я также могу использовать эти данные для построения линии между всеми сохраненными геопоинтами. Имеет ли это смысл? Есть ли более эффективный способ сделать это, поскольку это чисто решение javascript (может быть, оно связано с решением Mapbox?)

...