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