OpenLayersの重複する機能に対処する


14

このように、ユーザーが別のポリゴンフィーチャと完全にオーバーラップするポリゴンフィーチャを作成した場合、…

…内側のフィーチャ、つまり他のフィーチャとオーバーラップしているフィーチャを選択する方法はありません。私は現在、SelectFeatureこのような単純なものを使用しています:

var select = new OpenLayers.Control.SelectFeature(
  [this.annotationLayer, this.controlPointsLayer], { 
    hover: true,
    renderIntent: "temporary"
    }
);
this.map.addControl(select);
select.activate();

しかし、明らかに、外側の機能を選択することしかできません。これに対処する典型的な方法は何ですか?ユーザーが内部機能も選択できるようにするにはどうすればよいですか?

おそらく最も簡単な解決策は、内側の特徴を差し引くときに残された領域内でのみ外側の特徴を選択可能にすることでしょう。


1
z-indexを作成する必要があります(注文)-openlayers.org/dev/examples/ordering.htmlを
Mapperz

それで、機能の可能な組み合わせをすべて重複して手動で確認しロードする前にカスタムzオーダーを割り当てる必要があるということですか?たとえば、ある機能が別の機能に完全に含まれているかどうかを判断する機能を持っていますか?
slhck

Zインデックスの順序が機能しない
-neogeomat

回答:


10

いくつかのオプション。いくつかの狂気:-)他より。基本的な戦略は

  • クラスター機能
  • 最上位の機能を非表示/移動する
  • トップ機能を介してクリックを送信します

==>

  1. 機能クラスタリング戦略をオンにする

  2. 独自のクラスタリングアルゴリズムを実装するため、新しいアイテムが追加または変更されると、アルゴリズムが再実行され、ネストされたforループチェックとn * n(-1)チェックが実行され、何が何と重複するかが確認されます-その後、機能プロパティを変更します重複する機能のリストを設定し、ユーザーが機能をクリックすると、重複する機能のリストを表示し、ユーザーが本当にクリックしたいものを選択するようにします。理にかなっていますか?

  3. クリック時の機能を実装する代わりに、マップクリックハンドラー全体を実装するだけです。そして、ユーザーがクリックしたときに、交差するフィーチャがないかレイヤーを確認します-そして、もしあれば、その男のポップアップを表示し、複数ある場合は、上記の#2のようなプロンプトリストを表示します。交差するものがない場合は、無視します。

  4. 右クリックオプションを実装して、機能を一時的に「非表示」にして、非表示の機能にアクセスできるようにします。次のものをクリックするとすぐに、非表示の機能をすべて再表示します

  5. #4と同様に、最上位の機能のポップアップ内に、機能を「隠す」ためのメニュー/リンク項目を追加します。#4のように進みます。

  6. #4/5と同様に、右クリックの「一時的な移動」を実装し、クリックしてフィーチャーをドラッグします(古い場所を思い出してください)。次に、ユーザーが下部の機能をクリックすると、上部の機能が元の位置に戻ります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.