1

我创建了一个应用程序,使用它可以在地图上绘制形状并且它们是可编辑的并且可以选择。

这是通过向绘图管理器添加“overlaycomplete”侦听器并编写用于设置所选形状或清除选择或删除形状的函数来实现的:

google.maps.event.addListener(drawingManager, 'overlaycomplete', function(e) {

        drawingManager.setDrawingMode(null);

        var shape = e.overlay;
        shape.type = e.type;

        google.maps.event.addListener(shape, 'click', function() {
            select(shape);
          });

然后可以将所有形状的详细信息保存在数据库中。我现在需要重新创建具有相同形状的地图,这些形状应该可以再次编辑。从数据库加载详细信息后,我重新创建了形状,但似乎无法在它们上设置侦听器以使用与以前使用的相同的功能。通过指定它们来简单地重绘形状:

shape = new google.maps.Polygon({
                map: map,
                paths: paths,
                zIndex: 90,
                strokeWeight: 0,
                fillColor: color,
                fillOpacity: 0.65,
                editable: true
              });

以这种方式绘制形状后,它们是可编辑的,但我不能一次选择一个形状,例如删除它。IE。无法使用先前编写的功能来操作形状。

有没有办法设置监听器?

4

1 回答 1

0

我找到了解决我的问题的方法。我保存的形状是由一个循环绘制的,并且总是有一个变量名,该变量名在循环运行时会递增。因此,在循环运行时,我在每个形状上设置了地图侦听器:

varString = "shape"+i;

    //Output shape
    window[varString] = new google.maps.Polygon({
                map: map,
                paths: paths,
                zIndex: 90,
                strokeWeight: 0,
                fillColor: color,
                fillOpacity: 0.65,
                myIndex: i,
                editable: true
              });

    google.maps.event.addListener(window[varString],"mouseout",function(){
                 path = this.getPath();
                 area = google.maps.geometry.spherical.computeArea(path);
                                     alert("area");
                });

现在我可以在每个形状上设置相同的功能,并且用户可以像以前一样编辑它们,主要区别在于现在无法使用“选择”功能,并且所有形状似乎始终都是“选择”的(可以拖动的角上的点在所有形状上始终可见)。

于 2012-10-11T11:06:30.430 回答