带点的OpenLayers DrawFeature控件破坏双击缩放

OpenLayers DrawFeature control with Point destroys double click to zoom

本文关键字:双击 缩放 控件 DrawFeature OpenLayers      更新时间:2023-09-26

我从一个openlayers示例中复制了一些简单的代码,用于在地图上绘制几种不同类型的几何图形。问题是,每当选择"点"几何形状时,我就无法双击放大。示例和我的代码之间的唯一区别是我正在注册处理程序以使用MOD_SHIFT,因为我想保留平移/缩放的能力。下面是一段代码:

   point: new OpenLayers.Control.DrawFeature(this.geometryFilterLayer,
                            OpenLayers.Handler.Point, 
                            {
                                'done':  console.info("drew point")
                            },
                            {
                                keyMask: OpenLayers.Handler.MOD_SHIFT
                            }
                            ),
                        polygon: new OpenLayers.Control.DrawFeature(this.geometryFilterLayer,
                            OpenLayers.Handler.Polygon, 
                            {
                                'done':  console.info("drew polygon")
                            },
                            {
                                keyMask: OpenLayers.Handler.MOD_SHIFT
                            }
                            ),

上面代码的有趣之处在于,'done'事件只在控件/处理程序创建时触发,而keyMask根本不起作用——我必须循环遍历该对象并每次手动设置keyMask,但这不是手头的真正问题。

我已经尝试了我能想到的所有方法来注册一个dblclick事件,但无论如何,当我双击时,我不能让它放大。它适用于所有其他几何形状(bbox, point/radius和polygon)。

谁能给我一些建议?

我从未解决过这个问题,但最终完全放弃了使用MOD_XXX。当你按住shift、ctrl、alt等键时,每个不同的绘制控件都有太多的内置功能。我最终使用自定义按钮和工具栏,这样用户就可以显式地选择自己的绘图控件。

this.toolbar = new OpenLayers.Control.Panel({
                displayClass: 'olControlEditingToolbar'
            });
            map.addControl(this.toolbar);
var navButton = new OpenLayers.Control.Button({
                displayClass: "olControlNavigation", 
                title: "Navigation",
                trigger: lang.hitch(this, function(data){
                    this.toggleDrawControl("navigation");
                    navButton.activate();
                    pointButton.deactivate();
                    bboxButton.deactivate();
                    pointRadiusButton.deactivate();
                    polygonButton.deactivate();
                })
            }); 
...
this.toolbar.addControls([navButton, pointButton, bboxButton, pointRadiusButton, polygonButton]);

和我的切换绘制控件的函数(可以在外部调用,所以这就是为什么我重新调用激活和停用函数:

 toggleDrawControl: function(geometryType){
            this.currentGeometryType = geometryType;
            for(key in this.drawControls) {
                var control = this.drawControls[key];
                if(geometryType == key) {
                    control.activate();
                    this.drawingButtons[key].activate();
                } else {
                    control.deactivate();
                    this.drawingButtons[key].deactivate();
                }
            }
        }