下一个函数com.google.maps.android.PolyUtil.isLocationOnPath仅返回布尔值,以指示检查点(位置)是否在路径上

PolyUtil.isLocationOnPath(latLng, mPointsOfRoute, true, 10);


https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/PolyUtil.java#L158

但我也想找出该点在哪里,从我的点列表(mPointsOfRoute)中的点之间

由于我需要缩短此路线(路径),因此请删除已通过的点,并缩短从新的当前位置到同一目的地的路线

最佳答案

假设p是折线,您发现:

PolyUtil.isLocationOnPath(latLng, mPointsOfRoute, true, 10);

返回true,其中:

List<LatLng> mPointsOfRoute = p.getPoints();

因此,latLng在p上的某处。

您可以使用findIntersectingPoint()方法找到相交位置的纬度。

只需将LatLngs列表传递给此方法,如下所示:

LatLng intersectingLocationOnPath = findIntersectingPoint(latLng, mPointsOfRoute.get(0), mPointsOfRoute.get(mPointsOfRoute.size() - 1));

private LatLng findIntersectingPoint(final LatLng p, final LatLng start, final LatLng end) {
    if (start.equals(end)) {
        return start;
    }

    final double s0lat = Math.toRadians(p.latitude);
    final double s0lng = Math.toRadians(p.longitude);
    final double s1lat = Math.toRadians(start.latitude);
    final double s1lng = Math.toRadians(start.longitude);
    final double s2lat = Math.toRadians(end.latitude);
    final double s2lng = Math.toRadians(end.longitude);

    double s2s1lat = s2lat - s1lat;
    double s2s1lng = s2lng - s1lng;
    final double u = ((s0lat - s1lat) * s2s1lat + (s0lng - s1lng) * s2s1lng)
            / (s2s1lat * s2s1lat + s2s1lng * s2s1lng);
    if (u <= 0) {
        return start;
    }
    if (u >= 1) {
        return end;
    }

    return new LatLng(start.latitude + (u * (end.latitude - start.latitude)),
            start.longitude + (u * (end.longitude - start.longitude)));
}

08-05 04:02