如何获得lat lng的位置点击折线?

时间:2018-01-19 04:47:57

标签: android google-maps google-polyline

  

我通过以下方法获得mydomain.com/abc

www.mydomain.com/real-estate/abc
  

但是这会返回整个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) {

        }); 

1 个答案:

答案 0 :(得分:1)

你做的一切都很好:

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;