我需要在用户在android中移动时计算距离。我有起点坐标,可以获得用户的当前位置。我该如何计算距离。 我不认为我可以调用GoogleDistance Api,因为我的应用程序将是一个实时应用程序,并且调用此API将非常开销,或者应该调用GoogleDirectionsAPI可以正常工作。
此外,我想测试行进的距离。我该怎么办?有没有一些方法可以对数据进行采样,或者我是否真的需要在现实世界中出去并实际旅行然后测试我的应用程序?
编辑:我想要用户行进的距离而不是点之间的直线距离
答案 0 :(得分:6)
我希望以下会有所帮助: 在我的应用程序中,我开始收集每3ts后拉长(我设置3英尺只是为了测试)。我收集了lat longs如下:
现在我开始计算从点1到2的距离,然后是2到3然后是3到4,依此类推。总结之后我的总距离从1到5。 我使用以下函数来计算距离:
public double GetDistanceFromLatLonInKm(double lat1, double lon1, double lat2, double lon2)
{
final int R = 6371;
// Radius of the earth in km
double dLat = deg2rad(lat2 - lat1);
// deg2rad below
double dLon = deg2rad(lon2 - lon1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double d = R * c;
// Distance in km
return d;
}
private double deg2rad(double deg)
{
return deg * (Math.PI / 180);
}
此方法为我计算精确距离。
答案 1 :(得分:0)
基本上有三种方法可以检查行进距离 -
使用GPS,使用位置等级distanceTo检查两点之间的坐标。
使用加速度计,您可以使用Accelerometer检查设备的移动。
使用Step detector - 最近由Android更新。
希望这可以帮助您实现目标:)
答案 2 :(得分:0)
您可以使用以下功能计算两点之间的距离
double distanceBetweenTwoPoint(double srcLat, double srcLng, double desLat, double desLng) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(desLat - srcLat);
double dLng = Math.toRadians(desLng - srcLng);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(srcLat))
* Math.cos(Math.toRadians(desLat)) * Math.sin(dLng / 2)
* Math.sin(dLng / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double dist = earthRadius * c;
double meterConversion = 1609;
return (int) (dist * meterConversion);
}
对于第二部分:要使用模拟或样本数据,您可以使用Play商店中的“假GPS”应用程序,这将在您的设备中生成模拟位置。
快乐编码
答案 3 :(得分:0)
对于第一个问题。你有原始坐标和当前用户位置坐标,所以你可以做的是google api v3库提供了一个方法,它采用原点LatLng和目标LatLng并给出距离。将api v3 jar添加到你的android构建路径。 对于第二个转到谷歌地图并给出位置详细信息它是准确的..