Kiedy powiększam lub przesuwam mapę, moja warstwa jest przerysowana. Właśnie tego chcę, ponieważ mam wiele funkcji do załadowania na raz. To jest 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)
});
Poniższy kod jest moim kodem wyboru. To wszystko działa tak, jak ja tego nie chcę. Jednak po przerysowaniu warstwy wybór zostanie utracony, a funkcja onFeatureUnselect nie zostanie uruchomiona (co powinno). Nie jestem pewien, czy wybór został naprawdę utracony lub czy styl został zresetowany.
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
Moje funkcje onFeatureSelect i 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
źródło
źródło
Odpowiedzi:
Znalazłem najłatwiejszy sposób na utrzymanie zaznaczenia wektora podczas powiększania, przesuwania i przerysowywania, dodając do mapy nową pustą warstwę wektorową, a po wybraniu obiektów umieść kopię na tej warstwie.
Możesz ustawić styl wybranej warstwy, aby był wyraźnie widoczny.
W funkcjach podświetlania wybranego narzędzia dodaj klon funkcji podczas wybierania i usuń ją, gdy zostanie wybrana po raz drugi.
Jest to nieco uproszczone (i niesprawdzone) - prawdopodobnie będziesz chciał zapisać warstwę wyboru jako właściwość wybranego narzędzia.
Sprawdź także funkcję getFeatureById - być może będziesz musiał użyć innej unikalnej właściwości na swojej funkcji niż ID.
źródło
Z moich eksperymentów ( http://ian01.geog.psu.edu/geoserver/www/wfs/wfs-sld2.html ) wydaje się, że wybór i styl powinny być zachowane po powiększeniu.
źródło