2013-05-30 11 views
8

Ich habe zwei geoJson-Ebenen geladen - beide Ebenen sind die gleichen Daten für Testzwecke, werden aber aus zwei verschiedenen JSON-Dateien gezeichnet. Wenn ich die Ebenen im Ebenen-Controller ein- und ausschalte, ändert sich die Zeichenreihenfolge der Ebenen.Ebenenreihenfolge beim Ein-/Ausschalten der Ebene

Irgendwelche Ideen, warum das passiert?

Ich habe meinen Code in eine JSFiddle setzen: http://jsfiddle.net/lprashad/ph5y9/10/ und der JS ist unten:

//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

Ich sehe nichts auf Ihrer Hand. –

+0

Ihr JSFiddle funktioniert nicht. Ihre Ebenen sollten jedoch nicht die Reihenfolge ändern, wenn Sie mit dem Ebenen-Steuerelement ein- und ausschalten. Siehe die Option "autoZIndex" im Abschnitt L.Control.Layers in der API: http://leafletjs.com/reference.html#control-layers. Gibt es eine Chance, dass Sie die Ebenen außerhalb dieser Kontrolle ändern? –

+0

Ich reparierte den JSFiddle: http://jsfiddle.net/lprashad/ph5y9/, danke. Ich habe auch versucht, den AutoZindex auf True zu setzen, aber das hilft nicht. Wenn Sie beide Wasserscheiden-Layer deaktivieren, aktivieren Sie die blaue Ebene und dann die orange Ebene im Ebenen-Steuerelement. Sie werden sehen, dass die Ebenen in einer anderen Zeichenreihenfolge enden als beim Initialisieren der Karte. – Lee

Antwort

0

Es zu L.GeoJson Schichten nicht spezifisch ist. Soweit ich das beurteilen kann, gilt das für alle Leaflet-Layer mit Layer-Kontrolle. Die letzte Ebene ist einfach oben. Ich denke auch nicht, dass dies ein Fehler ist. Es ist vorhersagbares Verhalten, das ich benutze und davon abhängig bin, wenn ich Karten mit Schichtsteuerung entwerfe ...

+0

Ich denke, der Benutzer würde das sehr verwirrend finden, wenn er versucht, auf Punkte zu klicken, die sich auf der Unterseite eines Polygons befinden. Die oberste Ebene in der Liste wird von den Benutzern erwartet, um oben zu zeichnen (wie in einem GIS-Desktop-Software-Produkt). – jbchurchill

1

Zumindest auf 0.7.2 musste ich bringToFront im Rückruf von map.on('overlayadd') verwenden. autoZIndex: false hat in meinem Fall auch nicht funktioniert. A comment on this issue kann den Grund erklären.

2

Bei der Suche stieß ich auf dieser Website, die einen Teil der Broschüre Code zeigt:

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

TileLayer ist die einzige Schicht Typ: http://ruby-doc.org/gems/docs/l/leaflet-js-0.7.0.3/lib/leaflet/src/control/Control_Layers_js.html

Darin ich diese Voraussetzung für die Anwendung von autoZIndex gefunden das hat eine setZIndex Funktion, also funktioniert scheinbar autoZIndex nur dort.

Ich bin mir nicht sicher, was mich mehr nervt. Diese unglaubliche Einschränkung oder die Tatsache, dass die Leafet-Dokumentation nicht darauf hinweist.

Verwandte Themen