Ho una mappa OpenLayers con un livello base raster, un livello vettoriale e un livello marcatori in questo ordine. Visualizzano bene, nell'ordine corretto con i marcatori in cima ai vettori, grandiosi.Forzare un livello Marker OpenLayers per disegnare in alto e con livelli selezionabili sotto
Ma quando aggiungo un controllo SelectFeature e lo indirizza al livello vettoriale, viene improvvisamente disegnato sopra il livello dei marker, nonostante tutti gli sforzi per aumentare il livello del marker o impostare l'indice Z. Sembra che il controllo SelectFeature sovrascriva tutte le impostazioni dell'ordine di disegno. È questo di progettazione, o posso superare questo in qualche modo?
Le definizioni di layer:
var baselayer = new OpenLayers.Layer.WMS('Norden',
'http://{myarcgisserver}/ArcGIS/services/mylayer/MapServer/WMSServer', {
layers :'1,2',
transparent :false,
width :'auto',
height :'auto',
filter :null
}, {
isBaseLayer: true,
singleTile :true,
ratio :1,
alpha :false,
transitionEffect :'resize'
});
var vectorLayer = new OpenLayers.Layer.Vector("Work orders", {
projection: new OpenLayers.Projection("EPSG:2400"),
strategies: [new OpenLayers.Strategy.Fixed(), refresh],
protocol: new OpenLayers.Protocol.HTTP({
url: "/WorkOrder/WorkOrders.ashx?output=geojson",
format: new OpenLayers.Format.GeoJSON()
})
});
var markerlayer = new OpenLayers.Layer.Markers("Markers", {
projection: new OpenLayers.Projection("EPSG:2400"),
displayInLayerSwitcher: false
}
);
La definizione di controllo:
var selectctrl = new OpenLayers.Control.SelectFeature(
vectorLayer,
{
clickout: true,
toggle: false,
multiple: false,
hover: false,
toggleKey: "ctrlKey", // ctrl key removes from selection
multipleKey: "shiftKey", // shift key adds to selection
box: false
}
);
Attivazione: (Senza questo, gli strati disegnano nell'ordine corretto)
map.addControl(selectctrl);
selectctrl.activate();
Edit: Trovati questo in OpenLayers.Handler.Feature, dove il "moveLayerToTop" si sente come il colpevole ... cercherà di superarlo, ma se qualcuno lo sa che è impossibile, per favore fatemelo sapere!
/**
* Method: activate
* Turn on the handler. Returns false if the handler was already active.
*
* Returns:
* {Boolean}
*/
activate: function() {
var activated = false;
if(OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
this.moveLayerToTop();
this.map.events.on({
"removelayer": this.handleMapEvents,
"changelayer": this.handleMapEvents,
scope: this
});
activated = true;
}
return activated;
},
Lei signore è una specie di genio! – Johnny
@Johnny: haha, grazie! Hai reso la mia giornata! :-) –
@Nikalas: Grazie Niklas per la soluzione di pubblicazione. Funziona molto bene e come previsto :) – Nachiket