Comparing Two Locations Using Their Longitude And Latitude
Hi i need to cal an event at onchangelocation(), by comparing current latitude and longitude with some saved latitude and longitude but i m getting an error. eclipse is not recogn
Solution 1:
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
publicvoidonLocationChanged(Location location){
double lat2 = location.getLatitude();
double lng2 = location.getLongitude();
// lat1 and lng1 are the values of a previously stored locationif (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 */privatedoubledistance(double lat1, double lng1, double lat2, double lng2){
double earthRadius = 3958.75; // in miles, change to 6371 for kilometer outputdouble 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:
privatefundistance(lat1: Double, lng1: Double, lat2: Double, lng2: Double): Double {
val earthRadius = 3958.75// in miles, change to 6371 for kilometer outputval 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
}
Solution 2:
You can use the Location
class's static distanceBetween()
method like so:
import android.location.Location
float[] distance = newfloat[1];
Location.distanceBetween(lat, lon, currentLat, currentLon, distance);
// distance[0] is now the distance between these lat/lons in metersif (distance[0] < 2.0) {
// your code...
}
If you have two Location
objects, another option is distanceTo()
Solution 3:
All the 4 input parameters are in float. Distance is a relative one not real distance. You need to convert this distance to a real distance by searching some formula online :( I used this in my app to get nearest metro station from my current location. Hope this snippet helps someone :)
floatdistance(float lat,float lon,float clat,float clon){
float distance;
float temp1;
float temp2;
temp1=(float)((lat-clat)*(lat-clat));
temp2=(float)((lon-clon)*(lon-clon));
distance=temp1+temp2;
return distance;
}
Post a Comment for "Comparing Two Locations Using Their Longitude And Latitude"