0

全て。私はこの小さな問題を抱えており、助けを求めています:

最初に、次を含む関数があります。

var point = new OpenLayers.Geometry.Point(imageConfig.XPos, imageConfig.YPos);
var imageFeature = new OpenLayers.Feature.Vector(point);
layers.imageLayer.addFeatures([imageFeature]);

そのため、レイヤー上にポイントが描画されます。このレイヤーには、openlayers ドラッグ コントロールもあります。ポイントが描画された後にアクティブ化されます。これで、ポイントをドラッグできます。魅力のように機能します。

これは、ユーザー主導の段階的な手順の一部です。したがって、ドラッグが完了したら、次のステップでポイントを使用して何かを行います。これらの他のステップの間、ドラッグ コントロールは無効になります。この手順では、ステップ間をジャンプできるため、ドラッグ コントロールの無効化/有効化が必要です。これはうまくいきます。

すべてのステップが終了すると、ポイントはレイヤーから削除されます。また、これはうまく機能します。

BUT:レイヤー上にポイントを描画する関数を再度呼び出して(原因は新しいものです)、ドラッグコントロールをアクティブにすると、マウスクリックでポイントを選択しようとしても、新しいポイントをドラッグできなくなりますか? !

私は firbug で制御しました:

  • 機能はあります
  • 機能は右のレイヤーにあります
  • コントロールはそこにある
  • コントロールは右のレイヤーにあります
  • コントロールが有効になります

多分私はここで簡単なことを見逃しています。しかし、私はこれについて2日間頭を悩ませていますが、答えが見つかりません。

ちなみに、最初のステップ シーケンス (すべてがうまく機能する場合) では、コントロール機能のプロパティがポイント機能で設定されていることがわかりました。しかし、2番目ではありません。コントロールのドラッグ ハンドラー機能プロパティでも同じです。

次の方法で手動で設定しようとしました:

control.feature = imageFeature

と:

control.handler.drag.feature = imageFeature

新しい機能をコントロールに設定する機能を探していました。しかし、openlayers ドキュメントには何も見つかりません。他のコントロールは同時にアクティブではありません (firebug で制御します)。

しかし、運がありません。役に立ちませんでした。なぜこれ?私はこれがうまくいくはずだと確信しています。私はここに立っていることを間違っているか、見逃していますか???

すべての助けに感謝します。

ありがとう

4

1 に答える 1

0

自分で思いつきました。問題は、グリッド内のポイントを表示するために geoext フィーチャ ストアを使用したことでした。このグリッドは、geoext フィーチャ選択モデルで構成されました。これをコピーしたところです... 選択モデルは、マップ上の機能選択コントロールも割り当てます。最初のラウンドでは、これは後でロードされるため、ドラッグ コントロールと競合しません。

ツールが再び最初のステップに入ると、すべてのコントロールがマップに読み込まれます。選択コントロールとドラッグ コントロールが有効になります。これは、オープン レイヤーでは処理できません。追加されたコントロールを最後にマップするのが優先されるようです。したがって、ドラッグ コントロールを何度も有効にすることができます。選択コントロールが勝ちます。

秘訣は、選択コントロールを切断することです。その後、すべてが完璧に機能します。

于 2013-03-08T11:22:44.113 に答える