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

时间:2015-06-26 16:07:28

标签: android google-maps geolocation latitude-longitude google-directory-api

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

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

如何实现这一目标?

1 个答案:

答案 0 :(得分:8)

如果您知道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 Stackoverflow answer的Javascript方法。

如果您希望点在同一条路上,则可以结帐this PHP answer