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; }
验证步骤
运行优化后的代码后查看日志输出:
- 确认所有需要渲染的数据的坐标点数量都≥3
- 打开注释的镜头移动代码,确认每个多边形渲染时镜头会移动到对应区域,即可验证所有多边形是否正常渲染
内容的提问来源于stack exchange,提问作者Shreyas patne
相关产品推荐
相关产品推荐

