我一直在使用谷歌地图绘图工具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:但我不确定这是否是跟踪它的最佳方式。
另一个奇怪的事情是,当你编辑一个形状时,这些变化会以某种方式更新到多边形数组,即使代码中没有任何内容表明它应该。
答案 0 :(得分:1)
Google示例显示删除对象的方法是使用:
selectedShape.setMap(null);
我发现通过将可见性设为false而不是删除来更容易跟踪多边形最终结果:
selectedShape.setOptions({ visible: false });
这样,在读取数组时,您可以检查它是否不可见:
polygons[i].getVisible()
在代码隐藏中,您可以在保存坐标时处理数据。您将获得所有已创建的内容,但可以选择仅保存可见的形状。