Distance between geotomes

I have a problem calculating the distance between two geotomes.

Geodetic points:

position1 = mapView.getProjection().fromPixels( (int) e.getX(), (int) e.getY()); 

and the other

 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 will round it:

 Math.round(distance); 

But I get results like:

1.4331783E7

What am I doing wrong?

+6
source share
3 answers

try to execute 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(); } 
+9
source

You accept the wrong latitude and longitude, 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()); 

from

 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 the correct answer.

+1
source

you set the GeoPoint value in the Location object instead of a double value, try setting the Latitude and Longitude value as a double value

 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); 
0
source

Source: https://habr.com/ru/post/905076/


All Articles