从任何点将米转换为纬度经度

Posted

技术标签:

【中文标题】从任何点将米转换为纬度经度【英文标题】:convert meters to latitude longitude from any point 【发布时间】:2011-12-21 08:02:05 【问题描述】:

在我的项目中,我必须从 500 米距离内的一个点找到 [纬度,经度] 坐标(这可以是任何随机坐标或围绕我的点的坐标数组)。我怎样才能做到这一点?

注意:我需要这个来找到与通过 Google Maps Directions Api 返回的最短路径不同的点之间的多条路径。所以使用我的方法,我将定义从 A 到 B 的道路中心,然后找到在该中心位置下方和上方的一些坐标,并将其用作从 A 到 B 的另一个航路点 - 我想这可能有助于我找到多条路径...

GIS 专业人士有什么建议吗?

编辑:UTM 转换是此类计算最可取的转换,如果有人需要,我已经创建了 UTM Java 类..

【问题讨论】:

【参考方案1】:

如果我正确理解您的问题,您在纬度/经度中有一个已知点,您需要计算另一个点的纬度/经度或距离起点 500m 的点。

如果这是您正在做的事情,您有多种选择,其中大部分都涉及专业的 GIS API。但是,我猜您是程序员/数学家而不是地理学家,所以您可能更愿意选择使用 Haversine 公式。你可以找到关于这个主题的讨论here 加上公式。

需要注意的是,您正在使用的距离(500m 非常小)并且地球远不是一个完美的球体,甚至不是一个稍微扁平的球体。它在本地是“块状”的,可以将您的计算排除在外。如果您需要更高的准确度,您将不得不使用适当的本地基准(地球模型 - 有很多,例如参见 EPSG list)来解决这些缺陷,为此您可能需要开始使用 GIS 库作为否则数学会变得非常详细。

【讨论】:

看起来是个不错的方法。要知道我正在尝试使用 UTM 到 [lat, long] 和反之亦然的计算方法,以便在计算过程中找到合适的坐标和 lat,long。我认为这种方法也与您的方法相同,但只有公式不同,但我读过 UTM 公式可以将位置精确转换为厘米...顺便说一句,非常感谢您的回复! UTM 已经通过将地球划分为大量区域来解释地球表面的局部变形,每个区域都有自己的基准。这就是为什么它比使用单一投影对整个地球的 WGS 更准确的原因。如果您需要工具来转换为笛卡尔坐标 - 计算您的点并转换回 Lat/Long 而无需担心数学问题,请查看 GDAL/OGR(尤其是 OSR - 这是空间参考 API)【参考方案2】:

这是google地图使用的代码(SphericalUtil.java)

  // from  SphericalUtil.java
  // compile 'com.google.maps.android:android-maps-utils:0.4.4'
  public static LatLng computeOffset(LatLng from, double distance, double heading) 
    distance /= 6371009.0D;  //earth_radius = 6371009 # in meters
    heading = Math.toRadians(heading);
    double fromLat = Math.toRadians(from.latitude);
    double fromLng = Math.toRadians(from.longitude);
    double cosDistance = Math.cos(distance);
    double sinDistance = Math.sin(distance);
    double sinFromLat = Math.sin(fromLat);
    double cosFromLat = Math.cos(fromLat);
    double sinLat = cosDistance * sinFromLat + sinDistance * cosFromLat * Math.cos(heading);
    double dLng = Math.atan2(sinDistance * cosFromLat * Math.sin(heading), cosDistance - sinFromLat * sinLat);
    return new LatLng(Math.toDegrees(Math.asin(sinLat)), Math.toDegrees(fromLng + dLng));

要使用它,您只需输入 centerLatLng、以米为单位的距离以及与 centerLatLng 的距离(以度数为单位)。

您可以将公式更改为您喜欢的语言。

【讨论】:

以上是关于从任何点将米转换为纬度经度的主要内容,如果未能解决你的问题,请参考以下文章

给定 GPS 的地理位置,如何在给定的 x 米半径内找到纬度和经度

彼此靠近的纬度、经度集群

计算新的经度,从旧的纬度+ n米

兰伯特 72 转换为纬度/经度对

将地址转换为经度和纬度

给定中心坐标(纬度/经度)、半径(米)和中心角(度)的球体(地球)上的圆弧面积 [关闭]