2012-01-04 19 views
6

Tengo un problema para calcular la distancia entre dos geopoints.Distancia entre geopoints

Los geopuntos son:

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

y el otro

double lat = 35.1064; 
double lng = 22.556412; 
GeoPoint position2 = new GeoPoint((int)(lat * 1E6), (int)(lng * 1E6)); 

Luego de crear dos lugares:

Location loc = new Location("");         

loc.setLatitude(position1.getLatitudeE6()); 

loc.setLongitude(position1.getLongitudeE6()); 

Location loc2 = new Location("");        

loc.setLatitude(position2.getLatitudeE6()); 

loc.setLongitude(position2.getLongitudeE6()); 

Y luego calcular la distancia:

float distance = loc.distanceTo(loc2); 

y alrededor de ella:

Math.round(distance); 

Pero consigo resultados como:

1.4331783E7

¿qué estoy haciendo mal?

+0

¿por qué estás pensando ** 1.4331783E7 ** está mal? –

+0

Porque la distancia debe ser en metros y el punto que configuro y toco está a 100 metros como máximo, así que creo que no es el resultado que necesito. – user878813

+0

Echa un vistazo a este enlace http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe –

Respuesta

9

trate de seguir mi método,

/** 
* 
* @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(); 
} 
0

le fijan el valor GeoPoint en la localización de objetos en lugar de valor doble tratan de establecer como valor doble de latitud y longitud

Location loc = new Location("");         

loc.setLatitude(35.1064); 

loc.setLongitude(22.556412); 

Location loc2 = new Location("");        

loc2.setLatitude(22.556412); 

loc2.setLongitude(35.1064); 

ahora obtener la ubicación

float distance = loc.distanceTo(loc2); 
+0

No puedo establecer ambos valores como números puros porque el primer punto geográfico se produce de acuerdo con el lugar del mapa que el usuario toca. – user878813

+0

sea lo que sea que acabo de dar el ejemplo al pasar el valor en formato doble, puede pasar el valor del geopoint dividiéndolo usando el valor 1e6 como loc.setLatitude (position1.getLatitudeE6()/1E6) y otra cosa es que no configuró el valor lat/lng para el objeto loc2 simplemente cambia el valor de loc – Pratik

1

Usted está tomando latitud y longitudes incorrectas, reemplace th th e siguiendo líneas

Location loc = new Location("");         

loc.setLatitude(position1.getLatitudeE6()); 

loc.setLongitude(position1.getLongitudeE6()); 

Location loc2 = new Location("");        

loc.setLatitude(position2.getLatitudeE6()); 

loc.setLongitude(position2.getLongitudeE6()); 

con

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

y luego una vez, obtendrá respuesta correcta.

Cuestiones relacionadas