Openlayers - Kehilangan pilihan atau gaya pada layer redraw


10

Ketika saya memperbesar atau memindahkan peta, layer saya digambar ulang. Ini yang saya inginkan, karena saya memiliki banyak fitur untuk dimuat sekaligus. Ini kodenya:

    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)
});

Kode berikut adalah kode pilihan saya. Ini semua berfungsi seperti yang saya inginkan. Namun, ketika layer digambar ulang pemilihannya hilang dan onFeatureUnselect tidak diaktifkan (yang seharusnya). Saya tidak yakin apakah pilihannya benar-benar hilang atau gaya tersebut dipasang kembali.

    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

Fungsi onFeatureSelect dan onFeatureUnect saya pilih:

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];
}

Apa yang ada di fungsi onFeatureSelect Anda?
geografi

Saya telah memperbarui posting saya dengan dua fungsi
Boedy

Jawaban:


4

Saya telah menemukan cara termudah untuk mempertahankan pemilihan vektor di zoom, panning, dan redraws adalah menambahkan layer vektor kosong baru ke peta Anda, dan ketika fitur yang dipilih letakkan salinan di layer ini.

Anda dapat mengatur gaya lapisan pilih menjadi gaya yang terlihat jelas.

Dalam fungsi sorotan alat pilih Anda, tambahkan klon fitur ketika memilih, dan hapus ketika itu dipilih untuk kedua kalinya.

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]);
  }
}

Ini sedikit disederhanakan (dan belum teruji) - Anda mungkin ingin menyimpan lapisan pemilihan sebagai properti alat pilih Anda.

Periksa juga fungsi getFeatureById - Anda mungkin harus menggunakan properti unik yang berbeda pada fitur Anda daripada ID.


Terima kasih balasannya. Saya pikir ini mungkin solusi yang baik. Saya mengutak-atik beberapa kode, tetapi saya terjebak pada titik bahwa acara onFeatureUnselect tidak menyala ketika pilihan hilang. Jadi pada acara apa saya menghapus klon fitur? Lihat posting asli saya.
Boedy

@Boedy lihat jawaban yang diperbarui. Anda mungkin harus melakukan segalanya dalam fungsi pilih. Pilih satu untuk memilih, dan lagi untuk membatalkan pilihan.
geografi

Terimakasih banyak! Cheching jika fitur di lapisan yang dipilih membantu. Sekarang saya hanya punya masalah styling, tapi saya yakin saya bisa mengatasinya sendiri.
Boedy

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.