Порядок сортировки слоев в элементе управления Leaflet layer - PullRequest
0 голосов
/ 05 июля 2018

Я создал листовую карту для отображения некоторых данных geoJSON в отдельных вертикальных слоях.

Работает нормально, за исключением того, что элемент управления слоя будет перечислять параметры в неупорядоченном порядке, то есть «слой 0, слой 2, слой 1», а не «слой 0, слой 1, слой 2». Данные загружаются через вызовы AJAX, поэтому слои добавляются в элемент управления в порядке, в котором эти вызовы завершаются, то есть в основном случайным образом.

В соответствии с документацией для элемента управления слоями [https://leafletjs.com/reference-1.3.0.html#control-layers], если для sortLayers задано значение true, по умолчанию сортировка слоев производится по имени, но этого, похоже, не происходит.

Итак, я попытался явно передать функцию сортировки, но в документе не приводится пример того, как должен выглядеть.

Когда мой код выглядит так:

var layerControlOptions = {
    hideSingleBase : true,
    autoZIndex : true,
    sortLayers: true}
var layerControl = L.control.layers(null, null, layerControlOptions).addTo(map);

Элемент управления выглядит следующим образом:

управление слоями с помощью sortLayers: true и функция определения не определена

Мое лучшее предположение при написании моей собственной функции сортировки:

var layerControlOptions = {
    hideSingleBase : true,
autoZIndex : true,
sortLayers: true,
sortFunction: function(layerA, layerB, nameA, nameB){return 
[nameA,nameB].sort();}}
var layerControl = L.control.layers(null, null, 
layerControlOptions).addTo(map);

При этом имена слоев отображаются в том же порядке, в котором они не заданы. Не уверен, что я пишу это неправильно, или это просто эквивалент по умолчанию, который по какой-то причине возвращает неправильный порядок.

Похоже, такая же проблема здесь: Управление слоем листовки: Порядок

, который не имеет принятого ответа и не упоминает параметры управления слоем. Я попробовал решение, которое предлагается здесь, но оно также не решило проблему.

Любая помощь по этому вопросу будет принята с благодарностью, спасибо.

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете посмотреть это решение , чтобы упорядочить слои в элементах управления (это не упорядочивает слои). В основном я позаимствовал код из Код спецификации буклета ;

Если у вас нет проблем с сортировкой элементов в элементе управления, но у вас есть проблема, связанная с загрузкой JSON / GeoJSON (и, следовательно, слоя) в определенном порядке, вы можете объединить fetch с Promise.all, но это больше не так о Leaflet, но о знании JavaScript (посмотрите на эту страницу , чтобы попытаться понять fetch + Promise.all)

...