【问题标题】:Get coordinates between two points [duplicate]获取两点之间的坐标[重复]
【发布时间】:2017-01-05 23:08:15
【问题描述】:

我正在使用自己制作的 Java 程序,作为名为 Firebase 的 REST 平台的客户端。

我还有一个 android 应用程序可以从 Firebase 平台读取坐标,以更新谷歌地图上的标记。

所以我的问题是,如果我有 A 点和 B 点的经纬度,我该如何计算这两个点之间的坐标?

想象一下这种情况

  • A 点(左)纬度:39.091868 经度:-9.263187
  • B 点(右) 纬度:39.089815 经度:-9.261857

例如,我如何计算这些点之间的 10 个坐标?

【问题讨论】:

  • 所以要计算A和B的距离

标签: java android rest api google-maps


【解决方案1】:

如果我理解正确,您需要中点(正好指向直线中两个位置的中间)。

这个网页对所有这些事情都非常有帮助。 http://www.movable-type.co.uk/scripts/latlong.html

在 Android 中它看起来像这样:

public LatLng midPoint(LatLng A, LatLng B) {
    double phi1 = Math.toRadians(A.latitude);
    double gamma1 = Math.toRadians(A.longitude);

    double phi2 = Math.toRadians(B.latitude);
    double deltaGamma = Math.toRadians(B.longitude - A.longitude);

    double aux1 = Math.cos(phi2) * Math.cos(deltaGamma);
    double aux2 = Math.cos(phi2) * Math.sin(deltaGamma);

    double x = Math.sqrt((Math.cos(phi1) + aux1) * (Math.cos(phi1) + aux1) + aux2 * aux2);
    double y = Math.sin(phi1) + Math.sin(phi2);
    double phi3 = Math.atan2(y, x);

    double gamma3 = gamma1 + Math.atan2(aux2, Math.cos(phi1) + aux1);

    // normalise to −180..+180°
    return new LatLng(Math.toDegrees(phi3), (Math.toDegrees(gamma3) + 540) % 360 - 180); 
}

【讨论】:

    【解决方案2】:

    请通过球面几何尝试interpolate() 方法。

    Calculate distances, areas and headings via spherical geometry 中所述,使用SphericalUtil 中的球面几何实用程序,您可以根据纬度和经度计算距离、面积和航向。如上所述,这种方法是:

    • interpolate() – 返回位于两个给定点之间距离的给定分数的点的纬度/经度坐标。

    blog 中提供的其他信息和示例代码也可能对您的实现部分有所帮助。

    【讨论】:

      【解决方案3】:

      如果你想让这两点之间的坐标在直线上,你可以做一些简单的数学计算......

      如果您希望这些点在路上,您必须使用Google Directions API

      【讨论】:

        猜你喜欢
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多