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

Android 是否可以使用gps数据跟踪加速度和速度?,android,react-native,Android,React Native,是否有可能通过android应用程序使用其提供的GPS数据跟踪速度和加速度?我计划创建一个带有这些功能的react原生应用程序。但我想知道是否有可能用我们能得到的数据来做这件事。甚至在原生安卓系统中 是否可以通过一个传感器跟踪速度和加速度 android应用程序使用它提供的GPS数据 回答:是 getSpeed()只返回使用 location.setSpeed()。这是一个可以为位置设置的值 反对 要使用GPS计算速度,您需要做一些数学运算: Speed = distance / time 那

是否有可能通过android应用程序使用其提供的GPS数据跟踪速度和加速度?我计划创建一个带有这些功能的react原生应用程序。但我想知道是否有可能用我们能得到的数据来做这件事。甚至在原生安卓系统中

是否可以通过一个传感器跟踪速度和加速度 android应用程序使用它提供的GPS数据

回答:

getSpeed()只返回使用 location.setSpeed()。这是一个可以为位置设置的值 反对

要使用GPS计算速度,您需要做一些数学运算:

Speed = distance / time
那么怎么做呢

(currentGPSPoint - lastGPSPoint) / (time between GPS points)
是否可以通过一个传感器跟踪速度和加速度 android应用程序使用它提供的GPS数据

回答:

getSpeed()只返回使用 location.setSpeed()。这是一个可以为位置设置的值 反对

要使用GPS计算速度,您需要做一些数学运算:

Speed = distance / time
那么怎么做呢

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

所有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;
}
您也可以使用此函数,但我更愿意使用另一个函数,它将结果存储在“results”中:

因此,以m/s为单位计算速度(即1000*for)非常简单:

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

所有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;
}
您也可以使用此函数,但我更愿意使用另一个函数,它将结果存储在“results”中:

因此,以m/s为单位计算速度(即1000*for)非常简单:

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

您可以在纯JS中完成

对于速度部分您有一个核心,您可以在其中找到方法
watchPosition
。在每次位置更新时,将返回一个具有当前速度和其他属性(位置、高度…)的对象


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

您可以在纯JS中完成

对于速度部分您有一个核心,您可以在其中找到方法
watchPosition
。在每次位置更新时,将返回一个具有当前速度和其他属性(位置、高度…)的对象


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

是的,您可以获得速度=距离/时间;在Locationchangelister中使用getspeed(),如下所述,希望能有所帮助!!是的,你可以得到速度=距离/时间;在Locationchangelister中使用getspeed(),如下所述,希望能有所帮助!!