実際には、2 つの場所の間の距離を計算する distance という関数を実装する必要があります。2 つの場所の間の距離を計算することは、経度と緯度の値を比較する方法の 1 つです。
それらを比較する例:
@Override
public void onLocationChanged(Location location) {
double lat2 = location.getLatitude();
double lng2 = location.getLongitude();
// lat1 and lng1 are the values of a previously stored location
if (distance(lat1, lng1, lat2, lng2) < 0.1) { // if distance < 0.1 miles we take locations as equal
//do what you want to do...
}
}
/** calculates the distance between two locations in MILES */
private double distance(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75; // in miles, change to 6371 for kilometer output
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
* Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist; // output distance, in MILES
}
そしてコトリンでは:
private fun distance(lat1: Double, lng1: Double, lat2: Double, lng2: Double): Double {
val earthRadius = 3958.75 // in miles, change to 6371 for kilometer output
val dLat = Math.toRadians(lat2 - lat1)
val dLng = Math.toRadians(lng2 - lng1)
val sindLat = sin(dLat / 2)
val sindLng = sin(dLng / 2)
val a = sindLat.pow(2.0) +
(sindLng.pow(2.0) * cos(Math.toRadians(lat1)) * cos(Math.toRadians(lat2)))
val c = 2 * atan2(sqrt(a), sqrt(1 - a))
return earthRadius * c // output distance, in MILES
}