【问题标题】:how to calculate the distance between two points in android app如何在android应用程序中计算两点之间的距离
【发布时间】: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

标签: android distance


【解决方案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 更大,因为火车和卡车不是沿直线行驶,而是飞机沿直线行驶。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-10-30
              • 1970-01-01
              • 1970-01-01
              • 2011-12-21
              • 2019-01-10
              相关资源
              最近更新 更多