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

GoogleMap调用addPolygon添加孔洞时抛出空列表异常,但列表非空

问题原因及解决方法

哈哈,这个坑我之前也踩过!你代码里的问题其实很简单——你只给多边形加了洞,却完全没定义主多边形的顶点坐标!

Google Maps的多边形洞是依附于主多边形存在的,就像你要在一块大饼上挖个洞,总得先有这块大饼吧?你的PolygonOptions只设置了填充色和洞的坐标,却没有调用add()或者addAll()来添加主多边形的顶点,SDK自然会认为主多边形的坐标列表是空的,抛出那个看起来有点误导的异常(虽然提示写的是List<LatLng> cannot be empty,但它指的是主多边形的坐标列表,不是洞的)。

另外还有个小细节要注意:洞的坐标环绕方向最好和主多边形相反(比如主多边形用顺时针,洞就用逆时针),这样Maps才能正确识别哪个是主区域、哪个是洞,避免出现“洞变成实心区,主区变成洞”的反向问题。

给你修正后的代码示例:

// 先定义主多边形的坐标(比如一个更大的闭合区域,这里用顺时针方向)
List<LatLng> mainPolygon = new ArrayList<>();
mainPolygon.add(new LatLng(-5, -5));
mainPolygon.add(new LatLng(15, -5));
mainPolygon.add(new LatLng(15, 15));
mainPolygon.add(new LatLng(-5, 15));
mainPolygon.add(new LatLng(-5, -5));

// 调整洞的坐标为逆时针方向(和主多边形方向相反)
List<LatLng> holeList = new ArrayList<>();
holeList.add(new LatLng(0, 0));
holeList.add(new LatLng(0, 10));
holeList.add(new LatLng(10, 10));
holeList.add(new LatLng(10, 0));
holeList.add(new LatLng(0, 0));

// 重点:先添加主多边形,再添加洞
map.addPolygon(new PolygonOptions()
        .fillColor(Color.RED)
        .addAll(mainPolygon) // 这一步是你之前漏掉的核心!
        .addHole(holeList));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:26:36