Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo encontrar la distancia entre dos geopuntos?

double distance; Location locationA = new Location("point A"); locationA.setLatitude(latA); locationA.setLongitude(lngA); Location locationB = new Location("point B"); locationB.setLatitude(latB); LocationB.setLongitude(lngB); distance = locationA.distanceTo(locationB); 

El código anterior no está funcionando y estoy recibiendo 0,0 Km como distancia? También en el constructor de la clase de ubicación, ¿qué significa el proveedor de cadena. En el código anterior estoy usando PointA y PointB como los proveedores.

¿Por qué el código anterior no funciona?

gracias de antemano.

LOGCAT 05-09 17: 48: 56.144: INFO / loc actual (1573): lat 0.0 lng 0.0 05-09 17: 48: 56.155: INFO / checklocation loc (1573): lat 54.4288665 lng 10.169366

6 Solutions collect form web for “Cómo encontrar la distancia entre dos geopuntos?”

Pruebe la ubicación.distancia Entre (..)

Actualizar:

Si usted está recibiendo lat / lon de GeoPoint entonces están en microdegrees. Debes multiplicar por 1e6.

Sólo un fragmento rápido ya que no vi una solución completa y simple con GeoPoints arriba:

 public float getDistanceInMiles(GeoPoint p1, GeoPoint p2) { double lat1 = ((double)p1.getLatitudeE6()) / 1e6; double lng1 = ((double)p1.getLongitudeE6()) / 1e6; double lat2 = ((double)p2.getLatitudeE6()) / 1e6; double lng2 = ((double)p2.getLongitudeE6()) / 1e6; float [] dist = new float[1]; Location.distanceBetween(lat1, lng1, lat2, lng2, dist); return dist[0] * 0.000621371192f; } 

Si desea metros, simplemente devuelva dist [0] directamente.

Como se indicó anteriormente, la clase de ubicación es el camino a seguir. Aquí está el código que he usado:

 Location locationA = new Location("point A"); locationA.setLatitude(pointA.getLatitudeE6() / 1E6); locationA.setLongitude(pointA.getLongitudeE6() / 1E6); Location locationB = new Location("point B"); locationB.setLatitude(pointB.getLatitudeE6() / 1E6); locationB.setLongitude(pointB.getLongitudeE6() / 1E6); double distance = locationA.distanceTo(locationB); 

En este ejemplo, tanto pointA como pointB son instancias de la clase GeoPoint.

Esto no es una respuesta, pero tenga en cuenta que la firma del constructor Location(String provider) es Location(String provider) .

Es decir, la cadena que pasa al constructor debe ser una de LocationManager.GPS_PROVIDER , LocationManager.NETWORK_PROVIDER o LocationManager.PASSIVE_PROVIDER , no "point A" y "point B" .

Una manera alternativa de lograr lo anterior,

  public class Distance { public static double distance(double lat1, double lon1, double lat2, double lon2) { double theta = lon1 - lon2; double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); dist = Math.acos(dist); dist = rad2deg(dist); dist = dist * 60 * 1.1515; //if (unit == "K") { // dist = dist * 1.609344; // else if (unit == "N") { //dist = dist * 0.8684; //} return (dist); } public static final double PI = 3.14159265; public static final double deg2radians = PI/180.0; public static double getDistance(double latitude1, double longitude1, double latitude2,double longitude2) { double lat1 = latitude1 * deg2radians; double lat2 = latitude2 * deg2radians; double lon1 = longitude1 * deg2radians; double lon2 = longitude2 * deg2radians; // Williams gives two formulae; // this is the more accurate for close distances. // In practice, the two differed only in the 8th or 9th place, for // separations as small as 1 degree. double radd = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin((lat1 - lat2) / 2), 2.0) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin((lon1 - lon2) / 2), 2.0))); return radd; } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* :: This function converts decimal degrees to radians : */ /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ private static double deg2rad(double deg) { return (deg * Math.PI / 180.0); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* :: This function converts radians to decimal degrees : */ /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ private static double rad2deg(double rad) { return (rad * 180.0 / Math.PI); } } 
 double CalculateDistance( double nLat1, double nLon1, double nLat2, double nLon2 ) { double nRadius = 6371; // Earth's radius in Kilometers // Get the difference between our two points // then convert the difference into radians double nDLat = ToRad(nLat2 - nLat1); double nDLon = ToRad(nLon2 - nLon1); // Here is the new line nLat1 = ToRad(nLat1); nLat2 = ToRad(nLat2); double nA = pow ( sin(nDLat/2), 2 ) + cos(nLat1) * cos(nLat2) * pow ( sin(nDLon/2), 2 ); double nC = 2 * atan2( sqrt(nA), sqrt( 1 - nA )); double nD = nRadius * nC; return nD; // Return our calculated distance } 

http://www.jaimerios.com/?p=39

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.