Lorsque je fais un zoom ou que je déplace la carte, ma couche est redessinée. C'est ce que je veux, car j'ai beaucoup de fonctionnalités à charger en même temps. Voici le code:
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)
});
Le code suivant est mon code de sélection. Tout cela fonctionne comme je ne le veux pas. Cependant, lorsque le calque est redessiné, la sélection est perdue et le onFeatureUnselect n'est pas déclenché (ce qu'il devrait). Je ne sais pas si la sélection est vraiment perdue ou si le style est réinitialisé.
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
Mes fonctions onFeatureSelect et 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
la source
la source
Réponses:
J'ai trouvé que le moyen le plus simple de conserver les sélections vectorielles pour le zoom, le panoramique et les retraits consiste à ajouter une nouvelle couche vectorielle vide à votre carte, et lorsque les entités sont sélectionnées, placez une copie dans cette couche.
Vous pouvez définir le style de calque sélectionné comme un style clairement visible.
Dans les fonctions de mise en surbrillance de votre outil de sélection, ajoutez un clone de la fonction lors de la sélection et supprimez-la lorsqu'elle est sélectionnée une deuxième fois.
Ceci est légèrement simplifié (et non testé) - vous souhaiterez probablement stocker la couche de sélection en tant que propriété de votre outil de sélection.
Vérifiez également la fonction getFeatureById - vous devrez peut-être utiliser une propriété unique différente sur votre fonctionnalité plutôt que l'ID.
la source
D'après mes expériences ( http://ian01.geog.psu.edu/geoserver/www/wfs/wfs-sld2.html ), il semble que la sélection et le style devraient être maintenus par un zoom.
la source