@Nothing'den gelen cevaba benzer şekilde, layer.bringToFront()
birleştirilmiş layer control
ve eşzamansız veri yüklemeniz olduğunda z sırasını korumak için aşağıdaki kullanımlar gereksizdir .
katmanları temizlemek ve haritaya geri eklemek istemiyoruz çünkü bu tüm katmanları ekleyecektir, bunun yerine Katman Denetimi'nde seçilen katmanlara minimum ek yük ile saygı göstermek istiyoruz . bringToFront()
bunu ancak içinde katmanlar (içerik) olan bir katman grubunda çağırmalıyız.
Katmanları tanımlayın:
var dataLayers = {
Districts: new L.geoJSON(),
Farms: new L.featureGroup(),
Paddocks: new L.geoJSON(),
Surveys: new L.geoJSON()
};
L.control.layers(
// base maps
{
OSM: L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>', subdomains: ['a', 'b', 'c'] });,
},
dataLayers,
{
collapsed: false,
hideSingleBase: true
}).addTo(map);
Z sırasını zorlamak için aşağıdaki işlevi kullanın:
/**
* Ensure that layers are displayed in the correct Z-Order
* Instead of explicitly defining z-order on the groups the order of the calls to beingToFront controls the resulting zOrder
* @param {any} dataLayers Object that holds the references to the layer groups toggled by the layer control
**/
function fixZOrder(dataLayers) {
// only similar approach is to remove and re-add back to the map
// use the order in the dataLayers object to define the z-order
Object.keys(dataLayers).forEach(function (key) {
// check if the layer has been added to the map, if it hasn't then do nothing
// we only need to sort the layers that have visible data
// Note: this is similar but faster than trying to use map.hasLayer()
var layerGroup = dataLayers[key];
if (layerGroup._layers
&& Object.keys(layerGroup._layers).length > 0
&& layerGroup._layers[Object.keys(layerGroup._layers)[0]]._path
&& layerGroup._layers[Object.keys(layerGroup._layers)[0]]._path.parentNode)
layerGroup.bringToFront();
});
}
Katman denetimini kullanırken, bir Katman görünüme geçtiğinde, diğer katmanların üstünde olur, bir katman eklendiğinde sipariş mantığını yeniden uygulamamız gerekir. Bu overlayadd
, haritadaki olaya bağlanarak ve fixZOrder
işlevi çağırarak yapılabilir :
map.on('overlayadd', function (e) {
fixZOrder(dataLayers);
}
Verilerinizi eşzamansız olarak yüklerseniz fixZOrder
, veri yüklemeniz tamamlandığında da aramanız gerekebilir , çalışma zamanında eklenen yeni katmanlar diğer tüm katmanların üstünde oluşturulur.