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

Android端Google Map绘制多个Polygon仅显示最后一个如何解决?

Google Map多Polygon绘制修复方案

问题根因排查方向

你当前代码中的addpoly方法每次会新建独立的PolygonOptions实例,不存在复用覆盖的问题,仅显示最后一个多边形的常见原因如下:

  • 除最后一条数据外,其余LocationDataModel的getLatLngList()返回的坐标点数量不足3个(构成多边形最少需要3个有效坐标)
  • 其余多边形的坐标值不合法(纬度超出-9090范围、经度超出-180180范围)
  • 其余多边形的坐标范围不在地图当前可视区域内,或多个多边形完全重叠

优化后代码(增加合法性校验与日志排查)

@RequiresApi(api = Build.VERSION_CODES.O)
private void showAllLocationsOnMap(@NonNull GoogleMap googleMap) {
    Log.d("dataa", "总数据条数: " + allLocationsData.size());
    // 可选项:存储所有渲染完成的多边形对象,方便后续修改/删除操作
    List<Polygon> renderedPolygons = new ArrayList<>();

    for (int i = 0; i < allLocationsData.size(); i++) {
        LocationDataModel locationDataModel = allLocationsData.get(i);
        List<LatLng> polygonLatLng = locationDataModel.getLatLngList();
        // 打印单条数据的坐标数量,排查非法数据
        Log.d("dataa", "第" + i + "条数据坐标点数量: " + (polygonLatLng == null ? 0 : polygonLatLng.size()));
        
        // 仅渲染符合要求的多边形
        if (polygonLatLng != null && polygonLatLng.size() >= 3) {
            Polygon polygon = googleMap.addPolygon(addpoly(polygonLatLng));
            renderedPolygons.add(polygon);
            
            // 调试用代码:每渲染一个多边形就把镜头移动到该多边形区域,验证是否渲染成功
            // LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder();
            // for (LatLng point : polygonLatLng) {
            //     boundsBuilder.include(point);
            // }
            // googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(boundsBuilder.build(), 100));
        } else {
            Log.e("dataa", "第" + i + "条数据坐标不合法,跳过渲染");
        }
    }
}

public PolygonOptions addpoly(List<LatLng> arg) {
    PolygonOptions polygonOptions = new PolygonOptions();
    polygonOptions.addAll(arg)
            .strokeColor(Color.RED)
            .strokeWidth(2)
            .fillColor(Color.parseColor("#51000000"))
            .clickable(true); // 可选项:开启多边形点击,方便调试识别
    return polygonOptions;
}

验证步骤

运行优化后的代码后查看日志输出:

  1. 确认所有需要渲染的数据的坐标点数量都≥3
  2. 打开注释的镜头移动代码,确认每个多边形渲染时镜头会移动到对应区域,即可验证所有多边形是否正常渲染

内容的提问来源于stack exchange,提问作者Shreyas patne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:18:02