Google Maps多边形边界获取报错:polygon.forEach不是函数问题排查
解决Google Maps DrawingManager多边形完成回调中
forEach is not a function错误 嘿,我一眼就看出问题出在哪了——你对polygoncomplete事件的回调参数理解错啦!
问题根源
在polygoncomplete触发时,回调函数里的polygon参数是单个的Google Maps Polygon实例,不是一个包含多个feature的集合。你原来的代码里调用polygon.forEach(),但这个方法只有数组、FeatureCollection这类集合对象才具备,单个Polygon根本没有这个方法,所以浏览器才会抛出TypeError: polygon.forEach is not a function。
修正方案
我们直接对这个Polygon实例操作就行,它有专门的方法来获取顶点路径:
- 用
getPath()获取多边形的主顶点集合(如果是无孔洞的简单多边形,用这个就够了) - 如果多边形带内部孔洞,用
getPaths()获取所有路径(主路径+孔洞路径)
下面是修正后的代码:
drawingManager.addListener('polygoncomplete', function (polygon) { var bounds = new google.maps.LatLngBounds(); // 处理主路径(简单多边形的情况) polygon.getPath().forEach(function(latlng) { bounds.extend(latlng); }); // 额外处理带孔洞的多边形(可选,根据你的需求) polygon.getPaths().forEach(function(path) { path.forEach(function(latlng) { bounds.extend(latlng); }); }); console.dir(bounds); });
补充说明
- 如果你确定不会绘制带孔洞的多边形,那只保留主路径的遍历代码就足够了
- 这段代码会把所有顶点(包括孔洞的顶点)都纳入边界计算,最终得到的
bounds就是整个多边形的最小外接矩形,和矩形的getBounds()返回的效果一致
内容的提问来源于stack exchange,提问作者Balance
相关产品推荐
相关产品推荐

