【问题标题】:show current speed from gps coordinates从 gps 坐标显示当前速度
【发布时间】:2016-05-26 01:30:14
【问题描述】:

大家好,我正在开发一个脚本来在具有自己功能的平台中显示当前速度,但是对于当前速度,我总是得到 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");
}

【问题讨论】:

  • 由于您在 setintext() 中同时将两组坐标(纬度/经度)保存到本地存储...这不是逻辑值相同吗?我认为您应该存储 set1... 并稍等片刻以保存第二组。还要考虑传输延迟!我不知道数据是从哪里来的……但它真的是“实时”的吗?
  • 您在不改变位置的情况下一个接一个地获取值。尝试在save1()save2() 之间更改位置
  • Louys Patrice Bessette 是的,我正在同时设置它们,但是 save1() 应该每 1 秒执行一次, save2() 应该每 2 秒执行一次,对吗?是的实时精确坐标
  • Eli Sadoff 我在一辆高速的汽车上测试它,但不起作用

标签: javascript performance math gps latitude-longitude


【解决方案1】:

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

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

当然,由于您每秒保存一组位置变量,每两秒保存另一组位置变量,并且同时启动两个计时器,因此无论如何您都可以期望在一半的运行中获得相同的位置。除非您依赖 GPS 计算同步发生并花费大量时间,否则我不会基于此假设。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多