【发布时间】: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
假设我给出了一个 Point(Latitude,Longitude) 和一个 distance ,如何在 Android Google Maps 中获取在四个方向上指定距离的 Another Point?
示例我给出一个点 LatLng(X,Y) 和 10 英里的距离。我应该在给定距离内的所有四个方向(NORTH、SOUTH、EAST、WEST)上获得四个点。
【问题讨论】:
标签: android google-maps
使用Google Maps Android API Utility Library,您可以使用SphericalUtil.computeOffset 方法。来自the documentation:
public static LatLng computeOffset(LatLng from, double distance, double heading)返回从指定航向中的原点移动一段距离所产生的 LatLng(以从北顺时针方向的度数表示)。
参数:
- from - 开始的 LatLng。
- distance - 行驶的距离。
- heading - 从北方顺时针方向的航向。
在您的情况下,您需要使用四个标题:0 表示 NORTH,90 表示 EAST,180 表示 SOUTH,270 表示 WEST。
另外,请注意距离参数以米为单位。
【讨论】:
计算任何距离的数学基础是 哈弗辛 公式
a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)
c = 2 ⋅ atan2( √a, √(1−a) )
d = R ⋅ c
其中 φ 是纬度,λ 是经度,R 是地球半径(平均半径 = 6,371 公里 = 3,959 英里); 请注意,角度以弧度为单位,距离以公里为单位。
【讨论】:
你问题的编程部分将是:
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 精度,实现来自*的椭球体公式:
【讨论】: