2013-04-05 4 views
3

Я пытаюсь сделать приложение, которое занимает широту и долготу в текущем месте пользователя. И подсчитайте момент, какое расстояние перемещает пользователя в км.Android: Как измерить расстояние с помощью gps

«currentLat» и «currentLon» - текущая широта и долгота пользователя. Но я не знаю, какую широту и долготу следует использовать для «endLat» и «ednLon».

Извините за мой плохой английский.

Заранее спасибо.

///////////////////////////////////

Я сделал это приложение, но теперь есть только одна небольшая проблема. Когда я впервые начал программу, я получил значение 5536, и когда я перезапустил программу, я получаю нормальное значение. 0.0

Снова извините за мой плохой английский. :)

И ребята спасибо за помощь мне, ты лучший :)

public class Gps extends Activity { 

TextView display; 


    double currentLon=0 ; 
    double currentLat=0 ; 
    double lastLon = 0; 
    double lastLat = 0; 
    double distance; 




public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 




    display = (TextView) findViewById(R.id.info); 

    LocationManager lm =(LocationManager) getSystemService(LOCATION_SERVICE); 
       lm.requestLocationUpdates(lm.GPS_PROVIDER, 0,0, Loclist); 
       Location loc = lm.getLastKnownLocation(lm.GPS_PROVIDER); 

       if(loc==null){ 
        display.setText("No GPS location found"); 
        } 
        else{ 
         //set Current latitude and longitude 
         currentLon=loc.getLongitude(); 
         currentLat=loc.getLatitude(); 

         } 
       //Set the last latitude and longitude 
       lastLat=currentLat; 
       lastLon=currentLon ; 


} 



LocationListener Loclist = new LocationListener(){ 




@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

    //start location manager 
    LocationManager lm =(LocationManager) getSystemService(LOCATION_SERVICE); 

     //Get last location 
    Location loc = lm.getLastKnownLocation(lm.GPS_PROVIDER); 

    //Request new location 
     lm.requestLocationUpdates(lm.GPS_PROVIDER, 0,0, Loclist); 

     //Get new location 
     Location loc2 = lm.getLastKnownLocation(lm.GPS_PROVIDER); 

     //get the current lat and long 
    currentLat = loc.getLatitude(); 
    currentLon = loc.getLongitude(); 


    Location locationA = new Location("point A"); 
     locationA.setLatitude(lastLat); 
     locationA.setLongitude(lastLon); 

    Location locationB = new Location("point B"); 
     locationB.setLatitude(currentLat); 
     locationB.setLongitude(currentLon); 

     double distanceMeters = locationA.distanceTo(locationB); 

     double distanceKm = distanceMeters/1000f; 

     display.setText(String.format("%.2f Km",distanceKm)); 

     } 



@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 



@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 



@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 



} 

}; 

} 
+0

что такое ошибка здесь? –

+0

Кстати, ваш метод отправляет одно и то же местоположение, поэтому расстояние всегда будет возвращать 0 м. – Carnal

ответ

1

Но я не знаю, какую широту и долготу следует использовать для «endLat» и «ednLon».

endLat, endLon является запутанным имя:

Вы должны lastLat, lastLon: латы, долгота, полученное в предыдущем вызове onGpsUpdate, кроме того, что в ваше например distanceCalculator.lastLat где distanceCalculator является объект, где вы храните, что lastLat и lastLon

Тогда вы должны иметь curLat, curLon: ток широта, долгота поставляется в onGPSUpdate

Затем рассчитать расстояние от (lastLat, lastLon) -> (curLat, curLon), и обновите свое расстояниеCalculator.lastLat и lastLon.

3

Поскольку у вас есть два места, почему бы не рассмотреть вопрос об использовании distanceTo:

float distanceMeters = location1.distanceTo(location2); 
float distanceKm = distanceMeters/1000f; 
+0

Местоположение1 является местоположением пользователя, но каким будет место2.Это моя самая большая проблема. –

+0

@Carnal. Это был не вопрос ни в одном из 8 исправлений этого вопроса. И кто сделал ставку на вопрос, который не спросил? Вы продвигаете себя (с небольшой помощью)? – AlexWien

0

Link

var R = 6371; // Radius of the earth in km 
var dLat = (lat2-lat1).toRad(); // Javascript functions in radians 
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c; // Distance in km. 
+0

Это был не вопрос ни в одном из 8 пересмотров этого вопроса. И кто сделал ставку на вопрос, который не спросил? Вы продвигаете себя (с небольшой помощью)? – AlexWien