読者です 読者をやめる 読者になる 読者になる

しろかい!

アプリ開発や機械学習などの開発Tips.

【Android】2点間の距離を求めるLocation#distanceBetween

Androidアプリ開発において,2点間の距離を求めるにはLocation#distanceBetweenメソッドを使用します.
が,このメソッドは距離の受け取り方が若干特殊でハマりました^^;
というわけでメモを残しておきます.

2点間の距離を求めるメソッド

2点間の距離を求めるには,Location#distanceBetween()メソッドを使用します.
下記のサンプルのように使用します.

// 始点と終点を指定
double startLatitude = 40.0;
double startLongitude = 135.0;
double endLatitude = 40.1;
double endLongitude = 135.5;

// 結果を格納するための配列を生成
float[] results = new float[3];

// 距離計算
Location.distanceBetween(startLatitude, startLongitude, endLatitude, endLongitude, results);

// 結果を表示
Log.v("TEST", "results[0]: " + results[0]); // 距離(メートル)
Log.v("TEST", "results[1]: " + results[1]); // 始点から終点までの方位角
Log.v("TEST", "results[2]: " + results[2]); // 終点から始点までの方位角

上記サンプルを実行すると,logcatに以下の表に表示されます.

V/TEST﹕ result[0]: 56124.895
V/TEST﹕ result[1]: 8.146392
V/TEST﹕ result[2]: 8.07599

メソッド自身は返り値を持たない

注意したいのは,メソッド自身は返り値を持たないということです. つまり,以下のような書き方はできません.

// この書き方はNG
float distance = Location.distanceBetween(startLatitude, startLongitude, endLatitude, endLongitude, results);

じゃあどこから距離を取得するのかといえば,results[]という第5引数からになります.

results 中身
results[0] 距離(メートル)
results[1] 始点から終点までの方位角
results[2] 終点から始点までの方位角

このため,予めresults[]配列を生成しておく必要があります.
サイズは3にしておくのが無難です.
(もし,1にした場合は距離だけを取得できる)

ちょっとややこしいですが,使い方自体は簡単なメソッドですね!

参考
Android Developpers: Location.distanceBetween()