私はarray
別のを含んでいますlocations' addresses
。ユーザーの現在の場所も取得しました。
配列内のすべての場所から、ある場所を見つけたいと思いますnearest
。全体を比較するLat-Long
のもひとつの方法ですが、他に方法はありますか?
注:アドレスをnot performing nearby location search
取得する必要があります。すでに配列に格納されていると仮定してください。
私はarray
別のを含んでいますlocations' addresses
。ユーザーの現在の場所も取得しました。
配列内のすべての場所から、ある場所を見つけたいと思いますnearest
。全体を比較するLat-Long
のもひとつの方法ですが、他に方法はありますか?
注:アドレスをnot performing nearby location search
取得する必要があります。すでに配列に格納されていると仮定してください。
Locationを使用して、2 つの住所間の距離を特定できます。
private static float distance(LatLng current, LatLng last){
if(last==null)
return 0;
Location cL = new Location("");
cL.setLatitude(current.latitude);
cL.setLongitude(current.longitude);
Location lL = new Location("");
lL.setLatitude(last.latitude);
lL.setLongitude(last.longitude);
return lL.distanceTo(cL);
}
実際の最寄りの場所が必要な場合は、 を使用しますLocation.distanceBetween
。
多くの場所があり、コードをより高速に実行する必要がある場合は、次の式を使用することをお勧めします。
double diffLat = Math.abs(lat1 - lat2);
double diffLng = Math.abs(lng1 - lng2);
if (diffLng > 180) {
diffLng = 360 - diffLng;
}
double distanceSquared = diffLat * diffLat + diffLng * diffLng;
これは (ほぼ) 最も近い場所を見つけるために必要ないため、平方根を計算しないでください。二乗値を比較するだけです。
が存在するのif
は、経度が -179 と +179 の場所があり、これらが互いに近接しているからです。
データによっては、並べ替えられたデータに対して二分探索のアルゴリズムを試すこともできますが、ここには 2 つの次元があるため、 sorted で検索するほど簡単ではありませint
んint[]
。