我正在开发一个Meter应用程序(在android中)。我按公式计算两点之间的距离(在背景中)
double calculateDistancs(double lat1, double long1, double lat2,
double long2) {
double earthRadius = 6371000; // meters
double dLat = Math.toRadians(lat2 - lat1);
double dLng = Math.toRadians(long2 - long1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2)
* Math.sin(dLng / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
float dist = (float) (earthRadius * c);
return dist;
}
我的地铁站之间距离不一样。 如果在android中可用,请提供其他方法。
所以第二个选项是使用google api来获得两个latlong的溃败距离但是在这种情况下它会多次击中api。我想知道哪种方法最好。
我在同一个地方得到不同的latlong,可能有一个请让我理解。
答案 0 :(得分:1)
问题很可能不是由您发布的功能引起的。 可能你正在总结跳跃的GPS位置。 仅仅总结从一个位置到另一个位置的距离是不够的,尤其是在低速时,例如步行速度。
然而,公式中存在弱点:
float dist = (float) (earthRadius * c);
您总是使用double,然后降级到较低精度的float,但返回double。这是没有意义的。
通过以下方式解决此问题:
double dist = earthRadius * c;