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

如何正确读取ArrayList<List<LatLng>>元素绘制GoogleMap多边形

问题原因

你的代码类型逻辑完全不匹配:

  • 你定义的perimetroArray是ArrayList<List<LatLng>>类型,外层列表的每个元素都是List<LatLng>,也就是单块多边形的全部边界坐标集合
  • PolygonOptions.add()方法要求传入的参数是单个或多个LatLng类型的坐标点,你直接调用perimetroArray.toArray(new LatLng[0])是尝试把外层存的List对象强转为LatLng类型,运行时必然抛出类型转换异常。
正确实现代码

你存储了两组解码后的边界坐标,本质是要绘制两个独立多边形,需要遍历外层集合,逐组取出坐标绘制即可:

// 初始化工具类实例
Coordenadas newClassObj = new Coordenadas();
// 拿到所有多边形的边界坐标集合
ArrayList<List<LatLng>> perimetroArray = newClassObj.getArrayPerimetro();

// 遍历每组坐标,逐个绘制多边形
for (List<LatLng> puntoList : perimetroArray) {
    Polygon currentPolygon = googleMap.addPolygon(new PolygonOptions()
            .clickable(true)
            .strokeColor(0x7700ff00)
            // 用addAll批量添加当前多边形的所有坐标点,不需要手动转数组
            .addAll(puntoList)
    );
    // 如需给多边形单独设置填充色、点击监听等逻辑,可在此处操作currentPolygon
}
补充说明
  • 如果你不需要绘制全部多边形,只需要绘制指定某一个,直接取下标对应坐标即可,比如绘制第一个多边形直接传perimetroArray.get(0)给addAll()
  • 不要混淆add()和addAll()的用法:add()是添加单个坐标点,addAll()支持直接传入坐标集合做批量添加
  • 你之前的转数组逻辑本质是搞错了集合的嵌套层级:外层存的是坐标列表,不是单个坐标点,永远无法直接转成LatLng[]数组。

内容的提问来源于stack exchange,提问作者Bellota Soft

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:39:18