检查当前点是否在路线(路径)上并从匹配的列表中获取这些点
Check if current point is on route (path) and get those points from list where it matches
仅下一个函数 com.google.maps.android.PolyUtil.isLocationOnPath
returns 判断检查点(位置)是否在路径上的布尔值
PolyUtil.isLocationOnPath(latLng, mPointsOfRoute, true, 10);
但我也想找出这个点在哪里匹配,在我的点列表中的哪些点之间(mPointsOfRoute
)
因为我需要缩短这条路线(路径),删除经过的点并缩短从新的当前位置到同一目的地的路线
假设 p 是折线,您发现:
PolyUtil.isLocationOnPath(latLng, mPointsOfRoute, true, 10);
returns 正确,其中:
List<LatLng> mPointsOfRoute = p.getPoints();
所以,latLng 在 p.
的某处
您可以使用findIntersectingPoint()
方法求出相交位置的LatLong。
只需将 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)));
}
仅下一个函数 com.google.maps.android.PolyUtil.isLocationOnPath
returns 判断检查点(位置)是否在路径上的布尔值
PolyUtil.isLocationOnPath(latLng, mPointsOfRoute, true, 10);
但我也想找出这个点在哪里匹配,在我的点列表中的哪些点之间(mPointsOfRoute
)
因为我需要缩短这条路线(路径),删除经过的点并缩短从新的当前位置到同一目的地的路线
假设 p 是折线,您发现:
PolyUtil.isLocationOnPath(latLng, mPointsOfRoute, true, 10);
returns 正确,其中:
List<LatLng> mPointsOfRoute = p.getPoints();
所以,latLng 在 p.
的某处您可以使用findIntersectingPoint()
方法求出相交位置的LatLong。
只需将 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)));
}