1. ホーム
  2. android

[解決済み] 地理的な2地点間の距離計算

2023-07-21 12:34:59

質問

この状況について、何かヒントをください。

今、私は近くの場所の緯度と経度を持つ2つの配列を持っており、また、ユーザーの位置の緯度と経度を持っています。

私は、次のように距離を計算するためのメソッドがあることを知っています。

public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results);

さて、問題はこのメソッドに緯度と経度を持つ2つの配列を渡し、距離の配列を取得する方法です。

どのように解決するのでしょうか?

http://developer.android.com/reference/android/location/Location.html

距離を調べるTo

この場所と指定された場所との間のおおよその距離をメートル単位で返します。 をメートル単位で返します。距離はWGS84楕円体を使用して定義されます。

またはdistanceBetween

<ブロッククオート

2つの地点間のおおよその距離をメートル単位で計算します。 オプションで、その間の最短パスの初期および最終の方位を計算します。 を計算します。距離と方位はWGS84楕円体を使用して定義されます。

緯度と経度からLocationオブジェクトを作成することができます。

Location locationA = new Location("point A");

locationA.setLatitude(latA);
locationA.setLongitude(lngA);

Location locationB = new Location("point B");

locationB.setLatitude(latB);
locationB.setLongitude(lngB);

float distance = locationA.distanceTo(locationB);

または

private double meterDistanceBetweenPoints(float lat_a, float lng_a, float lat_b, float lng_b) {
    float pk = (float) (180.f/Math.PI);

    float a1 = lat_a / pk;
    float a2 = lng_a / pk;
    float b1 = lat_b / pk;
    float b2 = lng_b / pk;

    double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2);
    double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2);
    double t3 = Math.sin(a1) * Math.sin(b1);
    double tt = Math.acos(t1 + t2 + t3);
   
    return 6366000 * tt;
}