You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在设备屏幕指定区域显示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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:21:03