我正在使用Track&为飞行员分享模块,该应用程序是在Ionic和Cordova框架内使用AngularJS构建的。我目前正在开发和测试Android。
案例: 有四个按钮,首先检查gps是否启用,第二个启动跟踪,第三个停止跟踪,第四个将trackdata发送到web-API,如果互联网连接稳定。我无法保证100%的连接速度,所以我无法将每个跟踪的航路点上的轨道数据直接发送到api - 我必须存储它直到飞机再次停在地面上。
问题: 跟踪的航点是(1)在时间/时间上高度可变(我不能在我的测试轨道上得到任何模式)和(2)跟踪的高度/航向/速度数据不记录在某些轨迹点上。
我飞行的测试路线大约需要40分钟。我每60秒跟踪一次。所以我必须至少获得至少35-40个跟踪点。但是:我只能在那条路线上获得9到15个跟踪点..
航迹:
1442050712218 | 51.4514495 | 6.8892898 |空|空|空; 12.9.2015 11:38:32 1442051327924 | 51.5183441 | 6.8183962 |空|空| NULL; 12.9.2015 11:48:48 1442051511529 | 51.8569473 | 6.8611548 |空|空| NULL; 12.9.2015 11:51:52 1442051732401 | 51.9828794 | 6.9063169 |空|空| NULL; 12.9.2015 11:55:32 1442051912503 | 52.0233909 | 6.9596959 | 1300 | 64 | 52.25; 12.9.2015 11:58:33 1442052014828 | 52.0400627 | 7.0322238 | 1332 | 75 | 51.25; 12.9.2015 12:00:15 1442052517583 | 52.1472176 | 7.3813409 | 1307 | 70 | 51.5; 12.9.2015 12:08:38 1442052746410 | 52.1859082 | 7.5392811 | 1217 | 68 | 53; 12.9.2015 12:12:26 1442053119338 | 52.224271 | 7.874347 |空|空| NULL; 12.9.2015 12:18:39 1442053401324 | 52.2677044 | 7.9679879 |空|空| NULL; 12.9.2015 12:23:21
.service('TrackingFunctions', ['$interval', '$rootScope', '$localstorage', function($interval, $rootScope, $localstorage) {
// Erstellt einmalige "global" Referenz, dass immer die selbe Instanz angesprochen wird
var tracker;
this.doTracking = function(execTracking){
if(!execTracking){ // if no tracker start new
$localstorage.TRACKDATA = [];
return $interval(function(){
$localstorage.isTrackerActive = true;
var geo_options = {
enableHighAccuracy: true,
maximumAge: 30000,
timeout: 20000
};
function geo_success(position) {
console.log(position);
var tsmp = position.timestamp;
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var alt = position.coords.altitude;
var hdg = position.coords.heading;
var spd = position.coords.speed;
var ARRAYDATA = tsmp + "|" + lat + "|" + lng + "|" + alt + "|" +hdg + "|" + spd + ";";
$localstorage.TRACKDATA.push(ARRAYDATA);
}
function geo_error() {
//$scope.alt = "Fehler " + error.message + ' Error Code: ' + error.code;
}
var wpid = navigator.geolocation.getCurrentPosition(geo_success, geo_error, geo_options);
},60000); // getrackt wird alle 60 Sekunden
} else { // if tracker cancel
$interval.cancel(execTracking);
console.log("tracker deaktiviert!");
}
};
}])
如何修复应用程序每隔60秒跟踪一次,还会记录丢失的数据?该功能对于应用程序和网络服务至关重要,可用于学生飞行员单机飞行的飞行训练。
谢谢。
答案 0 :(得分:0)
只是一个想法:
超时不是一个准确的任务,这意味着,当所有其他任务完成时,超时工作。它更像是:你应该每60秒运行一次。
在你的情况下,我会保持位置连续,并会写一个“时钟/计时器”,每秒调用一次。在您的脚本中,您可以计算确切的开始时间,例如:09:27:16。在开始时间+ x * 60秒之后,您可以在时钟中触发最终保存位置。
如果这不起作用,我会使用Web Worker测试它。