2013-05-30 15 views
8

Mam dwie załadowane warstwy geoJson - obie warstwy są tymi samymi danymi do celów testowych, ale są rysowane z dwóch różnych plików json. Kiedy włączam i wyłącza warstwy w kontrolerze warstw, kolejność rysowania warstw zmienia się.Zmiana kolejności warstw podczas włączania/wyłączania warstwy

Jakieś pomysły, dlaczego tak się dzieje?

Włożyłem mój kod do JSFiddle: http://jsfiddle.net/lprashad/ph5y9/10/ i JS jest poniżej:

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

Nic nie widzę na twoim jsfiddle. –

+0

Twój JSFiddle nie działa. Jednak twoje warstwy nie powinny zmieniać kolejności przy włączaniu/wyłączaniu za pomocą kontrolki Warstwy. Zobacz opcję 'autoZIndex' w sekcji L.Control.Layers w interfejsie API: http://leafletjs.com/reference.html#control-layers. Czy jest szansa, że ​​zmieniasz warstwy poza tą kontrolą? –

+0

Naprawiłem JSFiddle: http://jsfiddle.net/lprashad/ph5y9/, dziękuję. Próbowałem również ustawić autoZindex na true, ale to nie pomaga. Jeśli wyłączysz obie warstwy działu wodnego, a następnie włączysz niebieską warstwę, a następnie pomarańczową warstwę w warstwie kontrolnej - zobaczysz, że warstwy kończą się w innej kolejności rysowania niż podczas inicjowania mapy. – Lee

Odpowiedz

0

To nie jest specyficzny dla warstw L.GeoJson. O ile wiem, dotyczy to wszystkich warstw ulotek z kontrolą warstwy. Ostatnia warstwa jest po prostu na wierzchu. Myślę, że to też nie jest błąd. Jest to przewidywalne zachowanie, którego używam i zależy od tego, kiedy projektuję mapy z kontrolą warstw ...

+0

Myślę, że użytkownik znalazłby to bardzo mylące podczas próby kliknięcia punktów znajdujących się na spodzie wielokąta. Warstwy na górze listy oczekują od użytkowników rysowania na wierzchu (tak jak w oprogramowaniu GIS dla komputerów stacjonarnych). – jbchurchill

1

Przynajmniej na 0.7.2, musiałem użyć bringToFront w oddzwonieniu map.on('overlayadd'). autoZIndex: false nie działa również w moim przypadku. A comment on this issue może wyjaśnić przyczynę.

2

Podczas poszukiwań natknąłem się na tej stronie, że przedstawia niektóre kodu PACJENTA: http://ruby-doc.org/gems/docs/l/leaflet-js-0.7.0.3/lib/leaflet/src/control/Control_Layers_js.html

W nim znalazłem ten warunek do zastosowania autoZIndex:

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

TileLayer jest jedynym rodzajem warstwy który ma funkcję setZIndex, więc najwyraźniej autoZIndex działa tam tylko.

Nie jestem pewien, który bardziej mnie denerwuje. To niewiarygodne ograniczenie lub fakt, że dokumentacja Leaflet nie wskazuje tego.

Powiązane problemy