質問

こんにちは

シンプルなGPSトラッカーを実装しようとしました。したがって、使用されます

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

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

public void onLocationChanged(Location location) {

現在の場所の高度を読む方法。

しかし、私は実際にどの場所をどのような場所にも知りません。ドキュメントには、高度が返されると述べています。しかし、これはメートルですか?またはfeets?隣の机に電話をかけると、この値は500〜 -500の間で変化しますか?

これは本当にうまくいきますか?

役に立ちましたか?

解決

あなたが得る高度値はメートルからです GPS(WGS84) 参照楕円体 からではありません ジオイド.

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

私はこれを読みました GPSステータス よくある質問:

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

他のヒント

古い投稿、私はレコンですが、誰かがまだ興味があるかもしれません。 GPSを聞いている間、NMEA GPGGA文を解析できます(http://aprs.gids.nl/nmea/#gga)、ジオイドの高さ(WGS84楕円体の上のジオイドの高さ)があります。 GetAltitude Returned Valueからこの重量を1つだけ減算すると、より正確な標高値が得られます。

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

より良い解決策は、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();
        }
    } 
}

私はあなたの机が建物の中にあると思います。建物でGPSの修正を取得した場合、精度が非常に高いとは思わないはずです。 getAccuracy()を呼び出すことで、修正の精度を取得しようとしましたか?

GPSは、既知の信号がいくつかの衛星から送信される時間を単に測定します。 GPSレシーバーを考慮した衛星が多いほど、より正確な位置は、それらの衛星に比べて決定されます。システムはエラーとバックグラウンドノイズ(衛星信号は比較的弱く、スペースは比較的ノイズがあります)、レシーバーの低精度のピース、GDOP:精度の幾何学的溶解(空の片隅にグループ化されたすべての衛星)、イオノスフィアの高さの変化による信号の屈折 - 全体として、衛星からの距離を決定するのは非常に正確です。幾何学的には、位置を取得するには少なくとも3つの衛星が必要です。より多くの衛星がより大きな精度に貢献し、いくつかのより複雑なレシーバー(当社の電話ではなく、具体的には航空アプリケーション)RAIM:レシーバーの自律整合性監視は、航空機が着陸する前のエリアと時間の正確性を予測するために提供されます...

地球は数学定数で曲がることはないため、GPSシステムの高度は問題です。したがって、システムはあなたが衛星に関連している場所を知っていますが、地球の数学モデルとそれをオーバーレイする必要があります。航空では、より正確なGPSレシーバーには、既知の調査されたポイント比較(WAASとLAA)のために、バロメーターと一部のレシーバーの強化された位置で高度が補充されている必要があります。

これは、LocationManager.network_providerのようなロケーションプロバイダーのようなものを使用する場合に発生し、locationmanager.gps_providerをお気に入りのGPSプロバイダーのように使用してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top