THpubs
THpubs

Reputation: 8172

Is it possible to track acceleration and speed using gps data?

Is it possible to track the speed and the acceleration through an android app using the GPS data it provides? I'm planning to create a react native app with these features. But I want to know whether it's possible to do it with the data we can get. Even in native android?

Upvotes: 1

Views: 6331

Answers (3)

Kerumen
Kerumen

Reputation: 4341

You can do it in pure JS.

For the speed part you have the core React Native Geolocation API where you can find the method watchPosition. On each position update, an object is returned with the current speed amongst other attributes (location, altitude...).

For the acceleration part you have the react-native-motion-manager library. You can listen to the accelerometer updates and get the acceleration.

Upvotes: 4

Ale
Ale

Reputation: 86

Each location provided by all LocationProviders has the instant speed at the point where the location was taken, which is unstable and it can differ between devices. The average speed is more precise, you have to calculate distance and time. This is how I calculate distance between 2 locations:

static double distance (Location in1, Location in2) {

    double R = 6371000;
    double la1 = in1.getLatitude()* Math.PI/180;
    double la2 = in2.getLatitude()* Math.PI/180;
    double lo1 = in1.getLongitude()* Math.PI/180;
    double lo2 = in2.getLongitude()* Math.PI/180;
    double tmp1 = Math.sin((la1-la2)/2)*Math.sin((la1-la2)/2) + Math.cos(la1)*Math.cos(la2) * Math.sin((lo1-lo2)/2) * Math.sin((lo1-lo2)/2);
    double tmp2 = Math.sqrt(tmp1);
    double d = Math.abs(2 * R * Math.asin(tmp2) * 100000) / 100000;

    return d;
}

You can use this function as well, but I'd rather use the other one, which stores the result in "results" :)

Location.distanceBetween(in1.getLatitude(),in1.getLongitude(),in2.getLatitude(),in2.getLongitude(),results);

So getting the speed in m/s (that's the 1000* for) is quite straightforward:

double avgSpeed = 1000 * distance(loc1,loc2) / (loc2.getTime()-loc1.getTime)

Upvotes: 1

jagapathi
jagapathi

Reputation: 1645

Is it possible to track the speed and the acceleration through an android app using the GPS data it provides?

Answer: yes

location.getSpeed() only returns what was set with location.setSpeed(). This is a value that you can set for a location object.

To calculate the speed using GPS, you'll have to do a little math:

Speed = distance / time

so how to do that

(currentGPSPoint - lastGPSPoint) / (time between GPS points)

Upvotes: 2

Related Questions