如何计算Android应用程序中两点之间的距离

时间:2011-04-21 04:58:34

标签: android distance

在我的应用程序中,我试图计算一个人从一个地方旅行到另一个地方的距离。为此,我使用的是Haversine公式,

R = earth’s radius (mean radius = 6,371km)
Δlat = lat2− lat1
Δlong = long2− long1
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c 

获取起始位置和到达地点的经度和经度我正在计算以kms为单位的距离。但是其他人说,这种距离计算只有在气道行进时才有效,如果用户通过公路行驶则会有所不同。

如果是这样的话,我怎样才能在穿越道路时获得正确的距离。

请帮助我的朋友

6 个答案:

答案 0 :(得分:6)

此方法在标准API(Location.distanceBetween方法)中) http://developer.android.com/reference/android/location/Location.html

答案 1 :(得分:3)

使用以下公式查找两个lat-long之间的距离:

private double calculateDistance(double lat1, double lon1, double lat2, double lon2, String unit) 
{
      double theta = lon1 - lon2;
      double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
      dist = Math.acos(dist);
      dist = rad2deg(dist);
      dist = dist * 60 * 1.1515;
      if (unit == "K") {
        dist = dist * 1.609344;
      } else if (unit == "M") {
        dist = dist * 0.8684;
        }
      return (dist);
}

    /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
    /*::  This function converts decimal degrees to radians             :*/
    /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
    private double deg2rad(double deg) 
    {
      return (deg * Math.PI / 180.0);
    }

    /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
    /*::  This function converts radians to decimal degrees             :*/
    /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
    private double rad2deg(double rad)
    {
      return (rad * 180.0 / Math.PI);
    }

传递lat,long,其中包含您想要距离的功能和单位(公里为“K”,“M”为“M”)。 希望这会对你有所帮助。

答案 2 :(得分:2)

当你乘公路旅行时(即使是通过空中旅行),由于地球不平坦,地球的承载也会发挥作用。但是这个Haversine公式应该已经处理好了。其次,人们可能会说,当你通过公路旅行时,你不会直接在两点之间。你需要很多次。并且为了“精确地”指出两点之间的距离,你可能也想考虑这些转折。

答案 3 :(得分:2)

Location.distanceBetween()将针对两个纬度经度坐标点执行此操作。

答案 4 :(得分:1)

我在以下链接中找到了示例代码来计算通过道路的距离。

http://code.google.com/p/krvarma-android-samples/source/browse/#svn/trunk/GPSSample%253Fstate%253Dclosed

答案 5 :(得分:0)

由于火车和卡车不是沿着直线移动而是在飞机上移动,所以它似乎距离更远的地方更远。

您需要路线图来计算距离