在没有目的地的 Google 地图上 x 公里后获取经纬度?

Get Latitude Longitude after x kilometer on Google Map without destination?

我正在创建一个 Android 应用程序,它需要在 X 公里后找到同一路线上的坐标。

我在一条路上有两个坐标 x1,y1x2,y2。现在,我的要求是在同一条道路上大约 3 公里后找到坐标 x3,y3(即 x2,y2 之后而不是 x1,y1x2,y2 之间的坐标)。

如何实现?

如果知道bearing,就可以算出目的地坐标

示例代码:

private LatLng getDestinationPoint(LatLng source, double brng, double dist) {
        dist = dist / 6371;
        brng = Math.toRadians(brng);

        double lat1 = Math.toRadians(source.latitude), lon1 = Math.toRadians(source.longitude);
        double lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) +
                                Math.cos(lat1) * Math.sin(dist) * Math.cos(brng));
        double lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) *
                                        Math.cos(lat1),
                                        Math.cos(dist) - Math.sin(lat1) *
                                        Math.sin(lat2));
        if (Double.isNaN(lat2) || Double.isNaN(lon2)) {
            return null;
        }
        return new LatLng(Math.toDegrees(lat2), Math.toDegrees(lon2));
    }

示例用法:

   double radiusInKM = 10.0;
   double bearing = 90;
   LatLng destinationPoint = getDestinationPoint(new LatLng((25.48, -71.26), bearing, radiusInKM);

或者您可以在 pointA 和 pointB 之间使用航向而不是方位:

LatLng destinationPoint = getDestinationPoint(new LatLng(37.4038194,-122.081267), SphericalUtil.computeHeading(new LatLng(37.7577,-122.4376), new LatLng(37.4038194,-122.081267)), radiusInKM);

SphericalUtil.computeHeading(p1, p2); 方法来自 Android Google Maps Utility library.

这是基于 this Whosebug answer 中的 Javascript 方法。

如果你想要在同一条路上的点,你可以检查this PHP answer