我通过以下方法得到setOnPolylineClickListener
。
mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() {
@Override
public void onPolylineClick(Polyline polyline) {
}
但这会返回整个
Polyline
我想要Latitude
和Longitude
的点击位置,例如我们通过
MapClickListener
如何实现呢?mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
});
我尝试将
PolyUtil
与以下代码一起使用也不起作用。mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
最佳答案
您正在做的一切都很好:
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
是解决方案,但是
PolyUtil.isLocationOnPath(LatLng point, java.util.List<LatLng> polyline, boolean geodesic)
默认具有0.1米的容差,并且在这种情况下,触摸只是不在路径上。改用PolyUtil.isLocationOnPath(LatLng point, java.util.List<LatLng> polyline, boolean geodesic, double tolerance)
,设置适当的tolerance
(10米或20米-甚至更多,取决于缩放级别)mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng point) {
if (PolyUtil.isLocationOnPath(point, finalPolylines.getPoints(), true, 20)) {
// user clicked on polyline
Toast.makeText(getContext(), "found", Toast.LENGTH_SHORT).show();
Log.d("found", "onMapClick: found");
}
}
});
一切都会正常!
更新:
您还可以根据缩放级别修改
tolerance
,例如:...
switch (mMap.getCameraPosition().zoom) {
...
case 16:
tolerance = 30;
break;
case 15:
tolerance = 45;
break;
...
}
...
或使用公式:
tolerance = f(zoom level)
,例如tolerance = 1000 / mMap.getCameraPosition().zoom;
。关于android - 如何获得位置的横向点击折线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48334265/