2012-06-23 1 views
5

Я тестирую приложение для Android, которое записывает местоположение (lat/long/alt). Я запускаю приложение на телефоне Samsung GTS5830 под управлением Android 2.2.1Неверная высота GPS-навигатора Android из-за отсутствия высоты геоида?

Я читал здесь и там, что высота GPS часто неверна из-за того, что земля не является абсолютно сферической. Например, в моем месте the geoid's height составляет 52 метра.

Я понимаю, что эта высота будет вычитаться из «чистой» высоты GPS. Это имело бы смысл для моего места, как:

- altitude from GPS phone: 535 m 
- geoid altitude: 52 m 
- altitude from phone's GPS minus geoid height: 482m 

- correct atlitude: 478 m 

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

  1. ли приведенная выше формула высоты GPS минус высота геоида Правильна ?
  2. Правильно ли я предполагаю, что андроид не влияет на высоту геоида при возврате высоты GPS?
  3. Если это верно, оно выполняется для всех версий Android?

Вот код, я использую, чтобы получить координаты GPS:

public class HelloAndroid extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d("main", "onCreate"); 
     setupGps(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    LocationListener locationListener; 
    LocationManager lm; 

    void setupGps() { 
     Log.d("gps", "Setting up GPS..."); 
     locationListener = new MyLocationListener(); 
     lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 5, 
       locationListener); 

     Log.d("gps", 
       "GPS supports altitude: " 
         + lm.getProvider(LocationManager.GPS_PROVIDER) 
           .supportsAltitude()); 
     Log.d("gps", "Finished setting up GPS."); 
    } 

    static class MyLocationListener implements LocationListener { 

     public void onLocationChanged(Location location) { 
      Log.d("gps", "long: " + location.getLongitude() + ", lat: " 
        + location.getLatitude() + ", alt: " 
        + location.getAltitude()); 
     } 
    } 
} 

ответ

6

Ответы на все три вопроса: да.

Высота, которую вы получаете от GPS, - это высота над эллипсоидом WGS84 в метрах, что является приблизительным показателем земной поверхности. Я знаю это, потому что я разрабатываю программное обеспечение Android для его использования.

Коррекция должна применяться для преобразования фигуры в высоту над средним уровнем моря или высоты, как это обычно известно. Обратите внимание, что это может отличаться от высоты, указанной высотомером, установленной на текущее давление на среднем уровне моря, потому что высотомер фактически измеряет давление воздуха, но давление воздуха не только зависит от высоты; это также функция плотности воздуха и температуры, поэтому альтиметр показывает приближение. Этот эффект не наблюдается с помощью GPS.

Гравитационная модель Земли 2008 (EGM2008) отображает разницу среднего уровня моря с эллипсоидом как функцию долготы и широты. Подробности здесь:

http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/egm08_wgs84.html

Менее точная модель, которая использует меньше данных, называемых EGM96 также доступна. Google оба эти, чтобы понять их лучше.

+0

Кроме того, ответы на все три ваших вопроса да. – davtom

+0

поставьте этот комментарий в свой ответ, и я отмечу это принятый ответ. –

+0

Я сделал это, спасибо. – davtom

4

Ошибки в высоте вполне может не быть вплоть до GPS и геоида разделения высоты.

Значение высоты, возвращаемое любым GPS-приемником, всегда является наименее точным значением. Я часто видел, что мое офисное здание сообщает, что оно движется на высоте от -200 до +750 метров. Одна из основополагающих причин состоит в том, что невозможно достичь равномерного распространения спутников в направлении высоты; они всегда будут над вами, и если на низких высотах будет какое-то затенение неба, они будут расположены в конусе над вами. В направлениях X и Y всегда, при условии хорошего обзора неба, спутники распространяются влево и вправо; спереди и сзади приемника. Этот разброс повышает точность решения положения.

+0

«-200 до +750 метров»: я не верю ни на секунду, что приемники GPS являются неточными с высотой, если только такие изменения не соответствуют точности измерения, но даже это кажется неправдоподобным. –

+0

Для настенной антенны (скрытой более чем на 50% от неба) в определенное время суток, когда видимое созвездие имеет неблагоприятную геометрию и выполняет холодный старт (т. Е. Враждебные условия эксплуатации), это типичные крайности, которые я видел. Эти значения были замечены с SiRFStar-2, SiRFStar-3, Ublox 5 и Ublox 6. Как правило, высота будет расти до +/- 75 метров через несколько минут непрерывной работы. –

5

Это не совсем так - Android API либо изменил, либо имеет ошибки. У меня есть два Android-устройства - «общий» телефон (Android 2.3.6) и Nexus 7 (Android 4.x).

По телефону getAltitude() дает ответ, соответствующий моей фактической высоте AMSL (т. Е. Исправлено для geoid). На Nexus 7 возвращаемая высота не исправлена. В документации для API не указывается, что возвращается, поэтому в некотором смысле оба являются «правильными».

Оба устройства, похоже, имеют достойный GPS modules - сообщение $GPGGA NMEA показывает как правильный альтимат, так и коррекцию геоида. Поэтому кажется, что нужно разбирать сообщения, чтобы получить правильную высоту, а метод getAltitude() недостоверен.

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

  • Нет связанных вопросов^_^