【问题标题】:Why is my Cordova Geolocation so inaccurate为什么我的 Cordova 地理位置如此不准确
【发布时间】:2015-09-25 05:47:33
【问题描述】:

我正在为 Pilots 开发一个跟踪和共享模块,该应用程序是在 Ionic 和 Cordova 框架内使用 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 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 秒跟踪一次并且丢失的数据也会被记录的问题?该功能对于学生飞行员单人飞行的飞行训练应用和网络服务至关重要。

谢谢。

【问题讨论】:

  • 您是否遇到任何错误?您似乎没有记录错误。在错误回调中记录错误并共享输出。

标签: angularjs cordova geolocation ionic


【解决方案1】:

只是一个想法:

超时不是一个准确的任务,也就是说,当所有其他任务都完成时,超时才起作用。更像是:您应该每 60 秒运行一次。

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

如果这不起作用,我将使用 Web Worker 对其进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多