如何单击标记下方的 GoogleMap 多边形?

Posted

技术标签:

【中文标题】如何单击标记下方的 GoogleMap 多边形?【英文标题】:How to click a GoogleMap Polygon below a Marker? 【发布时间】:2019-07-26 18:19:23 【问题描述】:

我的 android 应用程序使用 GoogleMapPolygons 来向用户显示感兴趣的区域。如果用户单击Polygon,则单击事件由OnPolygonClickListener 处理,并显示一个信息对话框。我的问题在于Marker 显示了用户的当前位置,这阻止了点击事件传递到下面的Polygon

旁注:标记的点击区域似乎也比可见区域大。这个圆圈实际上几乎挡住了它下面的整个正方形。

到目前为止我尝试了什么:

捕获点击事件并忽略它

getMap().setOnMarkerClickListener(new OnMarkerClickListener() 
    public boolean onMarkerClick(Marker marker) 
        return true;
    
);

在这种情况下不起作用,因为我们可以返回 false 触发默认行为(放大标记)或返回 true 完全忽略点击事件,因为 - per documentation - 每次点击只有一个事件。

更改多边形的 z-index:不起作用,因为 - 再次根据文档 - “与其他叠加层或形状相比,标记被有效地视为位于单独的 z-index 组中,而不管其他叠加层”,因此点击事件总是首先传递给潜在的标记。

那么有没有办法使Polygon 下方的Marker 可点击或至少将可点击标记区域减小到可见大小?

【问题讨论】:

issuetracker.google.com/issues/35823783 那很不幸。所以减少可点击的标记区域已经不可能了.. 单击标记时,检查其位置是否在您的多边形之一的边界内,如果是,则触发多边形点击事件。 我想这是一个快速修复(假设我们使用 PolyUtils)。谢谢 【参考方案1】:

按照 MrUpsidown 的建议并使用 googlemaps PolyUtil 我实施了手动验证以手动触发 Polygon 目标点击。在处理大量多边形时,我无法判断containsLocation() 的效率,但它暂时有效。

mMap.setOnMarkerClickListener  marker ->
            if (marker == userLocation) 
                mPolygons.forEach  polygon ->
                    if(PolyUtil.containsLocation(userLocation?.position, polygon.points, false)) 
                        // Do Polygon stuff here
                        return@forEach
                    
                
                true
             else 
                // Do optional marker stuff here
               true
            
    

【讨论】:

以上是关于如何单击标记下方的 GoogleMap 多边形?的主要内容,如果未能解决你的问题,请参考以下文章

从地图中删除多边形

无法在不单击标记的情况下在 GoogleMap 中显示信息窗口 - GoogleMap Cluster Android

GoogleMap,如何在单击 Market en Flutter 时删除图标

Swift 5:如何在点击/触摸坐标时在 GoogleMap 上添加标记?

单击其他时更改谷歌地图标记图标

使用 R googlemap 包按集群收集标记