0

マップ上にいくつかの異なるタイプのジオメトリを描画するために、openlayers の例の 1 つからコピーしたいくつかの単純なコードがあります。問題は、「ポイント」ジオメトリが選択されるたびに、ダブルクリックしてズームインする機能を失うことです。例と私のコードの唯一の違いは、保持したいので、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、ポイント/半径、およびポリゴン) で正常に機能します。

誰かアドバイスをくれませんか?

4

1 に答える 1

0

私はこの問題を解決したことはありませんが、最終的には 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();
                }
            }
        }
于 2013-05-25T04:59:12.553 に答える