You actually need to implement a function called distance that will calculate the distance between two locations. Calculating the distance between two locations is one possible way of comparing the longitude and latitude values.
An example of comparing them:
@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
}
And in Kotlin:
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
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…