Openlayers - Katman yeniden çiziminde seçimi veya stili kaybetme


10

Haritayı yakınlaştırdığımda veya taşıdığımda katmanım yeniden çiziliyor. İstediğim bu, çünkü aynı anda yüklenecek özelliklerin bir sürü var. Bu kod:

    wfs = new OpenLayers.Layer.Vector("WFS", {
    strategies: [new OpenLayers.Strategy.BBOX({
                    resFactor: 1,
                    ratio:1
                })],
    protocol: new OpenLayers.Protocol.WFS({
              maxFeatures:1000,
              url:  myUrl,
              featureType: myFeatureType,
              featureNS: myFeaturedNS,
              version: "1.1.0"
              }),
      filter: setFilter(year, variant)
});

Aşağıdaki kod benim seçim kodum. Bütün bunlar istediğim gibi çalışıyor. Ancak, katman yeniden çizildiğinde seçim kaybolur ve onFeatureUnselect öğesi tetiklenmez (ki bu gerekir). Seçimin gerçekten kaybolduğundan veya stilin sıfırlandığından emin değilim.

    selectCtrl = new OpenLayers.Control.SelectFeature(
        wfs,
        {
            clickout: true, toggle: false,
            multiple: false, hover: false,
            box: true,
            toggleKey: "shiftKey", // ctrl key removes from selection
            multipleKey: "shiftKey",
            eventListeners: {
                featurehighlighted: onFeatureSelect,
                featureunhighlighted: onFeatureUnselect

            }
        }
    );

@geographika

My onFeatureSelect ve onFeatureUnselect işlevleri:

function onFeatureSelect(e) {
var feature = e.feature.attributes;
var featureclone = e.feature.clone();

var style = {
    pointRadius: 10,
    fillOpacity:0,
    strokeColor: "#000000"
    };

featureclone.style = style;

layer2.addFeatures([featureclone]);
selectedFeatures[featureclone.attributes.receptor_id] = featureclone;
}

function onFeatureUnselect(e) {
    var feature = e.feature.attributes;
    layer2.removeFeatures(selectedFeatures[feature.receptor_id]);   
    delete selectedFeatures[feature.receptor_id];
}

OnFeatureSelect işlevinizde neler var?
geographika

Yanıtlar:


4

Yakınlaştırma, kaydırma ve yeniden çizmeler arasında vektör seçimlerini korumanın en kolay yolunu haritanıza yeni bir boş vektör katmanı eklemektir ve özellikler seçildiğinde bu katmana bir kopya yerleştirin.

Katman seçme stilini açıkça görülebilir bir stil olarak ayarlayabilirsiniz.

Seçim aracı vurgulama işlevlerinizde, seçim yaparken özelliğin bir kopyasını ekleyin ve ikinci kez seçildiğinde kaldırın.

onFeatureSelect(feat){
  //check if the feature is in the select layer
  var cloned_feat = selectionLayer.getFeatureById(feat.id); 
  //or a getFeatureBy with a unique property

  if(cloned_feat){
      selectionLayer.removeFeatures([cloned_feat]);
  }
  else {
      var featCopy = feat.clone();
      this.sketchLayer.addFeatures([featCopy]);
  }
}

Bu biraz basitleştirilmiş (ve test edilmemiş) - muhtemelen seçim katmanını seçim aracınızın bir özelliği olarak saklamak isteyeceksiniz.

Ayrıca getFeatureById işlevini de kontrol edin - özelliğinizde kimlik yerine farklı bir benzersiz özellik kullanmanız gerekebilir.


Yanıtınız için teşekkürler. Bence bu iyi bir çözüm olabilir. Bazı kodlarla uğraşıyorum, ancak seçim kaybolduğunda onFeatureUnselect olayı tetiklenmediği noktada takılı kaldım. Peki hangi olayda özellik klonlarını kaldırırım? Orijinal gönderime bakın.
13'te Boedy

@Boedy güncellenmiş cevaba bakınız. Büyük olasılıkla select işlevindeki her şeyi yapmalısınız. Seçmek için bir kez ve seçimini kaldırmak için tekrar seçin.
geographika

Çok teşekkürler! Özelliğin seçilen katmanda olup olmadığını kontrol etmek yardımcı oldu. Şimdi sadece bir stil problemim var, ama eminim ki bunu kendim çözebilirim.
Boedy

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.