Точность GPS-координат найдена в Android

Я работаю над проектом, который требует постоянного обновления местоположения моего телефона Android. Он работает хорошо, но очень неточно. В помещении я получал точность извлеченного местоположения (через getAccuracy()) около 60 (насколько я знаю, в метрах), где, как я хочу, точность должна быть (максимум) 2-3 метра. Во-первых, нельзя ли постоянно получать точность (2-3 метра)? Если да, то как?

Следуйте фрагменту кода, который я использую для получения местоположения пользователя.

    public boolean getLocation(Context context, LocationResult result)
{
    //I use LocationResult callback class to pass location value from MyLocation to user code.
        locationResult = result;

    if(lm==null)
        lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    //exceptions will be thrown if provider is not permitted.
    try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
    try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}

    //don't start listeners if no provider is enabled
    if(!gps_enabled && !network_enabled)
        return false;

    if(gps_enabled)
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
    if(network_enabled)
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
    timer1=new Timer();
    timer1.schedule(new GetLastLocation(), 10000);
    return true;
}

У меня также возникла другая проблема: мое устройство постоянно находилось в статичном месте, расстояние между двумя последовательными полученными данными о местоположении GPS крайне ненадежно, оно меняется от 0,0 до 16 метров, что означает, что мое устройство постоянно движется.

Если кто-то из вас имеет какое-либо представление об этом, желательно, как добиться точности, пожалуйста, помогите мне.

Спасибо


person Ahsan Zaheer    schedule 10.08.2012    source источник


Ответы (3)


Вместо того, чтобы использовать только mintime и mindistance, вы можете получить лучшие результаты, передав объект Criteria с

ACCURACY_FINE
POWER_HIGH

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

http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long, float, android.location.Criteria, android.location.LocationListener, android.os.Looper)

person Pork 'n' Bunny    schedule 10.08.2012

Основываясь на ответе Свинины, вы можете немного уменьшить дисперсию в случае, который вы представили выше (выборки с переменной точностью), если вы гибки с частотой обновления. Допустим, вы определяете желаемую частоту на уровне 0,1 Гц (обновление каждые 10 секунд), тогда вы можете фильтровать обновления своего местоположения, работая только с «лучшим» местоположением из набора образцов за последние 10 секунд. Простой способ определения «лучшего» может состоять в том, чтобы вернуть образец из набора, который имеет наивысший рейтинг точности. Если имеется несколько образцов с одинаковым рейтингом точности, верните последний. Еще одна вещь, которую вы можете сделать, это усреднить все выборки из данного набора вместе или просто все выборки с одинаковой точностью. Это не улучшит общую точность из-за геометрической природы ошибки GPS, но снизит дисперсию; вы уменьшите свою максимальную ошибку, увеличив минимальную ошибку. Вы также введете небольшой эффект задержки в случаях, когда устройство движется, что может быть или не быть проблемой в зависимости от вашего приложения.

person Nick    schedule 10.08.2012

В принципе невозможно получить точность 2-3 м с помощью GPS в помещении.

GPS требует достаточно четкой линии сайта для спутников, поэтому чем дальше вы находитесь в помещении, тем менее точным он становится.

Чтобы определить ваше местоположение в помещении, Android попытается использовать GPS, затем триангуляцию с использованием известных местоположений окружающих точек доступа WIFI, а затем триангуляцию вышек сотовой связи. Вероятно, он объединяет эти 3, чтобы обеспечить более точное предположение.

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

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

person Rob    schedule 10.08.2012
comment
Какую точность я могу получить на открытом воздухе? - person Ahsan Zaheer; 12.08.2012
comment
Точность на открытом воздухе действительно зависит от типа ландшафта, в котором вы находитесь. В равнинной сельской местности вы можете достичь точности около 1 м, в центре города с большими небоскребами точность может упасть до 50 м или около того. - person Rob; 13.08.2012