我通过以下方法得到setOnPolylineClickListener


mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() {
            @Override
            public void onPolylineClick(Polyline polyline) {
}



  但这会返回整个Polyline我想要LatitudeLongitude的点击位置,例如
  我们通过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/

10-09 07:38