为什么我的Cordova Geolocation如此不准确

时间:2015-09-25 05:47:34

标签: angularjs cordova geolocation ionic

我正在使用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

Trackpoints in my web-view

.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秒跟踪一次,还会记录丢失的数据?该功能对于应用程序和网络服务至关重要,可用于学生飞行员单机飞行的飞行训练。

谢谢。

1 个答案:

答案 0 :(得分:0)

只是一个想法:

超时不是一个准确的任务,这意味着,当所有其他任务完成时,超时工作。它更像是:你应该每60秒运行一次。

在你的情况下,我会保持位置连续,并会写一个“时钟/计时器”,每秒调用一次。在您的脚本中,您可以计算确切的开始时间,例如:09:27:16。在开始时间+ x * 60秒之后,您可以在时钟中触发最终保存位置。

如果这不起作用,我会使用Web Worker测试它。