OpenLayers'ta örtüşen özelliklerle başa çıkma


14

Kullanıcılar bunun gibi bir başkasıyla tamamen örtüşen bir çokgen özelliği oluşturuyorlarsa ...

… O zaman içsel özelliği seçmenin başka bir yolu yoktur, yani diğeriyle çakışan özellik. Şu anda SelectFeatureböyle bir basit kullanıyorum :

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

Ama açıkçası, sadece dış özelliği seçebilirim. Bununla baş etmenin tipik yolu nedir? Kullanıcının iç özelliği de seçmesini nasıl sağlayabilirim?

En basit çözüm muhtemelen dış özelliği sadece iç özelliği çıkarırken kalan alanda seçilebilir yapmak olacaktır - ancak bunu nasıl yapacağım hakkında hiçbir fikrim yok.


1
Bir z-endeksi (Sıralama) oluşturmanız gerekir - bkz. Openlayers.org/dev/examples/ordering.html
Mapperz

Vay be, yani örtüşmeler için her olası özellik kombinasyonunu manuel olarak kontrol etmem ve yüklemeden önce özel bir z sırası atamam gerekir mi? Mesela… bir özelliğin tamamen diğerinin içinde olup olmadığını belirleyen bir işleve sahip olmak?
slhck

z-endeksi sıralaması çalışmıyor
neogeomat

Yanıtlar:


10

Birkaç seçenek. Bazıları daha çılgın :-) diğerlerinden daha. Temel stratejiler

  • Küme özellikleri
  • Üst özelliği gizleme / taşıma
  • Tıklamayı en üst özellik aracılığıyla gönderin

==>

  1. Özellik kümeleme stratejisini açma

  2. Kendi kümeleme algoritmanızı uygulayın, böylece yeni bir öğe eklendiğinde veya değiştirildiğinde, algoritmanız yeniden çalışır ve iç içe döngü denetimi yapar ve n * n (-1) neyin neyle çakıştığını görmek için kontrol eder - sonra özellik özelliğini değiştirin örtüşen özelliklerin bir listesini ayarlamak için ve kullanıcı özelliği tıkladığında, örtüşen özelliklerin bir listesini görüntüleyin ve kullanıcının gerçekten tıklamak istediklerini seçmesini sağlayın. Mantıklı?

  3. Tıklama özelliği uygulamak yerine, tüm bir harita tıklama işleyicisini uygulamanız yeterlidir. Kullanıcı tıkladığında, kesişen özellikler olup olmadığını ve (varsa) o adamın pop-up'ını görüntüleyin ve birden fazla varsa yukarıdaki # 2 gibi bir bilgi istemi listesi görüntüleyin. Hiçbiri kesişmezse, görmezden gelin.

  4. Gizli özelliğe erişmenizi sağlamak için bir özelliği geçici olarak "gizlemek" için bir sağ tıklama seçeneği uygulayın. Bir sonrakine tıklanır tıklanmaz, tüm gizli özellikleri yeniden görüntüleyin

  5. # 4'e benzer şekilde, en üstteki özelliğin açılır penceresinin içine, özelliği "gizlemek" için bir menü / bağlantı öğesi ekleyin. Ve # 4'teki gibi devam edin.

  6. # 4/5 ile benzer ish sağ tıklama "geçici hareket" uygulamak ve özelliği dışına sürükleyin [eski nokta hatırlıyorum] tıklayın. Daha sonra kullanıcı alt özelliği tıklar ve üstteki özellik orijinal konumuna geri döner.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.