【问题标题】:How to get the Latitude, Longitude at a X distance from the specified Point(Lat,Lng) in Android Google Maps如何在Android Google Maps中获取距指定点(Lat,Lng)X距离的纬度,经度
【发布时间】:2026-02-19 05:00:02
【问题描述】:

假设我给出了一个 Point(Latitude,Longitude) 和一个 distance ,如何在 Android Google Maps 中获取在四个方向上指定距离的 Another Point?

示例我给出一个点 LatLng(X,Y) 和 10 英里的距离。我应该在给定距离内的所有四个方向(NORTH、SOUTH、EAST、WEST)上获得四个点。

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    使用Google Maps Android API Utility Library,您可以使用SphericalUtil.computeOffset 方法。来自the documentation

    public static LatLng computeOffset(LatLng from,
                                       double distance,
                                       double heading)
    

    返回从指定航向中的原点移动一段距离所产生的 La​​tLng(以从北顺时针方向的度数表示)。

    参数:

    • from - 开始的 LatLng。
    • distance - 行驶的距离。
    • heading - 从北方顺时针方向的航向。

    在您的情况下,您需要使用四个标题:0 表示 NORTH,90 表示 EAST,180 表示 SOUTH,270 表示 WEST。

    另外,请注意距离参数以米为单位。

    【讨论】:

      【解决方案2】:

      计算任何距离的数学基础是 哈弗辛 公式

      a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
      c = 2 ⋅ atan2( √a, √(1−a) )
      d = R ⋅ c
      

      其中 φ 是纬度,λ 是经度,R 是地球半径(平均半径 = 6,371 公里 = 3,959 英里); 请注意,角度以弧度为单位,距离以公里为单位。

      【讨论】:

        【解决方案3】:

        你问题的编程部分将是:

          LatLng toSouth = new LatLng(X - 10/alpha, Y);
          LatLng toNorth = new LatLng(X + 10/alpha, Y);
          LatLng toWest = new LatLng(X, Y - 10/betha(X));
          LatLng toEast = new LatLng(X, Y + 10/betha(X));
        

        现在您需要知道以英里为单位的 1 个纬度的长度是多少 - alpha,以及当前纬度的 1 个经度以英里为单位的长度是多少 - betha(X)(经度有点棘手,因为椭圆体我们星球的南北纬度越来越薄,但纬度有〜恒定的长度)。 您还需要知道您需要哪种类型的精度:您需要将行星视为椭球体或仅球体简化的 GPS 精度就足够了。 对于简单的球体:

        alpha = 69(英里,大约)

        betha = Math.Pi/180*EARTHRADUIS*Math.cos(Math.toRadians(X));

        EARTHRADIUS = 3,958.8(英里,大约)

        对于 GPS 精度,实现来自*的椭球体公式:

        https://en.wikipedia.org/wiki/Latitude

        https://en.wikipedia.org/wiki/Longitude

        【讨论】: