как рассчитать пройденное расстояние - PullRequest
1 голос
/ 15 ноября 2011

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

 locationmanager.requestLocationUpdates(bestProvider,0,0,new Listener());

 public class Listener implements LocationListener{

@Override
public void onLocationChanged(Location location) {
    if(location!=null) {
        if(loc1==null) {
            loc1=new Location(location);
        }

        speed=location.getSpeed()*3.6;
        loc2=new Location(location);
        dist+=loc1.distanceTo(loc2);
        loc1=loc2;
        breaktv.setText(""+dist/1000);

Мое намерение - рассчитать общее расстояние, пройденное на машине или чем-то еще. Но метод distanceTo() не работает для меня.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Технически это должно работать.

У меня есть несколько предложений:

  • dist должно быть float (если это не так)
  • dist += loc2.distanceTo(location), создавать не нужно loc1

Это код, который я использовал

                if(lastLoc != null)
                {
                    ttf = (location.getTime() - lastLoc.getTime()) / 1000;
                    int R = 6371;
                    double lat1 = Math.PI / 180.0 *lastLoc.getLatitude();
                    double lon1 = Math.PI / 180.0 *lastLoc.getLongitude();
                    double lat2 = Math.PI / 180.0 *location.getLatitude();
                    double lon2 = Math.PI / 180.0 *location.getLongitude();
                    //  double dLon = Math.PI / 180.0 * (location.getLongitude() - lastLoc.getLongitude());
                    double dLat = (lat2-lat1);
                    double dLon = (lon2-lon1);
                    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                    Math.cos(lat1) * Math.cos(lat2) * 
                    Math.sin(dLon/2) * Math.sin(dLon/2); 
                    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
                    double d = R * c;
                   totalDistance += d;

                }

                lastLoc = location;
1 голос
/ 15 ноября 2011

Вот еще один Вопрос по SO , где я разместил 2 ответа, один для функции User Defined, чтобы получить расстояние, а другой - для метода класса android.Location пользователя для его вычисления.Надеюсь, это вам поможет.

Когда вы начинаете свою работу, возьмите CurrentLocation и сохраните его, используя SharedPreferences , Тогда я думаю, что вам нужно постоянно обновлять пройденное расстояние, вы просто используете OnLocationChanged таким же образом и вызываете метод, упомянутый выше, чтобы узнать текущее пройденное расстояние.

РЕДАКТИРОВАТЬ: вот хороший пример, который может вам помочь, Ссылка на OpenSource Project

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...