Я работаю над модулем Track & Share для пилотов, приложение создается с помощью AngularJS в рамках Ionic и Cordova. В настоящее время я разрабатываю и тестирую только для Android.
Случай. Есть четыре кнопки: сначала проверяется, включен ли gps, второй запускает отслеживание, третий останавливает отслеживание, четвертый отправляет trackdata в веб-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 | null | null; 12.9.2015 11: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 секунд, и отсутствующие данные также будут записаны? Эта функция имеет решающее значение для приложения и веб-службы для летного обучения для сольных полетов студенческого пилота.
Спасибо.
Просто идея:
Тайм-аут не является точной задачей, а значит, тайм-аут работает, когда выполняются все остальные задачи. Это больше похоже: вы должны запускать каждые 60 секунд.
В вашем случае я бы сохранил постоянную позицию и напишет "часы/таймер", называемые каждую секунду. В вашем скрипте вы рассчитываете точное время начала, например: 09:27:16. После старта + x * 60 секунд вы запускаете в своих часах окончательную экономию позиции.
Если это не работает, я бы проверил его с помощью веб-рабочего.