GPS - Getting the distance,time while running and walking

后端 未结 5 1228
情话喂你
情话喂你 2020-12-19 18:51

i have a situation where i need to use GPS technique.

i need to find the distance between two points when the person is walking.

When the person starts walki

相关标签:
5条回答
  • 2020-12-19 19:17

    You can find out the distance between two locations(in terms of latitude and longitude) by making use of Spherical Trigonometry

    Coming to time make use of simple date objects and compare the startTime and endTime.

    (OR)

    You can get approximate distance using below code

    double distance;  
    
    Location locationA = new Location("point A");  
    
    locationA.setLatitude(latA);  
    locationA.setLongitude(lngA);  
    
    Location locationB = new Location("point B");  
    
    locationB.setLatitude(latB);  
    LocationB.setLongitude(lngB);  
    
    distance = locationA.distanceTo(locationB); 
    
    0 讨论(0)
  • 2020-12-19 19:20

    For getting the distance between 2points(A to B) there is a function called distanceTo in android.

    For e.g. double distance = startLocation.distanceTo(finishLocation)/1000;

    For time taken as npinti said you can use currentTimeinMillis() or you can also use Timer and show it to user when he clicks on start button. Its just like stopwatch.

    Edited

    Place A - New York

    Place B - Paris

    In this case you first need to convert the string into Location(i.e you need latitude & longitude). For that you have use the concept of Geocoding.

    List<Address> foundGeocode = null;
    foundGeocode = new Geocoder(this).getFromLocationName("address here", 1);
     foundGeocode.get(0).getLatitude(); //getting latitude
     foundGeocode.get(0).getLongitude();//getting longitude
    

    After that you can calculate the distance from the distanceTo method. Hope this will help....

    0 讨论(0)
  • 2020-12-19 19:26

    I suppose the question is one of walking..

    Are you walking on the streets, or as the crow flies?

    If it's streets, and your connected to the net, use google's api.. It calculates routing based on two points and returns XML.. Should be easy enough to figure out.

    If it's crow flies.. well then, just do (a*a) + (b*b) = (c*c) this is by far the easier.. You could have your user tap for major turns.. Or you could keep a runnable running every 10 seconds from when they hit start, and plot the points. Still a*a+b*b=c*c but just a bunch of steps.

    Of course you'd have to run it in a service.. And given the choice I'd go with that option. You could adjust the cycle time based on speed traveled. Faster would be smaller pauses. It requires less on your dataplan.


    EDIT
    Ah.. I see what you're looking for. Tis not what I thought you were asking for. Simplify.. convert lat/long to GPS. and then do simple math on the last point stored

    void addDistance()
    {
      newX = ...
      newY = ...
      deltaX = absolute(m_oldX - newX)
      deltaY = absolute(m_oldY = newY)
      m_distance += sqrt(deltaX^2 + deltaY^2);
      m_oldX = newX;
      m_oldY = newY;
    }
    void startOver()
    {
      newX = ...
      newY = ...
      m_distance = 0;
      m_oldX = newX;
      m_oldY = newY;
    
    }
    
    0 讨论(0)
  • 2020-12-19 19:31

    try using Google Distance Matrix Api

    https://developers.google.com/maps/documentation/distancematrix/

    0 讨论(0)
  • 2020-12-19 19:32

    You can use currentTimeinMillis() to get your start and end time for your journey.

    You can then use the formulas explained here to find the distance and lastly you will have to use a reverse geocoding service such as Nominatim to be able to get the address of a place from your GPS coordinates.

    That being said, the distance formula will get you the distance between one point and the next, not the actual displacement. If this is not what you need, but rather you want the actual distance travelled you will need to calculate this value at a shorter interval.

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