Quando amplio ou movo o mapa, minha camada é redesenhada. É isso que eu quero, porque tenho muitos recursos para carregar de uma só vez. Este é o código:
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)
});
O código a seguir é o meu código de seleção. Isso tudo funciona como eu não quero. No entanto, quando a camada é redesenhada, a seleção é perdida e o onFeatureUnselect não é acionado (o que deveria). Não tenho certeza se a seleção está realmente perdida ou se o estilo foi redefinido.
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
Minhas funções onFeatureSelect e onFeatureUnselect:
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];
}
openlayers-2
Boedy
fonte
fonte
Respostas:
Eu descobri que a maneira mais fácil de manter as seleções de vetor através de zoom, pan e redesenho é adicionar uma nova camada de vetor vazia ao seu mapa e, quando os recursos forem selecionados, faça uma cópia nessa camada.
Você pode definir o estilo de camada selecionado para ser um estilo claramente visível.
Nas funções de destaque da ferramenta de seleção, adicione um clone do recurso ao selecionar e remova-o quando ele for selecionado uma segunda vez.
Isso é um pouco simplificado (e não testado) - você provavelmente desejará armazenar a camada de seleção como uma propriedade da sua ferramenta de seleção.
Verifique também a função getFeatureById - pode ser necessário usar uma propriedade exclusiva diferente no seu recurso, em vez do ID.
fonte
Pelas minhas experiências ( http://ian01.geog.psu.edu/geoserver/www/wfs/wfs-sld2.html ), parece que a seleção e o estilo devem ser mantidos em um zoom.
fonte