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

Posted

技术标签:

【中文标题】如何在android应用程序中计算两点之间的距离【英文标题】:how to calculate the distance between two points in android app 【发布时间】:2011-08-10 00:44:11 【问题描述】:

在我的应用程序中,我试图计算一个人从一个地方到另一个地方的距离。为此,我使用的是 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 

获取起始地点和到达地点的纬度和经度,我正在计算以公里为单位的距离。但是其他人说,这种距离计算仅在通过航空旅行时才有效,并且如果用户通过公路旅行,则得到的结果会有所不同。

如果是这样,我如何在通过公路时获得正确的距离。

请朋友们帮帮我

【问题讨论】:

你想计算两个 GeoPoints 之间的距离吗? 该死,我刚刚把 2atan 读成了撒旦:D 【参考方案1】:

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

【讨论】:

【参考方案2】:

使用以下公式求两个经纬度之间的距离:

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,longs 传递您想要距离的函数和单位(“K”代表公里,“M”代表英里)。 希望这会对你有所帮助。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

当您通过公路旅行时(即使是通过航空旅行),由于地球不是平坦的,因此地球的方位会发挥作用。但是这个 Haversine 公式应该已经处理好了。其次,人们可能一直在说,当你通过公路旅行时,你不会直接在两点之间走。你需要转很多圈。为了“准确”地判断两点之间的距离,您可能还需要考虑这些转弯。

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

似乎距离通过 radways 更大,因为火车和卡车不是沿直线行驶,而是飞机沿直线行驶。

你需要路线图来产生计算距离

【讨论】:

以上是关于如何在android应用程序中计算两点之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中计算行驶方向模式下两点之间的距离

MapsApp,计算两点之间的距离,Android

如何获得两点之间的行驶距离?

如何计算百度地图上两点的距离

如何计算百度地图上两点的距离

地图上的两点怎样计算距离