Find distance between two points on map using Google Map API V2
Coming rather late, but seeing that this is one of the top results on Google search for the topic I'll share another way:
Use a one-liner with Googles utility class SphericalUtil
SphericalUtil.computeDistanceBetween(latLngFrom, latLngTo)
You will need the utility classes.
You can simply include them in your project using gradle:
implementation 'com.google.maps.android:android-maps-utils:0.5+'
You can use the following method that will give you accurate result
public double CalculationByDistance(LatLng StartP, LatLng EndP) {
int Radius = 6371;// radius of earth in Km
double lat1 = StartP.latitude;
double lat2 = EndP.latitude;
double lon1 = StartP.longitude;
double lon2 = EndP.longitude;
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
* Math.sin(dLon / 2);
double c = 2 * Math.asin(Math.sqrt(a));
double valueResult = Radius * c;
double km = valueResult / 1;
DecimalFormat newFormat = new DecimalFormat("####");
int kmInDec = Integer.valueOf(newFormat.format(km));
double meter = valueResult % 1000;
int meterInDec = Integer.valueOf(newFormat.format(meter));
Log.i("Radius Value", "" + valueResult + " KM " + kmInDec
+ " Meter " + meterInDec);
return Radius * c;
}
You should use the android Location
You can do:
location1.distanceTo(location2);
And also:
float[] results = new float[1];
Location.distanceBetween(latLongA.latitude, latLongA.longitude,
latLongB.latitude, latLongB.longitude,
results);
And you will get the distance in meters between location1 and location2 in meters. And beetween latLongA ant latLongB.
Using location.
In Google Map API V2
You have LatLng
objects so you can't use distanceTo
(yet).
You can then use the following code considering oldPosition and newPosition are LatLng
objects :
// The computed distance is stored in results[0].
//If results has length 2 or greater, the initial bearing is stored in results[1].
//If results has length 3 or greater, the final bearing is stored in results[2].
float[] results = new float[1];
Location.distanceBetween(oldPosition.latitude, oldPosition.longitude,
newPosition.latitude, newPosition.longitude, results);
For more informations about the Location
class see this link