骑自行车的数据

我的爱好之一是骑自行车。像许多骑自行车的人一样,我用全球定位系统(GPS)记录设备记录我骑自行车的数据。在本实验中,您将编写一个Java程序,该程序可以读取包含自行车骑行的全球定位系统(GPS)数据的文件,并计算骑行的距离和平均速度。

这里有一个文本文件的链接,其中包含自行车骑行的全球定位系统(GPS)数据:

全球定位系统(GPS)乘车数据

文本文件中的每一行包含以下数据项:

  1. 以度计算的纬度
  2. 以度计算的经度
  3. 以米计的高程
  4. 以秒为单位的运行时间

在这个实验练习中,你的任务是编写一个Java程序,该程序可以使用这些数据来计算以下汇总值:

  1. 以英里为单位行驶的总距离
  2. 平均速度,单位为每小时英里
  3. 以英尺为单位的总高度增益

该怎么做

首先编写一个方法,该方法可以读取文本文件中的数据并返回包含赢博体育数据的二维数组。

public static double[][] readData(String fileName)

该方法应该对数据文件进行两次遍历。在第一次遍历文件时,您应该简单地确定数据文件中的行数N。一旦知道文件中有多少行数据,就创建一个N行4列的二维数组。在第二次遍历文件时,您将从文件中读取数据项并将它们放入数组中。

接下来,构造一个计算delta的方法:

public static double[][] computeDeltas(double[][] data)

对于原始数据文件中的每对行,我们需要计算三个增量值:

  1. 两个读数之间的平面距离。
  2. 两个读数之间以米为单位的高程变化。
  3. 两个读数之间以秒为单位的时间变化。

如果原始数据数组有N行,则此方法返回的数组将有N-1行和3列。

要计算两对全球定位系统(GPS)记录之间的平面距离,应使用以下方法:

public static double haversine(double lat1, double lon1, double lat2, double lon2) {double R = 6372800;double dLat =数学。加拿大人(lat2 - lat1);double dLon =数学。加拿大人(lon2 - lon1);lat1 = Math.toRadians(lat1);lat2 = Math.toRadians(lat2);double a = Math.pow(Math.sin(dLon/2),2) + Math.pow(Math.sin(dLon/2),2) * Math.cos(lat1) * Math.cos(lat2);* * Math.asin(Math.sqrt(a));返回R * c;}

最后,您将编写三个方法,它们可以从增量值数组中计算三个重要的量。

公共静态双totalDistance(双[][]delta)公共静态双travelTime(双[][]delta)公共静态双elevationGain(双[][]delta)

行驶的总距离是整个行程中距离增量的总和。要计算距离,你需要将平面距离p和仰角h结合起来计算

旅行时间是整个旅程的时间增量的总和,不包括任何平面旅行距离低于你设定的阈值的时间增量。由于数据文件中的时间数据值是以秒为单位的经过时间,因此我们可以通过读取数据文件中的最后一个时间值来计算乘车时间。这样做没有意义的原因是,在骑行的不同时刻,自行车会有一段不运动的时间。这些停顿包括交通灯和较长的休息停顿。(您可以在数据文件中的第385至431行看到这种效果的一个示例。)我们要做的是只对数组中移动距离大于某个距离阈值的时间增量求和。

高程增益就是赢博体育大于0的高程增量之和。

使用最后三种方法,您的主要方法应该计算并打印行进距离(以英里为单位)、平均速度(以英里每小时为单位)(这只是以英里为单位的行进距离除以以小时为单位的行进时间)和总海拔(以英尺为单位)。