【发布时间】:2012-01-19 15:00:51
【问题描述】:
我想计算两个 GPS 位置之间的距离,每个位置都有一个纬度值和一个经度值。对于短距离结果,计算应该是准确的。例如。 http://www.movable-type.co.uk/scripts/latlong.html(haversine 公式),则结果与此相差无几。
使用的代码:
public void GpsCalc(){
double d = getDistance(51.342299,4.371359, 51.342490,4.371997);
Log.e("GpsCalc", String.valueOf(d));
}
public static double getDistance(double lat1, double lng1, double lat2, double lng2){
double R = 6371; // earth’s radius (mean radius = 6,371km)
double dLat = Math.toRadians(lat2-lat1);
double dLon = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dr1 = R * c;//in radians
Log.e("getDistance-dr1", String.valueOf(dr1));
return dr1;
}
我确定应该是一些小改动,但我看不到。
【问题讨论】:
-
Google 为
android gps distance提供了很多答案。例如:tutorials-android.com/learn/… -
你提到你期望
-
kabuko,这正是我的问题。 GoogleEarth 返回更真实的 136m。我不介意小于 10m 的小偏差,但 136 和 49 相差太大。
-
彼得,谢谢。我会查看教程并回复您。
-
Peter,我已经实现了代码,但是当我使用代码中给出的 gps 坐标时,它返回的值是 3108.398468379165m。所以我几乎被困在这里。还是谢谢。