Android: не удалось получить точное значение широты и долготы

1

В моем приложении я хочу значение широты и долготы по GPS и/или сети. Мой код работает, но некоторое время он дает точное значение некоторое время, когда он не дает точного значения, некоторое время он дает значение, которое находится на расстоянии 10 или 20 метров от точного места. Код:

mlocListener = new MyLocationListener(getApplicationContext());
    /* Use the LocationManager class to obtain GPS locations */
    LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                10000, 0, mlocListener);
    } else if (mlocManager
            .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        mlocManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 10000, 0, mlocListener);
    }

    Location gpsLocation = mlocManager
            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
    Location netLocation = mlocManager
            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    if (gpsLocation != null) {
        mlocListener.latitude = gpsLocation.getLatitude();
        mlocListener.longitude = gpsLocation.getLongitude();

        double lat = (double) (gpsLocation.getLatitude());
        double lng = (double) (gpsLocation.getLongitude());


        Toast.makeText(this, "Location attributes using GPS Provider",
                Toast.LENGTH_LONG).show();

    } else if (netLocation != null) {
        mlocListener.latitude = netLocation.getLatitude();
        mlocListener.longitude = netLocation.getLongitude();

        double lat = (double) (netLocation.getLatitude());
        double lng = (double) (netLocation.getLongitude());



        Toast.makeText(this, "Location attributes using NETWORK Provider",
                Toast.LENGTH_SHORT).show();

    } 
  • 0
    возможный дубликат GPS ужасно неточно в Android
  • 0
    попробуйте mContext.getSystemService (...); mContext - это контекст вашей деятельности
Показать ещё 1 комментарий
Теги:
geolocation
latitude-longitude
gps
gprs

3 ответа

2
Лучший ответ

Используйте метод loc.getAccuracy(), чтобы проверить уровень точности вашего местоположения. Если значение меньше 10 (или меньше этого), вы можете его рассмотреть, иначе подождите, пока местонахождение Lister не получит другое место.

getLastKnownLocation - это ваше последнее известное местоположение, не используйте только getAccuracy и проверьте время.

Лучше не используйте getLastKnownLocation, если вам нужно только точное местоположение.

0

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

locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) 

Это позволит получить ваше местоположение с помощью встроенного GPS-приемника вашего телефона (время стоит дорого), но это дает вам максимально возможную точность.

0

Обычно GPS точный до 3 м, но если его 10-20 метров, это возможно с помощью GPS.

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

Точность GPS

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

  • 1
    так что GPS более точно связан с сетевым провайдером
  • 0
    @VinitVikash, да

Ещё вопросы

Сообщество Overcoder
Наверх
Меню