2012-07-02 16 views
5

Necesito desarrollar una aplicación donde el usuario tenga que ubicar el automóvil que ha estacionado y mostrar la distancia entre él y el automóvil estacionado. Utilicé servicios de localización y GPS.cómo encontrar la distancia correcta entre dos geopoints en el mapa?

Para distancia utilicé haversine fórmula pero la distancia siempre muestra 0 metros.

Probé mucho buscando soluciones en google pero no obtuve ninguna solución correcta.

¿Alguien puede dar sus sugerencias?

+0

duplicado de http://stackoverflow.com/questions/2741403/get-the-distance-between-two-geo- puntos – logcat

+0

Lee todas las respuestas a esta pregunta http://stackoverflow.com/questions/7696112/gettting-different-distance-when-using-the-google-map-and-user-defined-function/7752341#7752341 – MKJParekh

+0

mira la pregunta [aquí] (http://stackoverflow.com/questions/19218081/how-to-calculate-distance-from-different-markers-in-a-map-and-then-pick-up-the-l) . Esto tiene una respuesta similar con cálculos de distancia múltiple. Ver la respuesta aceptada. – Akshat

Respuesta

1

android.location.Location.distanceBetween (doble startLatitude, doble startLongitude, doble endLatitude, doble endLongitude, flotador [] resultados)

geopuntos tienen getLongitudeE6() y getLatitudeE6() para ayudar. Recuerde que esos son E6, por lo que debe dividir por 1E6.

12

Google Docs tienen dos métodos

enter image description here

Si está recibiendo latitud/longitud de GeoPoint entonces están en microgrados. Debes multiplicar por 1e6.

Pero prefiero usar el siguiente método. (Está basado en la Fórmula Haversine)

http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe

double dist = GeoUtils.distanceKm(mylat, mylon, lat, lon); 

/** 
* Computes the distance in kilometers between two points on Earth. 
* 
* @param lat1 Latitude of the first point 
* @param lon1 Longitude of the first point 
* @param lat2 Latitude of the second point 
* @param lon2 Longitude of the second point 
* @return Distance between the two points in kilometers. 
*/ 

public static double distanceKm(double lat1, double lon1, double lat2, double lon2) { 
    int EARTH_RADIUS_KM = 6371; 
    double lat1Rad = Math.toRadians(lat1); 
    double lat2Rad = Math.toRadians(lat2); 
    double deltaLonRad = Math.toRadians(lon2 - lon1); 

    return Math.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.cos(deltaLonRad)) * EARTH_RADIUS_KM; 
} 

Por último me gustaría compartir información de la prima.

Si usted está buscando para direcciones de manejo, ruta entre dos ubicaciones luego ir a

http://code.google.com/p/j2memaprouteprovider/

+1

hey ... ¿puedes explicarme cómo funciona esto? –

+0

@ Archie.bpgc Ver mi respuesta actualizada. –

+0

@VipulShah - Creo que esto da una distancia recta entre dos GeoPoints, no es una dirección o distancia de conducción, ¿verdad? – user370305

3

Trate de usar este método en android.location API

distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)

Este método calcula la distancia aproximada en metros entre dos ubicaciones, y opcionalmente los rodamientos inicial y final de la ruta más corta entre ellos

NB: Si obtiene lat/lon de GeoPoint entonces están en microdegrees. Hay que multiplicar por 1E6

SI desea calcular píxels entre 2 GeoPoint por fórmula Haversine

public class DistanceCalculator { 
    // earth’s radius = 6,371km 
    private static final double EARTH_RADIUS = 6371 ; 
    public static double distanceCalcByHaversine(GeoPoint startP, GeoPoint endP) { 
     double lat1 = startP.getLatitudeE6()/1E6; 
     double lat2 = endP.getLatitudeE6()/1E6; 
     double lon1 = startP.getLongitudeE6()/1E6; 
     double lon2 = endP.getLongitudeE6()/1E6; 
     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.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
     return EARTH_RADIUS * c; 
    } 
} 
1

El problema con la fórmula harvesine es que no calcula la distancia real. Es la distancia de 2 puntos en una esfera. La distancia real depende de las calles o de las vías acuáticas. La fórmula harvesine también es un poco complicada, por lo tanto, es más fácil pedirle a Google-Api que brinde la distancia real. Con Googlemaps Api necesitas aprender las direcciones api.

3

método distanceBetween() le dará una distancia recta entre dos puntos. Consiguió obtener itinerario distancia entre dos puntos ver mi ansewer Here

0

distanceBetween no Reffer a la distancia real (la distancia por carretera) por lo que sugiero a que visite el código fuente de Google y que le dispaly la distancia de ruta real entre 2 geopoints Link hay 2 versiones una para Android y otro para mora comprobar que funciona

Cuestiones relacionadas