Как получить более точные показания GPS в приложении для Android? - PullRequest
0 голосов
/ 25 октября 2011

Я использую этот код для получения местоположения для моего приложения:

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 200.0f, this);

Но когда я попробовал приложение в моем реальном телефоне Android, оно показывает это местоположение примерно в 80 километрах от места, в котором я на самом деле.Как мне сделать этот код более точным ... Я хочу, чтобы результат был более точным для того, что я делаю ..

Я использую onLocationChanged, чтобы отобразить его на карте. Вот оно:

public void onLocationChanged(Location location) {
    if (location != null) {

        //Gets users longitude and latitude
        lat = location.getLatitude();
        lng = location.getLongitude();

        //sets the GeoPoint usersLocation equal lat and lng
        userLocation = new GeoPoint((int) lat * 1000000, (int) lng * 1000000);

        OverlayItem usersLocationIcon = new OverlayItem(userLocation, null, null);
        LocationPin myLocationPin = new LocationPin(userIcon, MainActivity.this);

        //Removes the previous location
        if(previousLocation != null)
               mainMap.getOverlays().remove(previousLocation); 

        myLocationPin.getLocation(usersLocationIcon);
        overlayList.add(myLocationPin);

        //refresh the map
        mainMap.invalidate(); 

        //Making myLocationPin into the previousLocation just to be able to remove it later
        previousLocation = myLocationPin;
    }

Ответы [ 2 ]

4 голосов
/ 25 октября 2011

Звонок requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 200.0f, this); просит обновляться не чаще, чем раз в 1000 мс, когда местоположение из GPS изменяется на более чем 200,0 метров с момента последнего обновления. Если вам нужна более высокая точность, попробуйте уменьшить эти числа.

Тем не менее, вы не должны быть на 80 км. Вы тестируете это снаружи с ясным видом на небо?

Я думаю, что проблема в округлении. Вы используете new GeoPoint((int) lat * 1000000, (int) lng * 1000000);, но вместо этого делаете это:

new GeoPoint((int) (lat * 1e6), (int) (lng * 1e6));

Разница в том, что двойные значения были преобразованы в целые числа перед умножением. Таким образом, умножение происходит впоследствии, и поэтому после десятичной точки сохраняются цифры.

0 голосов
/ 25 октября 2011

Есть 2 возможных ответа ...

Вы можете либо запросить точное разрешение, оно использует близлежащие сети Wi-Fi вместе с GPS, чтобы лучше отслеживать, где вы находитесь:

http://developer.android.com/reference/android/Manifest.permission.html#ACCESS_FINE_LOCATION

или вы можете просто получать плохие данные GPS. Вы пытались перезагрузить телефон? Вы получаете правильное местоположение в Картах Google?

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...