2014-11-08 6 views
0

У меня есть следующий код в основной деятельности:Точность определения местоположения остается на низком уровне с помощью GPS

LocationManager mlocMan = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);      

if (mlocMan.isProviderEnabled(LocationManager.GPS_PROVIDER)) {      
    LocationListener mlocListener = new LocationManagerHelper(...); 
    mlocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,mlocListener); 
}   

В слушателю месте у меня есть это: (theAccuracy инициализировался -1)

if (theAccuracy == -1 || theAccuracy > loc.getAccuracy()) { 
    theAccuracy = Math.round(loc.getAccuracy()); 
    latitude = loc.getLatitude(); 
    longitude = loc.getLongitude();   
} 
updateTimes++; 
if (updateTimes == 3) { 
    mLocMan.removeUpdates(this); 
    updateTimes = 0; 
    //get address for location 
    theAccuracy = -1; 
} 

Значение, после 3-х обновлений местоположения от GPS, найдите наилучшее точное местоположение и получите его адрес. На эмуляторе я получаю фиксированную точность 20 м (я отправляю long/lat с помощью DDMS), но это не настоящая жизнь, поэтому я попытался с моим устройством, и в то время как первый раз (3 запроса) дал мне точный адрес (на месте) с Точность 40 м, некоторые из них иногда были более точными, но адрес был рядом. Лучшая точность, которую я получил, - 29 м (произошло один раз), в большинстве случаев она выше 30. Является ли это проблемой моего GPS (LG G3) или есть ли какая-либо другая идея, которая может сделать вещи более точными после 3-4-5 запросов?

ответ

0

Несколько причин:

  1. Ваш эмулятор не имеет фактического GPS оборудования, так что это, вероятно, используя ваш IP-адрес, так вот почему она кажется фиксированной.

  2. Аппаратное обеспечение GPS на вашем телефоне должно немного нагреться. Установите частоту опроса на бит (1 обновление в секунду или полсекунды), и пусть он будет работать в течение нескольких секунд, прежде чем принимать измерения, которые считаются.

  3. Менеджер местоположения поддерживает аппаратный и сетевой поиск (wifi/celltowers). Не знаете, как настроить поставщика только на аппаратное обеспечение вашего телефона, но если вы используете gps-клиент googlePlayServices (LocationClient), это довольно просто:

    mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority (LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationClient.requestLocationUpdates (mLocationRequest, (LocationListener));

  4. Возможно, вы, вероятно, проверяете свой компьютер в дверях. Здания определенно влияют на точность gps.

+0

1. эмулятор, конечно, не в реальной жизни 2. поэтому в minTime парах вы рекомендуете я должен поставить 1 вместо 0? когда вы говорите, что вы согреваете, вы имеете в виду с того момента, как я включил GPS или с моего первого запроса? 3. Службы Google были неточными в качестве обычного запроса, но весили гораздо больше, без каких-либо заметных преимуществ. Мне не нужен постоянный запрос местоположения, поэтому это не подходит для моих нужд. 4. Я стою возле окна своего дома, по иронии судьбы, первая попытка дала мне идеальный результат, следующие ... ну ... менее совершенные. – Amos

+0

1. Под разогревом я имею в виду спам, некоторые запросы на gps, время, когда первый запрос не является эталоном. 2. Я не могу сказать, хорошо ли или плохо. GPS рассчитывается как дельта между двумя спутниками, если один спутник имеет четкую линию через ваше окно, а другой проходит через стену, вероятно, это хуже, чем прохождение через стены. 3. С клиентом google существует очень заметная конвергенция от повторяющихся запросов. Является ли это все из-за разминки или если есть также внутренний алгоритм конвергенции, я не знаю. – NameSpace

+0

Я постараюсь проверить это на открытом воздухе. В то же время, вы рекомендуете мне просить более трех запросов? Какой minTime вы рекомендуете мне установить? – Amos

Смежные вопросы