Я помогаю своим ученикам с картой некоторых данных, связанных с ураганом «Сэнди». У них есть четыре тайловых слоя (MapBox Street, MapBox Satellite, NOAA Satellite и NOAA Inundation) и несколько векторных слоев.
При первой загрузке на карте отображаются плитки MapBox Streets с некоторыми векторными данными наверху с возможностью переключения на слой MapBox Satellite в качестве базовой карты. Затем пользователи могут добавить слой затопления поверх базовой карты (слой затопления достаточно сложен, поэтому ему нужны плитки вместо визуализированных полигонов).
Проблема возникает при переключении слоев базовой карты после добавления на карту слоя затопления. Мои студенты используют L.map.addLayer (data, insertAtTheBottom ), чтобы добавить новый слой базовой карты внизу (после удаления старого), но по какой-то причине слой добавляется только под векторными слоями, а не под слоем тайлов затопления. Когда базовые слои отключаются, вы можете ясно видеть, что слой тайлов затопления все еще существует, он просто не будет располагаться поверх нового базового слоя.
Кто-нибудь знает, почему это так? В документации указано, что этот параметр гарантирует, что новый слой будет добавлен ниже всех других слоев.
Живой пример страницы: http://personal.psu.edu/rsm5068/src/map.html
Соответствующий сегмент кода
<body>
<div id="map"></div>
<div id="controls">
<input type="checkbox" id="toggleSatellite" /><label for="toggleSatellite">Toggle Satellite</label>
</div>
<script type="text/javascript">
var map = null,
layerStreets,
layerSatelliteNow,
layerSatelliteThen,
layer1MSurge,
layer3MSurge,
lgrpBase,
lgrpSurge;
map = L.map("map", {
'center' : L.latLng(40.7127, -74.0059),
'zoom' : 10,
'minZoom' : 9,
'maxZoom' : 16
})
// ---- Tile Layers ----
layerStreets = L.mapbox.tileLayer("user.id");
layerSatelliteNow = L.mapbox.tileLayer("user.id");
layer1MSurge = L.mapbox.tileLayer("user.id");
layer3MSurge = L.mapbox.tileLayer("user.id");
lgrpSurge = L.layerGroup();
lgrpSurge
.addLayer(layer3MSurge)
.addLayer(layer1MSurge);
// ---- Adding Data to Map ----
map
.setMaxBounds(L.latLngBounds(L.latLng(40.4600,-74.33),L.latLng(40.9400,-73.667)))
.addLayer(layerStreets)
.addLayer(lgrpSurge)
.addLayer(fgrpEvacCenters);
// ---- Interactivity ----
$("#toggleSatellite").change(function () {
if ($("input[id='toggleSatellite']:checked").length > 0) {
map
.removeLayer(layerStreets)
.addLayer(layerSatelliteNow, true);
} else {
map
.removeLayer(layerSatelliteNow)
.addLayer(layerStreets, true);
}
})
</script>
</body>