Координаты GPS GPS GPS

У меня есть следующий код ниже, который, кажется, работает нормально:

// GPS Reader // Criteria Criteria criteria = new Criteria(); //criteria.setAccuracy(Criteria.ACCURACY_COARSE); // Used when we can't get a GPS Fix criteria.setAccuracy(Criteria.ACCURACY_FINE); // Used when we can get a GPS Fix criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); LocationListener locationListener = new MyLocationListener(); LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, locationListener); 

Однако, когда я рисую данные, которые я собрал на картах Google, координаты GPS очень разбросаны в некоторых случаях, или это будет идти по пути, по которому я просто иду, и затем внезапному прыжку в точку в миле А затем обратно. Есть ли способ исправить это? Кажется, какая-то проверка точности?

Обновление :

В основном моя проблема выглядит как пример – GPS Jitter

Обновление 2 :

Я считал, что это не щедрость, но я подумал, что я мог бы получить полное представление о том, что здесь происходит, и посмотреть, может быть, мой подход над убийством. У меня все еще такая же проблема, что мои координаты дрожат в них, несмотря на то, что у меня есть точность 3 м и т. Д. Теперь это могут быть доступные спутники и т. Д. Я не знаю, но в основном я пытаюсь понять, как Все эти другие приложения, особенно приложения для упражнений, могут получать такие плавные показания при тех же обстоятельствах.

Я был на Quora и смог найти это. У любого запущенного приложения есть функция фильтрации данных GPS для более точного отслеживания? К сожалению, это не дало большого понимания моей проблемы, за исключением того, что вы можете использовать фильтр Kalman, если хотите, но, безусловно, должны быть менее сложные средства, поскольку я сомневаюсь, что большинство приложений реализовано.

В любом случае, если один разработчик хотел бы поделиться тем, что они делают с некоторым псевдокодом, что было бы весьма полезно. Я имею в виду, если я застрял с Калманом, но я уверен, что для реализации алгоритмов должно быть проще, и мы надеемся узнать их и как их реализовать, которые достойны.

Контекст: это мобильное приложение для пешеходов.

Релевантные SO-вопросы Я попытался получить информацию от создания гладкой кривой из серии координат GPS. Гладкие данные gps : это было хорошее начало, хотя я не уверен, что псевдокод мне нужно будет реализовать, чтобы правильно получить минимальные квадраты Fit Работайте должным образом, чтобы у меня были сплайны GPS-данных, которые я могу просматривать на некоторых картах Google, чтобы подтвердить, что я сделал это правильно. Я думаю, проблема в том, что это общие данные X и Y, с которыми я имел дело, а не координаты GEO, я мог бы что-то написать в Matlab, чтобы проверить это и продолжать.

Обновление 3

Изображение испорченных данных GPS. Я получаю https://www.dropbox.com/s/ilsf8snao2no65e/gpsdata2.png

Код https://gist.github.com/4505688

То, что вы получаете, связано с тем, что ваши критерии определяют лучшего поставщика как NETWORK_PROVIDER . Который не идентифицирует ваше местоположение, а вместо этого дает вам местоположение башни с ячейкой, диапазон которой охватывает ваше устройство. Поэтому, когда вы находитесь за пределами какого-либо здания, лучше использовать GPS_PROVIDER чтобы получить точную точность местоположений Geo. GPS_PROVIDER вы получаете разбросанные co- Ордината – это потому, что ваше устройство попадает в диапазон другой башни с ячейкой, поэтому происходит переход места. Непосредственно использовать GPS_PROVIDER – лучшее решение, которое вы когда-либо получите.

Сами данные GPS подвержены ошибкам. Даже если у вас есть все настройки LocationManager правильно (и это похоже на то, что вы делаете), вы увидите случайный джиттер в местах.

точность

Следует отметить, что точность GPS дает только оценку того, насколько хороши были расчеты полученных сигналов GPS. Систематические ошибки могут дать вам хорошее число точности (<10 м), но все равно представляют собой ошибку большой позиции. Вот почему вы увидите дрожание, даже если ваша точность очень хорошая. Меры точной оценки хороши для удаления очень больших ошибок (> 100 м), но на более низком уровне это просто указывает на то, что расчеты сходились.

фильтрация

Фильтрация, как и многие вещи, лучше всего, если вы делаете как можно меньше. Фильтр точности должен иметь возможность удалять большие ошибки, и если у вас будет хороший порог, вы можете получить плавные данные.

Вы также можете получить некоторую выгоду, если вы установите порог изменений позиции для запуска приложений. Например, бегун может покрывать определенное расстояние с течением времени и устанавливая верхний порог (Usain Bolt Cutoff), вы должны иметь возможность удалять плохие точки. Проблема в том, что если ваша первая точка – это ошибка, вы в конечном итоге удалите все остальные точки.

Фильтр Калмана

Фильтр Kalman – отличное решение, и я реализовал его в приложении навигации, над которым я работаю. Результаты очень разумные, и это даже допускает ограниченную мертвую расчёт в случаях, когда GPS плохой или недоступен. К сожалению, я не могу поделиться исходным кодом, но я могу дать вам небольшое руководство, если вы решите пойти именно так. Наилучшие результаты получены из 6 фильтров DoF, где вы вычисляете ускорение и скорость и используете это для оценки позиций. Это не самое простое решение, но мы видели хорошие результаты.

Наименьших квадратов

Фильтр Kalman отличен, так как он может использоваться в реальном времени для фильтрации позиций. Он отслеживает свое состояние, и вам не нужно хранить старые местоположения. Но, с другой стороны, если вы хотите постобработать свой маршрут, оптимальный путь – это подход наименьших квадратов. (Кальман получен из формул LSQ). Я не делаю много постобработки, но я подозреваю, что могу выкопать некоторые старые учебники. Однако теория должна быть одинаковой.

Большинство устройств GPS довольно хороши, и из всех проверок, которые я видел, я не часто вижу дрожание, которое вы видите в своем примере. Тем не менее, одно большое преимущество и причина, по которой я применил фильтр Kalman, заключается в том, что пройденное расстояние и вычисления скорости намного точнее

Проверьте эту статью Reto Meier (включая код). Это должно дать вам массу информации, о которой нужно подумать. Вы должны, по крайней мере, установить минимальные параметры расстояния и времени.

 lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 5000, 20, locationListener); 

Также вы можете комбинировать несколько провайдеров, чтобы получить наилучшие координаты, которые вы можете в данный момент. Удачи!

Простым подходом является выброс любых старых или неточных данных и сохранение среднего значения долготы и широты.

 private static final long WILDLY_OUT = 15; private static final long TOO_OLD = 30000; private static final long NO_SAMPLES = 5; double lastLocationTime; double calclongitude(Location location, double oldLongitude) { double newLongitude = oldLongitude; if (location.getAccuracy() < WILDLY_OUT) { newLongitude = (NO_SAMPLES * oldLongitude + location .getLongitude()) / (NO_SAMPLES + 1); lastLocationTime = System.currentTimeMillis(); } if (lastLocationTime > TOO_OLD) { newLongitude = location.getLongitude(); } return newLongitude; } 

И сделайте то же самое для широты.