嗨,大家好,我正在开发一个脚本,以显示具有自己功能的平台中的当前速度,但是对于当前速度,我始终为0,并且第一经度和纬度与第二纬度相同,有人可以帮我吗找出问题所在,并查看算法是否正确

function save1() {
  js.saveData("value1", js.call('api.location.getLatitude()', {}));
  js.saveData("value2", js.call('api.location.getLongitude()', {}));
}

function save2(){
  js.saveData("value3", js.call('api.location.getLatitude()', {}));
  js.saveData("value4", js.call('api.location.getLongitude()', {}));
}
function repeate2() {

  js.callRepeatedly("save1()", 1000);
  js.callRepeatedly("save2()", 2000);
}

function setintext() {
  save1();
  save2();
  repeate2();
  //js.alert("geted");
  var lat1 = js.getData("value1");
  var long1 = js.getData("value2");
  var lat2 = js.getData("value3");
  var long2 = js.getData("value4");
  js.setProperty('Home.Text_1', 'text', lat1);
  js.setProperty('Home.Text_2', 'text', long1);
  js.setProperty('Home.Text_3', 'text', lat2);
  js.setProperty('Home.Text_4', 'text', long2);
}


function distance(lat1, long1, lat2, long2) {
  setintext();
  var R = 6371; // km (change this constant to get miles)
  var dLat = (lat2 - lat1) * Math.PI / 180;
  var dLon = (long2 - long1) * Math.PI / 180;
  var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
    Math.sin(dLon / 2) * Math.sin(dLon / 2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  var dist = 0;
  dist = Math.round(d);
  var vitesse = dist / 3600000;
  js.setProperty('Home.Text_x', 'text', vitesse + "km/h");
}

最佳答案

你的框架是什么?许多JavaScript环境异步执行许多基于IO和/或占用大量CPU的操作,因此轮询位置不会触发新的计算,而只会返回最近计算出的位置。

您可以让该框架在计算出新职位时调用您的代码,而不用轮询新职位吗?框架很可能具有新的地位,例如仅每三秒钟一次,这意味着随后两秒的位置将是该时间的2/3。

当然,由于您要每秒保存一组位置变量,每两秒钟保存另一组位置变量,并且同时启动两个计时器,因此无论如何,您可以期望在一半行程中获得相同的位置。除非您依靠GPS计算来同步进行并花费大量时间,否则这并不是我要建立的假设。

10-08 03:05