how to get lat lng of position click on polyline?

≯℡__Kan透↙ 提交于 2019-12-24 08:29:16

问题


I am getting setOnPolylineClickListener by following method.

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

But this returns whole PolylineI want Latitude and Longitudeof click position like we get by MapClickListener how to achieve this ?

mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

            @Override
            public void onMapClick(final LatLng point) {

        }); 

I have tried using PolyUtil with following code it also doesn't work.

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");
                }
            }
        });

回答1:


You are doing everything alright:

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");
        }
    }
});

is the solution, but PolyUtil.isLocationOnPath(LatLng point, java.util.List<LatLng> polyline, boolean geodesic) has 0.1 meter tolerance by default, and touch just didn't on path with this precise. Use PolyUtil.isLocationOnPath(LatLng point, java.util.List<LatLng> polyline, boolean geodesic, double tolerance) instead, set appropriate tolerance (10 meters, or 20 meters - or even more, it depends on zoom level)

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");
        }
    }
});

and everything should works!

UPDATE:

Also you can modify tolerance depending on zoom level, like:

...
switch (mMap.getCameraPosition().zoom) {
    ...
    case 16:
        tolerance = 30;
    break;
    case 15:
        tolerance = 45;
    break;
    ...
}
...

or use formula: tolerance = f(zoom level) like tolerance = 1000 / mMap.getCameraPosition().zoom;.



来源:https://stackoverflow.com/questions/48334265/how-to-get-lat-lng-of-position-click-on-polyline

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!