获得准确的 lat/long 给定当前点、距离和方位

Get accurate lat/long given current point, distance and bearing

给定 lat/long 中的现有点、距离(英寸)和方位角(以度数转换为弧度),我正在尝试计算新的 lat/long。但结果有时不准确,因为我正在尝试为新 lat/long 测量一个小区域。目前,我正在尝试获取下一只脚 lat/long,但有时会出现 1 英寸的误差。我为此实现使用了以下算法。将此线程称为算法 Get lat/long given current point, distance and bearing.

public LatLng calculateLatLangFromDistance(double brng, double distance, LatLng latLng){

    double lat1 = Math.toRadians(latLng.getLatitude());
    double long1 = Math.toRadians(latLng.getLongitude());
    double br = Math.toRadians(brng);


   double lat2 = Math.asin(Math.sin(lat1)*Math.cos(distance/r) +
           Math.cos(lat1)* Math.sin(distance/r)* Math.cos(br));

   double long2 = long1 + Math.atan2(Math.sin(br)*Math.sin(distance/r)*Math.cos(lat1),
           Math.cos(distance/r)-Math.sin(lat1)*Math.sin(lat2));

    lat2 = Math.toDegrees(lat2);
    long2 = Math.toDegrees(long2);

   LatLng latLng1 = new LatLng();
   latLng1.setLongitude(long2);
   latLng1.setLatitude(lat2);

   return latLng1;
}

r 定义为 250826771.6535433 // //地球半径(英寸)

我正在使用上述实现生成一个 1 英尺的网格到 mapbox 地图层,但结果网格的一些线是 1 英寸不准确。有什么方法可以改进此实现以获得更好的结果,或者是否有另一种方法可以为此获得准确的 lat/long?

这是生成的网格,我画了一个线图来了解网格中一些线的线长。

您可以使用 Google Maps SDK 的 spherical geometry utilities Android 实用程序库。

您可以使用的具体方法是 computeOffset 方法。在这个link中搜索SphericalUtil就可以看到。

ComputeOffset returns 从指定航向中的原点移动一段距离产生的 La​​tLng(以从北顺时针方向表示的度数表示)。以下是您需要指定的参数:

from - 开始的 LatLng。 距离 - 行进的距离。 航向 - 从北向顺时针方向的航向。

要使用它,请将实用程序库添加到您的依赖项中:

implementation 'com.google.maps.android:android-maps-utils:0.5'

这是我使用的一行代码示例:

LatLng newCoordinates = SphericalUtil.computeOffset(new LatLng(-25.363, 131.044),30000, 90);

希望对您有所帮助!