【问题标题】:how to get lat lng of position click on polyline?如何获得位置的纬度 lng 点击折线?
【发布时间】:2018-01-19 04:47:56
【问题描述】:

我通过以下方法得到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");
                }
            }
        });

【问题讨论】:

  • 折线不返回lat lng,我们只能设置lat lng,color。
  • 我知道但是没有办法获得折线点击位置 lat lng 吗?
  • 试试这个希望对你有帮助...stackoverflow.com/a/41304033/8143436
  • 看看this希望对你有帮助。
  • 不醒@HemantParmar

标签: android google-maps google-polyline


【解决方案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) like tolerance = 1000 / mMap.getCameraPosition().zoom;

【讨论】:

  • 谢谢它在缩放级别较低但缩放级别很高时单击折线外也被视为折线单击我该如何解决...有什么建议吗?
  • @akshay_shahane 您始终可以根据缩放级别修改tolerance,例如tolerance = 1000 / mMap.getCameraPosition().zoom; 或类似的东西。或者为每个缩放级别使用switch/caseswitch(mMap.getCameraPosition().zoom) { case 16: tolerance = 30; break; case 15: tolerance = 45; 等。
  • 像魅力一样工作......非常感谢......你拯救了我的一天
  • 非常好的解决方法,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多