如何正确读取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
相关产品推荐
相关产品推荐

