2017-01-18 5 views
-2

В настоящее время я работаю над простым фитнес-приложением, которое позволяет отслеживать его производительность (бег, ходьба). Я использую диспетчер местоположений, чтобы получить скорость движения, которая работает очень хорошо. Однако мне нужно пройти дистанцию, как можно использовать диспетчер местоположений (long и lat), чтобы получить расстояние?Calculate Удаленный андроид с помощью менеджера местоположений

Благодаря

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_track); 

    start = (Button) findViewById(R.id.btnStart); 
    speed = (TextView) findViewById(R.id.txtSpeed); 
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 


    //initialize location listener 
    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      getSpeed(location); 
      double lat2 = location.getLatitude(); 
      double lng2 = location.getLongitude(); 
     } 

     @Override 
     public void onStatusChanged(String s, int i, Bundle bundle) { 

     } 

     @Override 
     public void onProviderEnabled(String s) { 

     } 

     @Override 
     public void onProviderDisabled(String s) { 
     } 

     //get the speed from the given location updates 
     public void getSpeed(Location location) { 
      currentSpeed = (location.getSpeed() * 3600/1000); 
      String convertedSpeed = String.format("%.2f", currentSpeed); 
      speed.setText(convertedSpeed + "Km/h"); 
     } 
    }; 
+1

Не возвращайте вопрос! – Selvin

ответ

0

Возможно, вы можете найти расстояние между каждой последующей широтой и долготой и продолжайте добавлять.

Здесь получает расстояние в километрах (км)

private 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; 
    return (dist); 
} 

private double deg2rad(double deg) { 
    return (deg * Math.PI/180.0); 
} 

private double rad2deg(double rad) { 
    return (rad * 180.0/Math.PI); 
} 

Надеется, что это помогает вам.

 Смежные вопросы

  • Нет связанных вопросов^_^