0

アプリケーションで 2 つの GEO ロケーションを取得しており、それらの間の距離を計算する必要があります。距離の計算後、その結果を定義済みのしきい値と比較する必要があり50 metersます。また、現在、私のAndroidフォンは同じ場所にありますが、間隔を置いて決定された2つの2つのジオロケーション間の計算距離は常に50メートルを超えています。それはどのように可能ですか?私は50メートルのしきい値を次のように取っています:

private static final float DISTANCE_CHANGE_METERS = 50.0f; //50 meters

そして、StackOverflowで見つけた次の式で距離を計算しています:

public static float distFrom(double lat1, double lng1, double lat2, double lng2) {

    double earthRadius = 3958.75;
    double dLat = Math.toRadians(lat2 - lat1);
    double dLng = Math.toRadians(lng2 - lng1);
    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double dist = earthRadius * c;

    int meterConversion = 1609;

    return new Float(dist * meterConversion).floatValue();
}

この点で私を助けてください。ありがとう!

4

2 に答える 2

0

Currently my android phone is at the same location, but I always get the calculated distance between my 2 two geolocations determined after an interval to be more than 50 meters. How is that possible?

実際には、緯度と経度をdistFrom関数に渡す方法によって異なります。距離を計算する簡単な方法があることを思い出してください。次のように、 Android APIで関数
だけを使用して、2 つの場所の間の距離を計算できます。distanceTo()Location

Location locationA = new Location("point A");
locationA.setLatitude(latA); // co-ordinates in double
locationA.setLongitude(lngA);

Location locationB = new Location("point B");
locationB.setLatitude(latB);
locationB.setLongitude(lngB);

float distance = locationA.distanceTo(locationB);

これも使用した後、50 メートルを超える距離を取得している場合、提供している座標はそれほど正確ではありません。50メートル未満の精度で正確さを得るのは難しいため、完全に問題ありません。GPS と一緒にインターネットを使用している場合は、最も正確です。ここを見ればACCURACY_HIGH、選ぶ基準として使ってもLocation Provider、100メートル未満の精度を提供します。100、70、または 50 メートルまで正確に測定できます。そのため、最も正確なオプションでさえ、極端な精度が保証されるわけではありません。位置情報を取得するために GPS/ネットワーク プロバイダーを使用している場合は、その可能性が非常に高くなります。`Network Provider1 を使用して位置を取得することも、物理的に離れている可能性がある 2 つのネットワーク タワーの信号を異なる場合にキャッチできるため、それほど正確ではありません。

それが助けになり、ポイントをある程度クリアすることを願っています。ロケーションプロバイダーの精度の問題です。

于 2013-05-28T07:14:00.863 に答える
0

あなたはただできるでしょうか:

if (distFrom(lat1,lng1,lat2,lng2) > DISTANCE_CHANGE_METERS)
{
    //greater than threshhold
}
于 2013-05-28T06:58:25.747 に答える