2013-05-30 14 views
8

Ho due layer geoJson in fase di caricamento: entrambi i layer sono gli stessi dati a scopo di test, ma vengono estratti da due file json diversi. Quando accendo e spengo i livelli nel controller del livello, l'ordine di disegno dei livelli cambia.Modifica ordine layer attivando/disattivando layer

Qualche idea del perché questo sta accadendo?

Ho posto il mio codice in un JSFiddle: http://jsfiddle.net/lprashad/ph5y9/10/ e il JS è qui sotto:

//styling for watersheds_copy 
var Orange = { 
    "color": "#ff7800", 
     "weight": 5, 
     "opacity": 0.65 
}; 

var Water_Orange = L.geoJson(watersheds_copy, { 
    style: Orange 
}); 

Water_Orange.addData(watersheds_copy); 

//these are blue 
var Water_blue = L.geoJson(watersheds, {}); 
Water_blue.addData(watersheds); 

//This sets the inital order - last in layer list being on top. Except minimal - tile layer is always on bottom 
var map = L.map('map', { 
    center: [41.609, -74.028], 
    zoom: 8, 
    layers: [minimal, Water_Orange, Water_blue] 
}); 

var baseLayers = { 
    "Minimal": minimal, 
     "Night View": midnight 
}; 

//This controls the order in the layer switcher. This does not change draw order 
var overlays = { 
    "Water_Orange": Water_Orange, 
     "Water_blue": Water_blue 
}; 
L.control.layers(baseLayers, overlays).addTo(map); 

LP

+0

Non vedo nulla sul jsfiddle. –

+0

Il tuo JSFiddle non funziona. Tuttavia, i livelli non dovrebbero cambiare l'ordine quando si accende o si spegne con il controllo Livelli. Vedi l'opzione 'autoZIndex' nella sezione L.Control.Layers nell'API: http://leafletjs.com/reference.html#control-layers. C'è qualche possibilità che tu stia cambiando gli strati al di fuori di questo controllo? –

+0

Ho risolto il JSFiddle: http://jsfiddle.net/lprashad/ph5y9/, grazie. Ho anche provato il set di autoZindex su true, ma questo non aiuta. Se spegni entrambi i livelli di spartiacque, quindi attiva il livello blu, quindi il livello arancione nel Controllo livelli: vedrai che i livelli finiscono in un ordine di disegno diverso rispetto a quando la mappa viene inizializzata. – Lee

risposta

0

Non è specifico per gli strati L.GeoJson. Per quanto ne so, è vero per tutti i livelli di Leaflet con controllo di livello. L'ultimo strato acceso è semplicemente in cima. Neanche io penso che sia un bug. È un comportamento prevedibile che uso e dipendo quando sto progettando mappe con controllo del livello ...

+0

Penso che l'utente troverebbe molto confuso quando tenta di fare clic sui punti che si trovano nella parte inferiore di un poligono. I livelli in cima alla lista sono attesi dagli utenti per disegnare in cima (come in un prodotto software desktop GIS). – jbchurchill

1

Almeno in 0.7.2, ho dovuto usare bringToFront nella richiamata di map.on('overlayadd'). autoZIndex: false non ha funzionato nel mio caso neanche. A comment on this issue potrebbe spiegare il motivo.

2

Durante la ricerca sono capitato in questo sito che mostra parte del codice Leaflet: http://ruby-doc.org/gems/docs/l/leaflet-js-0.7.0.3/lib/leaflet/src/control/Control_Layers_js.html

In esso ho trovato questa condizione per l'applicazione di autoZIndex:

if (this.options.autoZIndex && layer.setZIndex) { 
      this._lastZIndex++; 
      layer.setZIndex(this._lastZIndex); 
    } 

TileLayer è l'unico tipo di livello che ha una funzione setZIndex, quindi apparentemente autoZIndex funziona solo lì.

Non sono sicuro che mi infastidisca di più. Questa incredibile limitazione o il fatto che la documentazione di Leafet non lo evidenzia.