8

Android Galaxy S5 携帯電話の気圧計センサーに基づいて正しい高度を取得する機能を実装しようとしています。唯一の問題は、それが正確だとは思わないことです。私の特定の場所のhttp://www.whatismyelevation.comに基づくと、私の高度は約 114 メートルであることがわかります。しかし、私の携帯電話では、気圧計センサーに基づいて 210 メートルであることが示されています。とはいえ、私は高い建物にいますが、高さ 100 メートルではないと思います。

これが私の簡単なコードです:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.configure_settings);
    context = getApplicationContext();

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensors = mSensorManager.getSensorList(Sensor.TYPE_PRESSURE);

    if (sensors.size() > 0)
    {
        sensor = sensors.get(0);
        mSensorManager.registerListener(this, sensor,
                SensorManager.SENSOR_DELAY_NORMAL);
    }

}

@Override
public void onSensorChanged(SensorEvent event)
{
    float pressure = event.values[0];
    altitude = String.valueOf(SensorManager.getAltitude(
            SensorManager.PRESSURE_STANDARD_ATMOSPHERE, pressure));

}

ありがとう!

4

3 に答える 3

6

まず、気圧計は非常に正確ですが、正確ではありません。テーブルの上に 10 台の Android スマートフォンを並べて配置すると、デバイス間で最大 3 mb の気圧差が見られます。これがエラーの原因の 1 つです。

2 つ目: グループによって「高度」の定義が異なるため、同じ定義を使用していることを確認してください。たとえば、Location クラスでは、getAltitude は次のように定義されます。

WGS 84 参照楕円体からのメートル単位で、利用可能な場合は高度を取得します。

http://developer.android.com/reference/android/location/Location.html#getAltitude()

第三に、天候は気圧計の読み取り値に最大 40 mb の影響を与えます。気圧計からより正確な高度を取得したい場合は、現在の天気からオフセットする必要があります。大気圧は、1 時間あたり最大 1 ~ 2 ミリバール (極端な場合) 局所的な圧力を変化させる可能性があります。

第 4 に、スマートフォンの気圧計を使用して完全に正確な高度を読み取ることはまだ不可能です。これはまだ誰も解決していません。たとえば、気圧計だけでは床レベルの検出には不十分です。

ちなみに、私はPressureNetの開発者です。スマートフォンから 20 億件以上の圧力測定値を収集しており、これらすべての種類のエラーを毎日目にしています。

最後に: 「高度」の値を取得したい場合は、気圧計が提供する読み取り値を使用する前に、かなりの解釈が必要です。すべてのバロメーターから読み取られるすべての値は、デフォルトでは「間違っています」。正確なニーズに応じて、それを機能させるために特定の作業を行う必要があります。

github.com/cbsoftware/pressurenet

于 2015-07-21T20:30:39.957 に答える