Я хотел бы иметь возможность изменить порядок слоев в листовке.
Я попытался реализовать два плагина листовок, чтобы изменить порядок слоев.
Сначала я попробовал leaflet-control-orderlayers , который, кажется, работает, но не поддерживает layerGroups, вот моя ошибка .
Затем я попробовал mapbbcode , который поддерживает layerGroups, но, похоже, не работает и не поддерживается.
У кого-нибудь есть предложения по реализации этой функции?
Ответы:
Вы можете сделать это несколькими способами (по крайней мере, так я это делаю):
layer.bringToFront()
и ,layer.bringToBack()
но они будут делать это только один слой за один раз, и только толкает его к передней или задней части , а не между ними. Таким образом, вам нужно будет расположить слои в нужном порядке, начать со слоя, на котором вы хотите быть внизу, и вызватьlayer.bringToFront()
каждый слой.Вы также можете сделать это, удалив и повторно добавив слой. Это кажется немного расточительным, но поскольку карта все равно должна перерисовываться при изменении положения слоев, это, как правило, не так уж важно.
Вот довольно сложная скрипка, которая иллюстрирует проблему
В основном вы удаляете все слои, а затем снова добавляете их в
z-index
порядке возрастания . Так что переберите все ваши слои наложения и вызовитеmap.removeLayer(layer)
, затем сортируйте их по вашему желаниюz-index
, затем добавьте их снова, используяlayer.addTo(map)
.источник
У меня возникла та же проблема, и я попробовал метод fixZOrder (), но, к сожалению, он не упорядочил маркеры Leaf для меня, так как он, похоже, не влияет на zindex маркеров Leaflet.
Похоже, что .bringToFront () работает только с векторными фигурами, которые поддерживают этот метод, в отличие от маркеров Leaf, которые я развернул, делая это решение неработоспособным, не говоря уже о другой проблеме кода, с которой я сталкивался с fixZOrder (), но это может быть уникально для мое дело.
Вместо этого я просто оставил порядок слоев в Leaflet (параметры) в порядке их загрузки, что вызвало проблемы с наложением маркеров (плагин OMS Spiderf) при использовании элементов управления слоями , но мне удалось решить их с помощью моей собственной функции, основанной на setZIndexOffset ()
Хотя мой сценарий не требовал, чтобы
fixZOrder(layers)
в конце концов кому-то другому, использующему этот метод вместе со стековыми маркерами, возможно, пришлось бы применить аналогичный подход, и поэтому я публикую это как дополнительное решение для потенциальных пользователей вышеупомянутого метода порядка слоев.
КРЕДИТ : Ghybs ответ на stackoverflow.com/a/37850189/11106279
источник
Аналогично ответу из @nothingisne Необходимы следующие действия
layer.bringToFront()
для поддержания z-порядка при комбинированнойlayer control
и асинхронной загрузке данных.Определите слои:
Используйте следующую функцию для обеспечения z-порядка:
При использовании элемента управления Layer, когда Layer переключается в поле зрения, он будет поверх других слоев, нам нужно повторно применять логику упорядочения при добавлении слоя. Это может быть сделано путем привязки к
overlayadd
событию на карте и вызоваfixZOrder
функции:источник
Вы должны создать панель для управления заказом.
При этом вы можете добавить слой на нужную панель.
источник