我正在为飞行员跟踪和分享模块,该应用程序是与爱奥尼亚和科尔多瓦框架内的AngularJS构建。我目前只为android开发和测试。
情况:有四个按钮,第一个按钮检查gps是否启用,第二个按钮开始跟踪,第三个按钮停止跟踪,第四个按钮在互联网连接稳定的情况下将trackdata发送到web-API。我不能保证在空中100%的连通性,所以我不能将跟踪到的每个航点的跟踪数据直接发送到api -我必须存储它,直到飞机再次降落在地面上。
问题:跟踪的航点(1)时间/时间高度可变(我无法在我的测试轨道上获得任何模式)和(2)跟踪的高度/方向/速度数据没有记录在一些跟踪点上。
我的飞行测试路线大约是40分钟。我每隔60秒追踪一次。所以我必须至少得到35-40个跟踪点。但是:我在那条路线上只能得到9到15个跟踪点..
跟踪点:
1442050712218|51.4514495|6.8892898|null|null|null;12.9.2015 11:38:32 1442051327924|51.5183441|6.8183962|null|null|null;12.9.2015 11:48:48 :48 1442051511529|51.8569473|6.8611548|null|null|null;12.9.2015 11:51:52 1442051732401|51.9828794|6.9063169|null|null|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|null|null;12.9.2015 12:18:39 1442053401324|52.2677044|7.9679879|null|null|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秒跟踪一次,并且丢失的数据也将被记录?该功能对于应用程序和网络服务至关重要,用于学员飞行员的单人飞行训练。
谢谢。
发布于 2015-09-25 15:27:46
这只是一个想法:
超时不是一个准确的任务,也就是说,当所有其他任务都完成时,超时才是有效的。更像是:你应该每隔60秒跑一次。
在您的例子中,我将连续保存位置,并编写一个“时钟/计时器”,名为“每秒”。在你的脚本中,你计算确切的开始时间,例如: 09:27:16。在开始时间+x* 60秒后,你在时钟中触发最终保存位置。
如果这不起作用,我将使用Web Worker对其进行测试。
https://stackoverflow.com/questions/32775621
复制相似问题