0

ルートを追跡するためのアプリケーションを作成しています。GPS から毎分更新を要求していますが、問題なく動作しています。それは私の正確なポイントを示しています。現在のポイントと前のポイントの間の距離を計算したい場合は問題なく動作しますが、時々、距離が完全に間違って計算されます (約 200m 移動したところ、10km を超える値が返されました)。なぜこれが起こるのか誰にも分かりますか?

これが私が使用する機能です:

iRoute += myGPSLocation.distanceTo(prevLocation);

前もって感謝します!

4

2 に答える 2

1

Google の Location.distance between & location.distanceto 関数の使用を停止します。それらは一貫して機能しません。

代わりに、直接式を使用して距離を計算します。

double distance_between(Location l1, Location l2)
{
    //float results[] = new float[1];
    /* Doesn't work. returns inconsistent results
    Location.distanceBetween(
            l1.getLatitude(),
            l1.getLongitude(),
            l2.getLatitude(),
            l2.getLongitude(),
            results);
            */
    double lat1=l1.getLatitude();
    double lon1=l1.getLongitude();
    double lat2=l2.getLatitude();
    double lon2=l2.getLongitude();
    double R = 6371; // km
    double dLat = (lat2-lat1)*Math.PI/180;
    double dLon = (lon2-lon1)*Math.PI/180;
    lat1 = lat1*Math.PI/180;
    lat2 = lat2*Math.PI/180;

    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    double d = R * c * 1000;

    log_write("dist betn "+
            d + " " +
            l1.getLatitude()+ " " +
            l1.getLongitude() + " " +
            l2.getLatitude() + " " +
            l2.getLongitude()
            );

    return d;
}
于 2014-01-20T14:43:16.790 に答える
1

distanceTo() は正しく機能します。
エラーはあなたの側にあり、最も可能性の高いアルゴリズムのエラーです。たとえば、利用可能な GPS 修正がなく、電話が GSM セルベースの場所を取得する場合、これはもちろん 1000m ずれている可能性があります。

おそらく移動距離を合計したいアプリの場合は、GPS 修正のみを使用し、GPS 以外の LocationProvider を使用しないでください。

于 2013-08-22T15:02:35.443 に答える