如何仅在设备屏幕指定区域显示Google Maps的polyline与标记?
实现方案
完全可以实现,根据你的场景推荐两种可选方案:
方案1:多边形镂空遮罩(推荐,适配你的UI布局)
你已经拿到红色区域四个角的LatLng坐标,可以直接通过Google Maps的Polygon图层做镂空遮罩,实现效果和你上下黑色视图完全一致:
- 首先创建一个覆盖当前地图全部可视区域的外层多边形,填充色设置为和上下黑色视图相同的纯黑色,关闭描边
- 把你获取到的红色区域四个角坐标作为镂空洞(hole)添加到该多边形中
- 调整图层层级:将遮罩图层的
zIndex设置为高于地图底图、低于你要显示的polyline和标记即可,所有添加的路径、标记会自然仅在红色镂空区域可见,不需要额外做裁剪逻辑
示例代码(Android端)
// 获取当前地图可视区域的四个边角坐标 val visibleRegion = googleMap.projection.visibleRegion val outerMapBounds = listOf( visibleRegion.farLeft, visibleRegion.farRight, visibleRegion.nearRight, visibleRegion.nearLeft, visibleRegion.farLeft ) // 你已获取的红色区域四个角坐标,注意顺序要和外层多边形方向相反保证镂空生效 val redHoleBounds = listOf( redTopLeft, redBottomLeft, redBottomRight, redTopRight, redTopLeft ) // 添加遮罩图层 googleMap.addPolygon( PolygonOptions() .addAll(outerMapBounds) .addHole(redHoleBounds) .fillColor(Color.BLACK) .strokeWidth(0f) .zIndex(1f) // polyline和marker的zIndex设为2以上即可显示在遮罩上方 )
- 适配地图交互:给地图添加
OnCameraMoveListener回调,当地图缩放、平移时同步更新遮罩的外层边界和红色镂空区域坐标即可。
方案2:坐标范围过滤(适合不需要遮罩的场景)
如果不需要黑色遮罩,仅需要超出红色区域的路径、标记自动隐藏,可以对元素做范围判断:
- 借助Android Maps Utils工具库的
PolyUtil.containsLocation方法,判断坐标点是否在红色区域范围内 - 仅保留/显示范围内部的标记、路径节点即可
// 检查坐标是否在红色区域内 boolean isInRange = PolyUtil.containsLocation(pointLatLng, redAreaBounds, true);
内容的提问来源于stack exchange,提问作者Brandon
相关产品推荐
相关产品推荐

