I have a problem calculating the distance between two geopoints.
The geopoints are:
position1 = mapView.getProjection().fromPixels(
(int) e.getX(),
(int) e.getY());
and the other one
double lat = 35.1064;
double lng = 22.556412;
GeoPoint position2 = new GeoPoint((int)(lat * 1E6), (int)(lng * 1E6));
Then I create two locations:
Location loc = new Location("");
loc.setLatitude(position1.getLatitudeE6());
loc.setLongitude(position1.getLongitudeE6());
Location loc2 = new Location("");
loc.setLatitude(position2.getLatitudeE6());
loc.setLongitude(position2.getLongitudeE6());
And then I calculate the distance:
float distance = loc.distanceTo(loc2);
and I round it:
Math.round(distance);
But I get results like:
1.4331783E7
What am I doing wrong?
try following my method,
/**
*
* @param lat1 Latitude of the First Location
* @param lng1 Logitude of the First Location
* @param lat2 Latitude of the Second Location
* @param lng2 Longitude of the Second Location
* @return distance between two lat-lon in float format
*/
public static float distFrom (float lat1, float lng1, float lat2, float lng2 )
{
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
int meterConversion = 1609;
return new Float(dist * meterConversion).floatValue();
}
You are taking wrong latitude and longitudes, please replace the following lines
Location loc = new Location("");
loc.setLatitude(position1.getLatitudeE6());
loc.setLongitude(position1.getLongitudeE6());
Location loc2 = new Location("");
loc.setLatitude(position2.getLatitudeE6());
loc.setLongitude(position2.getLongitudeE6());
with
Location loc = new Location("");
loc.setLatitude(position1.getLatitudeE6()/1E6);
loc.setLongitude(position1.getLongitudeE6()/1E6);
Location loc2 = new Location("");
loc.setLatitude(position2.getLatitudeE6()/1E6);
loc.setLongitude(position2.getLongitudeE6()/1E6);
and then once, you will get correct answer.
you are set the GeoPoint value into the Location object instead of double value try to set as double value of Latitude and Longitude
Location loc = new Location("");
loc.setLatitude(35.1064);
loc.setLongitude(22.556412);
Location loc2 = new Location("");
loc2.setLatitude(22.556412);
loc2.setLongitude(35.1064);
now get the location
float distance = loc.distanceTo(loc2);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.