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];
}
Boedy
sumber
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.

geografi
sumber
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
0

Dari eksperimen saya ( http://ian01.geog.psu.edu/geoserver/www/wfs/wfs-sld2.html ) tampaknya pemilihan dan gaya harus dipertahankan melalui zoom.

Ian Turton
sumber
Dalam kasus Anda ini berfungsi. Tetapi kode Anda tidak menggunakan: resFactor: 1 dan rasio: 1. yang menyebabkan redraw ketika zoom diubah. Contoh Anda tidak memicu redraw.
Boedy
baik yang menyempit masalah turun untuk Anda kemudian
Ian Turton