Using gps get the distance a person has walked

前端 未结 3 2030
北荒
北荒 2020-12-18 11:20

guys i am able to get the current location longitude and Latitude using the below code. I have two buttons Start walking and Stop Walking.

Onclick of

相关标签:
3条回答
  • 2020-12-18 11:55

    First of all. This is more of a ask a question about a problem and then you will receive an answer. People on this board will not do you work for you.

    Now to a way to achieve what you want.

    You need to use a service in order to keep track of the user and the locations. The easy way would be to incorporate the mytracks service which is available as a addon to your application or use code from mytracks in order to create your own tracking service. http://code.google.com/p/mytracks/

    You could check out: http://code.google.com/p/mytracks/w/list

    0 讨论(0)
  • 2020-12-18 12:09

    You can calculate distance between two geo locations with distanceTo() function
    Location destination =new Location("gps");
    destination.setLatitude(lat);
    destination.setLongitude(lng);
    float dist=user_location.distanceTo(destination);

    0 讨论(0)
  • 2020-12-18 12:15

    try this

    public class TestActivity extends Activity implements Runnable {
     private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
        private static final long MINIMUM_TIME_BETWEEN_UPDATES = 30000;
    
        protected LocationManager locationManager;
        static double n=0;
        Long s1,r1;
        double plat,plon,clat,clon,dis;
        MyCount counter;
        Thread t1;
        EditText e1;
        boolean bool=true;
    
    Button b1,b2,b3,b4,b5;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        b1=(Button)findViewById(R.id.button1);<--- current position
        b2=(Button)findViewById(R.id.button2);<---- start moving.. calculates distance on clicking this
        b3=(Button)findViewById(R.id.button3);<--- pause
        b4=(Button)findViewById(R.id.button4);<-- resume
        b5=(Button)findViewById(R.id.button5);<-- get distance
        e1=(EditText)findViewById(R.id.editText1);
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 
                MINIMUM_TIME_BETWEEN_UPDATES, 
                MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
                new MyLocationListener()
        );
        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                showCurrentLocation();
            }
    });     
    
    }
    protected void showCurrentLocation() {
    
        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    
        if (location != null) {
            String message = String.format(
                    "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude()
            );
            clat=location.getLatitude();
            clon=location.getLongitude();
            Toast.makeText(TestActivity.this, message,
                    Toast.LENGTH_LONG).show();
        }
        else{
            Toast.makeText(TestActivity.this, "null location",
                    Toast.LENGTH_LONG).show();
        }
    
    }
    public void start (View v){
    
        switch(v.getId()){
    
        case R.id.button2:
            t1=new Thread();
            t1.start();
            counter= new MyCount(30000,1000);
         counter.start();
         break;
        case R.id.button3:
            counter.cancel();
            bool=false;
            break;
        case R.id.button4:
            counter= new MyCount(s1,1000);
         counter.start();
         bool=true;
         break;
        case R.id.button5:
    
            double time=n*30+r1;
            Toast.makeText(TestActivity.this,"distance in metres:"+String.valueOf(dis)+"Velocity in m/sec :"+String.valueOf(dis/time)+"Time :"+String.valueOf(time),Toast.LENGTH_LONG).show();
    
        }
    
    
    }
    
    
    private class MyLocationListener implements LocationListener {
    
        public void onLocationChanged(Location location) {
            String message = String.format(
                    "New Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude()
            );
    
            Toast.makeText(TestActivity.this, message, Toast.LENGTH_LONG).show();
        }
    
        public void onStatusChanged(String s, int i, Bundle b) {
            Toast.makeText(TestActivity.this, "Provider status changed",
                    Toast.LENGTH_LONG).show();
        }
    
        public void onProviderDisabled(String s) {
            Toast.makeText(TestActivity.this,
                    "Provider disabled by the user. GPS turned off",
                    Toast.LENGTH_LONG).show();
        }
    
        public void onProviderEnabled(String s) {
            Toast.makeText(TestActivity.this,
                    "Provider enabled by the user. GPS turned on",
                    Toast.LENGTH_LONG).show();
        }
    
    }
    public class MyCount extends CountDownTimer{
        public MyCount(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        }
        @Override
        public void onFinish() {
            counter= new MyCount(30000,1000);
         counter.start();
         n=n+1;
        }
        @Override
        public void onTick(long millisUntilFinished) {
            s1=millisUntilFinished;
            r1=(30000-s1)/1000;
            e1.setText(String.valueOf(r1));
    
    
        }
        }
    @Override
    public void run() {
        while(bool){
      clat=location.getLatitude();
            clon=location.getLongitude();
            if(clat!=plat || clon!=plon){
                dis+=getDistance(plat,plon,clat,clon);
                plat=clat;
                plon=clon;
    
            }
    
        }
    
    }
    

    function for calculating distance...

    public double getDistance(double lat1, double lon1, double lat2, double lon2) {
        double latA = Math.toRadians(lat1);
        double lonA = Math.toRadians(lon1);
        double latB = Math.toRadians(lat2);
        double lonB = Math.toRadians(lon2);
        double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB-lonA)) +
                        (Math.sin(latA) * Math.sin(latB));
        double ang = Math.acos(cosAng);
        double dist = ang *6371;
        return dist;
    }
    

    }

    0 讨论(0)
提交回复
热议问题