Google地图绘图迭代叠加层上的所有形状

时间:2013-09-20 17:40:52

标签: google-maps loops drawing

我一直在使用谷歌地图绘图工具v3。如果用户创建了一个新的多边形,我使用这个例子来跟踪多边形的位置:

getpaths() polygons google maps api

代码:

var polygons = [];

       google.maps.event.addDomListener(drawingManager, 'polygoncomplete', function (polygon) {
           polygons.push(polygon);
           console.log("polygon complete");
       });

       google.maps.event.addDomListener(savebutton, 'click', function () {
           document.getElementById("savedatapolygon").value = "";
           console.log(polygons.length);
           for (var i = 0; i < polygons.length; i++) {
               var polygonBounds = polygons[i].getPath();
               // Iterate over the polygonBounds vertices.
               var PolyNum = i
               console.log(PolyNum);
               polygonBounds.forEach(function (xy, i) {
                   console.log('Coordinate: ' + PolyNum + ':' + i + '<br>' + xy.lat() + ',' + xy.lng());
               });
           }
       });

这对于用户创建多边形时很好,但是如果他们删除了多边形怎么办?数据仍存储在数组中。我似乎无法找到一种方法来跟踪哪个数组被删除,或者在用户点击保存时让它遍历所有形状。通过控制台,我可以看到可能有一个名为__gm_id的每个形状都有一个唯一的ID:但我不确定这是否是跟踪它的最佳方式。

另一个奇怪的事情是,当你编辑一个形状时,这些变化会以某种方式更新到多边形数组,即使代码中没有任何内容表明它应该。

1 个答案:

答案 0 :(得分:1)

Google示例显示删除对象的方法是使用:

selectedShape.setMap(null);

我发现通过将可见性设为false而不是删除来更容易跟踪多边形最终结果:

selectedShape.setOptions({ visible: false });

这样,在读取数组时,您可以检查它是否不可见:

polygons[i].getVisible()

在代码隐藏中,您可以在保存坐标时处理数据。您将获得所有已创建的内容,但可以选择仅保存可见的形状。