2012-01-04 38 views
6

Ho un problema nel calcolare la distanza tra due punti geografici.Distanza tra i geopunti

I geopoints sono:

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

e l'altro

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

Poi ho creare due sedi:

Location loc = new Location("");         

loc.setLatitude(position1.getLatitudeE6()); 

loc.setLongitude(position1.getLongitudeE6()); 

Location loc2 = new Location("");        

loc.setLatitude(position2.getLatitudeE6()); 

loc.setLongitude(position2.getLongitudeE6()); 

E poi calcolare la distanza:

float distance = loc.distanceTo(loc2); 

e intorno ad essa:

Math.round(distance); 

Ma ottengo risultati come:

1.4331783E7

Che cosa sto facendo di sbagliato?

+0

perché stai pensando ** 1.4331783E7 ** è sbagliato? –

+0

Causa la distanza dovrebbe essere in metri e il punto che ho impostato e che tocco è max 100 metri così penso che non sia il risultato che mi serve! – user878813

+0

Dai un'occhiata a questo link http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe –

risposta

9

prova a seguire il mio metodo,

/** 
* 
* @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

si sono fissati il ​​valore GeoPoint nell'oggetto posizione invece di valore doppio cercano di impostare come valore doppio di latitudine e longitudine

Location loc = new Location("");         

loc.setLatitude(35.1064); 

loc.setLongitude(22.556412); 

Location loc2 = new Location("");        

loc2.setLatitude(22.556412); 

loc2.setLongitude(35.1064); 

ora ottenere il posizione

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

Non riesco a impostare entrambi i valori come numeri puri perché il primo geopoint è prodotto in base alla posizione della mappa che l'utente tocca. – user878813

+0

qualsiasi cosa dia l'esempio passando il valore in doppio formato, puoi passare il valore geopoint dividendoli usando il valore 1e6 come loc.setLatitude (position1.getLatitudeE6()/1E6) e un'altra cosa è che non hai impostato il valore lat/lng per l'oggetto loc2 cambia semplicemente il valore loc – Pratik

1

Si sta prendendo latitudine e longitudinali errate, si prega di sostituire e seguendo le linee

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

e poi una volta, si otterrà risposta corretta.