1

私は私のAndroid携帯電話の一定の位置の更新を必要とするプロジェクトに取り組んでいます。それは問題なく動作しますが、非常に不正確です。屋内では、(getAccuracy()を介して)フェッチされた場所の精度を約60(私が知る限りメートル単位)にしていますが、精度を(最大で)2〜3メートルにしたいのです。まず、(2〜3メートル)の精度を常に得ることはできませんか?はいの場合、どのように?

以下は、ユーザーの場所を取得するために使用しているコード部分です。

    public boolean getLocation(Context context, LocationResult result)
{
    //I use LocationResult callback class to pass location value from MyLocation to user code.
        locationResult = result;

    if(lm==null)
        lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    //exceptions will be thrown if provider is not permitted.
    try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
    try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}

    //don't start listeners if no provider is enabled
    if(!gps_enabled && !network_enabled)
        return false;

    if(gps_enabled)
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
    if(network_enabled)
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
    timer1=new Timer();
    timer1.schedule(new GetLastLocation(), 10000);
    return true;
}

また、デバイスが常に静的な場所に配置されているという別の問題が発生していました。取得された2つの連続するGPS位置間の距離は非常に信頼性が低く、0.0メートルから16メートルに変化します。これは、デバイスが常に移動していることを意味します。

誰かがこれについて、できれば正確さを達成する方法について何か考えがあれば、私を助けてください。

ありがとう

4

3 に答える 3

2

mintimeとmindistanceだけを使用する代わりに、Criteriaオブジェクトを次のように渡すことでより良い結果が得られる場合があります。

ACCURACY_FINE
POWER_HIGH

あなたの個々の電話と物理的な環境は明らかに測定値に影響を与えます。次の呼び出しと基準で正確なロケーションプロバイダーを指定しないことで、システムが作業の一部を実行できるように、全体的に良い結果が得られる可能性があります。

http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long、float、android.location.Criteria、android.location.LocationListener、android.os.Looper

于 2012-08-10T04:12:39.017 に答える
1

屋内でGPSを使用して2〜3mの精度を得るのは基本的に不可能です。

GPSは衛星までの適度に明確なサイトラインを必要とするため、屋内に行くほど精度が低下します。

屋内での位置を特定するために、AndroidはGPSを使用してから、周囲のWIFIアクセスポイントの既知の位置を使用して三角測量を行い、次にセルタワーの三角測量を試みます。おそらくこれら3つを組み合わせて、より正確な推測を提供します。

屋内の場所を正確に特定するには、Googleが認識している場所にかなりの数のWIFIアクセスポイントを設置する必要があります。私は彼らが屋内ショッピングモールのナビゲーションをどのように行っているかをかなり確信しています。

精度を向上させる(または不正確な読み取り値を破棄する)ために使用できる他のトリックは、加速度計(またはジャイロなど)からデータを読み取り、それらの読み取り値を使用して、デバイスが動いていないとき、または速度を判断することです。それは特定の方向に動いています。これらの手法を使用するものはすべて、実装するのがかなり難しい可能性があります。

于 2012-08-10T04:53:23.350 に答える
1

ポークの答えに基づいて、更新頻度に柔軟性がある場合は、上記の場合(精度が可変のサンプル)の分散を少し減らすことができます。希望の頻度を0.1Hz(10秒ごとに更新)で定義すると、最後の10秒のサンプルセットから「最適な」場所でのみ操作することにより、場所の更新をフィルタリングできます。「最良」を決定する簡単な方法は、最高の精度評価を持つセットからサンプルを返すことです。同じ精度評価のサンプルが複数ある場合は、最新のものを返します。もう1つできることは、特定のセットのすべてのサンプルを一緒に平均化するか、同じ精度ですべてのサンプルを平均化することです。これは、GPSエラーの幾何学的な性質のために全体的な精度を向上させることはありませんが、分散を減らします。最小エラーを増やすことで、最大エラーを減らすことができます。また、デバイスが動いている場合には、多少のラグ効果が発生します。これは、アプリケーションによっては問題になる場合とそうでない場合があります。

于 2012-08-10T04:41:24.950 に答える