从阵列中删除异常值

时间:2018-02-14 13:56:52

标签: android arraylist gps location distance

这是我的数据:

[347.9377383405443, 333.34675887548696, 32.58649314105846, 24.62622216317879, 23.963851339673706, 22.23128479365108, 18.58339312431561, 17.481575834173356, 12.878260934629896, 12.659358796327579, 9.173382918952944, 8.225242068304267, 6.649060121150481, 5.739199037771141, 5.464135530167054, 2.702620607115836, 1.6153358770723845, 1.591554089215848, 1.004944087023187, 0.664747108333436, 0.5306254111230282, 0.5282952033744951, 0.45217868098426106, 0.3125283548781286, 0.2233209059789322]

基本上这是速度,取自位置服务,然后排序递减。

这是我的代码:

  if (filterLocation(location)) {
        int size = locations.size();
        if(size > 1){
            Double distance = distanceBetween2Locations(locations.get(size-1) , locations.get(size-2));
            Long time = (locations.get(size-1).getTime() - locations.get(size-2).getTime()) / 1000;
            Utils.appendLog(context, "speedTest LAST Speed is: " + distance/time, "D", Constants.LOCATIONS);
            speeds.add(distance/time);
        }
        if(speeds.size() > 0){
            Collections.sort(speeds);
            Collections.reverse(speeds);
            Utils.appendLog(context, "speedTest ARRAY contains " + speeds.toString(), "D", Constants.LOCATIONS);
        }
        DesiredAccuracy = 200;
        Utils.appendLog(context, "processNewLocation is Filtered.", "I", Constants.TRACKER);
    }

所以我的问题是,在某些手机上,GPS会被扔进虚假的位置。有时2-3公里。它停留几秒钟,然后返回。所以我想忽略这些位置,如果发生这种情况则不跟踪旅行。但是我确实希望在只有1次跳跃的情况下跟踪它。因为也许用户经过隧道。 我很想知道的是:我怎么能从arraylist那里知道,差距巨大的第一个对象在哪里。 对于这种情况,因为我有2个340+的位置,然后有32个。我希望算法返回3(第一个有效的位置的索引)。但我的问题是,我不知道它们之间有什么区别。所以我需要找出一种方法来了解速度上最大的差距是在那些2之间。任何想法如何实现这个?

0 个答案:

没有答案
相关问题