7

こんにちは

簡単なGPSトラッカーを実装してみました。したがって、使用されます

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);  

それから私は使用しました

public void onLocationChanged(Location location) {

私の現在地の高度を読み取る方法。

しかし、Location.getAltitude()が何を返すのか本当にわかりません。ドキュメントには、高度が返されると書かれています。しかし、これはメートル単位ですか?または足?電話を隣の机に置くと、この値は500から-500の間で変化しますか?

これは実際にどのように機能しますか?

4

5 に答える 5

25

取得する高度値は、ジオイドからではなく、gps(WGS84) 準拠楕円体からのメートル単位です。

私自身の経験から、GPSは高度値で本当に悪いです。

GPSステータスFAQでこれを読みました:

GPSは平均海面より上の高さを報告しませんが、GPSシステムは、実際の海面より上または下にある可能性のあるWGS84準拠楕円体と高さを比較します。地球のさまざまな部分で、200メートル以上離れている可能性があります(地球の質量分布によって異なります)。たとえば、フロリダ周辺のジオイドの表面は、平均海面より30〜40メートル上にあります。つまり、海岸に立つと、高度が-30メートルになります。これは正常であり、エラーではなく、高度が海面ではなく人工の基準面を基準にしているという事実が原因です。このトピックに興味がある場合は、平均海面、GPS、およびジオイドを読むことをお勧めします。

于 2010-05-09T08:05:09.917 に答える
6

古い投稿だと思いますが、誰かがまだ興味を持っているかもしれません。GPSを聴きながら、ジオイドの高さ(WGS84楕円体より上のジオイドの高さ)があるNMEA GPGGAセンテンス(http://aprs.gids.nl/nmea/#gga )を解析できます。getAltitudeの戻り値からこの高さを引くだけで、より正確な標高値が得られます。

私のアプリのユーザーから受け取った数ヶ月の使用とフィードバックの後に編集

より良い解決策は、GPGGAセンテンスの標高値を直接取得することです。

double GGA_ALTITUDE = 0d;
private static final String NMEA_GGA = "$GPGGA";    
private static final int altitude_element_id = 9;

@Override
public void onNmeaReceived(long timestamp, String nmea) {
    foundSats = true;
    // check that this is an RMC string
    if (nmea.startsWith(NMEA_GGA)) {
        String[] tokens = nmea.split(",");
        try {
            // get orthometric elevation
            String elevation = tokens[altitude_element_id];             
            if (!elevation.equals("")) {
                Log.d("NMEA", "ortho elev: " + ortho);
                GGA_ALTITUDE = Double.parseDouble(elevation);                   
            }
        } catch (Exception ex) {
            Log.e("NMEA", "onNmeaReceived: "
                    + ex.getMessage());

            onNmeaException(ex.getMessage());               
            ex.printStackTrace();
        }
    } 
}
于 2013-06-06T13:10:22.993 に答える
1

あなたの机は建物の中にあると思います。建物でGPS修正を取得した場合、精度が非常に高くなることを期待するべきではありません。getAccuracy()を呼び出して、修正の精度を取得しようとする必要がありますか?

于 2010-05-09T07:30:17.453 に答える
1

GPSは、既知の信号が複数の衛星から送信される時間を測定するだけです。Gps受信機から見た衛星の数が多いほど、それらの衛星との相対的な位置がより正確に決定されます。システムはエラーバックグラウンドノイズ(衛星信号が比較的弱く、空間が比較的ノイズが多い)を起こしやすい一方で、受信機の低精度時計、GDOP:精度の幾何学的希釈(すべての衛星が空の隅にグループ化されている)、イオノスフィアの高さの変化による信号の屈折-全体として、衛星からの距離を決定する際に非常に正確です。幾何学的には、位置を取得するには少なくとも3つの衛星が必要であり、高度を取得するには4つ目の衛星が必要です。より多くの衛星はより高い精度に貢献し、いくつかのより複雑な受信機(私たちの電話ではなく、特に航空アプリケーション)でRAIM:

地球は数学定数で湾曲しないため、高度はGPSシステムにとって問題があります。したがって、システムは衛星との相対位置を認識していますが、地球の数学モデルにそれをオーバーレイする必要があります。航空では、より正確なGps受信機は気圧計で高度を補う必要があり、一部の受信機では、既知の測量ポイント比較(WAASおよびLAAS)により位置が強化されている必要があります。

于 2014-05-14T14:26:33.513 に答える
0

これは、ロケーションプロバイダーのようにLocationManager.NETWORK_PROVIDERを使用する場合に発生します。必ず、お気に入りのGpsプロバイダーのようにLocationManager.GPS_PROVIDERを使用してください。

于 2016-10-10T20:28:36.793 に答える