7 个答案:
答案 0 :(得分:18)
有不同的方法可以做到这一点:
GPS:每X秒(比如10秒)继续添加2点之间的GPS距离。检查Android Location.distanceTo或distanceBetween。查看My Tracks应用,它是开源的。 GPS在室内不可用,如果用户频繁改变方向(每1-2秒读取一次),则会出现错误。
加速度计:使用加速度计查找用于步进检测的代码/库。距离来自加速度的双重整合,错误可以很快加起来。
步进检测器:内置于Nexus 5。谷歌必须尽可能地处理加速度计误差。这是基于硬件的计算,耗电量较少但截至目前大多数手机都没有。
醇>
答案 1 :(得分:13)
一种方法是使用加速度计数据。用户按下“开始”按钮后,您的应用应连续记录加速计数据。每当用户迈出一步时,您将在数据中观察到峰值。对此数据应用过滤器,您应能够以合理的准确度检测所采取的步骤数。将其乘以步长,您应该得到行进距离的近似值。将用户的高度作为输入参数。步长约为0.45 *一个人的身高。由于这种方法独立于GPS,因此它也适用于室内。
编辑:
您需要使用所有三个轴的加速度计值使其完全独立于设备方向。您可以使用x ^ 2 + y ^ 2 + z ^ 2
答案 2 :(得分:6)
在您的应用中询问GPS权限。点击开始时,记录GPS坐标。做同样的停止。你现在有两个坐标。然后,您可以应用距离公式来获得行进的总距离。
修改强>
至于评论中澄清的情况,我认为你需要研究的是Android的motion sensors。您可能需要做出很多假设,或者要求用户在实际使用前校准您的应用程序。
假设您了解用户的节奏因素。使用运动传感器,计算用户“走路”的时间长度(显然,没有简单的方法来确定您的用户是实际走路还是只是摇动手机)。将其与用户的节奏因子相乘,您就可以非常清楚地了解用户的步行量。
答案 3 :(得分:3)
评论"此解决方案存在一个问题。如果您以恒定速度行驶,加速度为0,因此加速度计不会读取任何读数。 - 16秒前的jnovacho"
(对不起,没有足够的声誉可以直接评论)
当你加速时,保存加速度,然后计算你走的速度。每当加速度改变并重新开始时停止计算速度。如果你停下来,你应该得到一个负面的加速,然后你必须计算你是否只是放慢速度或完全停止。但那仅仅是数学:)
答案 4 :(得分:3)
我选择了Gps方法。
通过以下步骤:
点击开始按钮,获取起点的纬度和经度,并将其存储在我的dto中并使用正确的TripId。
点击停止按钮:
TripDto dto = service.GetStartLatLong(TripIdA);
double lat = Double.valueOf(dto.getStartLati());
double lon = Double.valueOf(dto.getStartLongi());
Location locationa = new Location("point A");
locationa.setLatitude(lat);
locationa.setLongitude(lon);
double distance = location.distanceTo(locationa);
location.distanceTo()方法返回的距离以米为单位。
答案 5 :(得分:2)
public double getDistance(double lat1, double lon1, double lat2, double lon2)
{
double latA = Math.toRadians(lat1);
double lonA = Math.toRadians(lon1);
double latB = Math.toRadians(lat2);
double lonB = Math.toRadians(lon2);
double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB-lonA)) +
(Math.sin(latA) * Math.sin(latB));
double ang = Math.acos(cosAng);
double dist = ang *6371;
return dist;
}
答案 6 :(得分:1)
尝试使用传感器,我觉得你不应该使用GPS,因为它可能不那么准确。
请参阅以下开源计步器项目,了解您所说的内容。
如果您想使用传感器,将使用更多指定的代码更新此答案。