如何在Android Google Maps中获取距指定点(Lat,Lng)X距离的纬度,经度
Posted
技术标签:
【中文标题】如何在Android Google Maps中获取距指定点(Lat,Lng)X距离的纬度,经度【英文标题】:How to get the Latitude, Longitude at a X distance from the specified Point(Lat,Lng) in Android Google Maps 【发布时间】:2016-02-24 02:17:51 【问题描述】:假设我给出了一个 Point(Latitude,Longitude) 和一个 distance ,如何在 android Google Maps 中获取在四个方向上指定距离的 Another Point?
示例我给出一个点 LatLng(X,Y) 和 10 英里的距离。我应该在给定距离内的所有四个方向(NORTH、SOUTH、EAST、WEST)上获得四个点。
【问题讨论】:
【参考方案1】:使用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。
另外,请注意距离参数以米为单位。
【讨论】:
【参考方案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
【讨论】:
以上是关于如何在Android Google Maps中获取距指定点(Lat,Lng)X距离的纬度,经度的主要内容,如果未能解决你的问题,请参考以下文章
Google Maps SDK [Android]:如何获取/设置热图的 MaxIntensity?
在 Android Studio for Google Maps 中获取 SHA1 指纹证书
获取两个位置 android google maps 之间的距离并画线