是否可以使用gps数据跟踪加速度和速度?

时间:2017-05-16 09:04:35

标签: android react-native

是否可以使用它提供的GPS数据通过Android应用程序跟踪速度和加速度?我打算用这些功能创建一个本机应用程序。但我想知道是否可以用我们可以得到的数据来做到这一点。即使在原生的android?

3 个答案:

答案 0 :(得分:1)

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)

答案 1 :(得分:1)

你可以用纯JS来做。

对于速度部分,您拥有核心React Native Geolocation API,您可以在其中找到方法watchPosition。在每个位置更新时,将返回一个对象,其中包含当前速度以及其他属性(位置,高度......)。

对于加速部分,您拥有react-native-motion-manager库。您可以收听加速度计更新并获得加速度。

答案 2 :(得分:0)

所有LocationProviders提供的每个位置都具有位置所在位置的即时速度,这是不稳定的,并且它可能因设备而异。平均速度更精确,你必须计算距离和时间。这就是我计算两个位置之间距离的方法:

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;
}

你也可以使用这个功能,但我宁愿使用另一个,它将结果存储在"结果" :)

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

因此以m / s(即1000 *为单位)获得速度非常简单:

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