1 问题复现

使用L.tileLayer加载底图(A、B、C)并使用layerControl管理、在用L.tileLayer.wms添加wms服务(D),当切换ABC时会压盖D

视频中右下角的wms服务(D)只有在切换ing看得到,切换完成就被压盖了
有问题代码如下

const mapUrl = "http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=xxx";
const vecUrl = "http://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=xxx";
// 天地卫星图
const layerA = L.layerGroup([
L.tileLayer(mapUrl, {
maxZoom: 20,
minZoom: 3
})
])
// 天地矢量图
const layerB = L.layerGroup([
L.tileLayer(vecUrl, {
maxZoom: 20,
minZoom: 3
})
])
// 高德卫星
const layerC = L.layerGroup([
L.tileLayer('https://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', {
maxZoom: 18,
maxNativeZoom: 16,
minZoom: 3,
attribution: '高德地图 AutoNavi.com',
subdomains: '1234'
})
])
const baseLayers = {
'A': layerA,
'B': layerB,
'C': layerC
} // 记载wms服务
let layerName = 'layerName' // 修改为可访问的图层名
let url = 'url' // 修改为可访问地址
const layerD = L.layerGroup([
L.tileLayer.wms(url, {
layers: layerName,
format: 'image/png',
transparent: true,
attribution: layerName
})
])
//
var map = L.map('map', {attributionControl: false, layers: [layerA]}).setView([29.04656, 112.86254], 8);
L.control.layers(baseLayers,null, {position: 'topleft', sortLayers: true}).addTo(map)

2 解决方案

2.1 使用layerControl的overlayer

layerControl可以将图层分为baselayer (基础层) 和overlayer(覆盖层)两种.

基础层是互斥的,一次只能显示一个,覆盖层是可以叠加的,并且在基础层之上。

将D图层放在overlayer中可以避免覆盖

const overlayers = {
'D': layerD
}
L.control.layers(baseLayers, overlayers, {position: 'topleft', sortLayers: true}).addTo(map)

效果

2.2 使用setZIndex

setZIndex方法可以设置图层的顺序 (适用于 L.imageOverlay、L.layerGroup、L.GridLayer)

使用setZIndex可以更加灵活配置

L.control.layers(baseLayers, null, {position: 'topleft', sortLayers: true}).addTo(map)
layerD.addTo(map)
layerD.setZIndex(10)

效果

上面的L.tileLayer和L.tileLayer.wms都是用layerGroup管理,也可以不用layerGroup管理,直接addTo(map),但是没有setZIndex方法不好控制图层顺序

【Leaflet专题篇】L.tileLayer图层顺序问题的更多相关文章

  1. iOS开发UI篇—CAlayer(创建图层)

    iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...

  2. Java语法专题1: 类的构造顺序

    合集目录 Java语法专题1: 类的构造顺序 问题 下面的第二个问题来源于Oracle的笔试题, 非常经典的一个问题, 我从07年开始用了十几年. 看似简单, 做对的比例不到2/10. 描述一下多级继 ...

  3. Java语法专题2: 类变量的初始化顺序

    合集目录 Java语法专题2: 类变量的初始化顺序 问题 这也是Java面试中出镜率很高的基础概念问题 描述一下多级继承中字段初始化顺序 描述一下多级继承中类变量初始化顺序 写出运行以下代码时的控制台 ...

  4. ArcGIS 切片与矢量图图层顺序问题

    在项目中有个需求:根据图层索引添加图层 看到这个需求一下子想到 map.addLayer(layer,index?) 接口 但是问题出现了,我切片图加载顺序在矢量图之后就不行! map = new M ...

  5. django 实战篇之视图层

    视图层(views.py) django必会三板斧 HttpResponse >>> 返回字符串 render >>> 支持模板语法,渲染页面,并返回给前端 red ...

  6. js技巧专题篇: 页面跳转

    本篇主要介绍网页上常见的页面跳转技术.页面跳转有几种方式,比较常用的是window.location.href,window.location.replace,window.open,当然还有目前比较 ...

  7. Leaflet中添加的不同图层样式图标

    如上图,具体问题请查看对应html页引用的basemaps的css样式. 如下图是本项目引用的css样式: .basemap img { width: 48px; border: 2px solid ...

  8. x86 Android游戏开发专题篇之使用google breakpad捕捉c++崩溃(以cocos2dx为例)

    近期一直都在x86设备上进行游戏开发.就c++层和Android java层倒没有什么要特别注意的(除了须要注意一下改动Application.mk指定平台外),在c++崩溃的时候,非常多时候看不到堆 ...

  9. cesium 之图层管理器篇(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  10. 数据结构顺序表中Sqlist *L,&L,Sqlist *&L

    //定义顺序表L的结构体 typedef struct { Elemtype data[MaxSize]: int length; }SqList; //建立顺序表 void CreateList(S ...

随机推荐

  1. [UR #14]人类补完计划

    计数好题. 题意:给定简单无向图 \(G=(V,E),|V|=n,|E|=m\),有 \(n\leq 16,m\leq {n\choose 2}\),求所有为基环树的子图的权值之和.一个基环树的权值定 ...

  2. Windows亚克力特效代码实现(Dev c++可以编译通过)

    #include <windows.h> #include <dwmapi.h> // 定义一个枚举类型,表示不同的窗口组合状态 enum AccentState { ACCE ...

  3. 记一次某CMS代码审计(转载)

    作者:ddwGeGe 本文转自先知社区:https://xz.aliyun.com/t/11774 前言 无意中浏览到某小众OA官网且可以下载到源码,随机审计一波,最后成功Getshell,大佬勿喷 ...

  4. 2023-01-11:体育馆的人流量。编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。返回按 visit_date 升序排列 的结果表。 DROP TAB

    2023-01-11:体育馆的人流量.编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录.返回按 visit_date 升序排列 的结果表. DROP TABL ...

  5. 2020-08-20:GO语言中的协程与Python中的协程的区别?

    福哥答案2020-08-20: 1.golang的协程是基于gpm机制,是可以多核多线程的.Python的协程是eventloop模型(IO多路复用技术)实现,协程是严格的 1:N 关系,也就是一个线 ...

  6. 2022-01-24:K 距离间隔重排字符串。 给你一个非空的字符串 s 和一个整数 k,你要将这个字符串中的字母进行重新排列,使得重排后的字符串中相同字母的位置间隔距离至少为 k。 所有输入的字符串

    2022-01-24:K 距离间隔重排字符串. 给你一个非空的字符串 s 和一个整数 k,你要将这个字符串中的字母进行重新排列,使得重排后的字符串中相同字母的位置间隔距离至少为 k. 所有输入的字符串 ...

  7. vue全家桶进阶之路25:Vue2的停维通知

    Vue 2 的技术支持会持续多久?从官方发文来看,Vue 2.7 是当前.同时也是最后一个 Vue 2.x 的次级版本更新.Vue 2.7 会以其发布日期,即 2022 年 7 月 1 日开始计算,提 ...

  8. Tensorflow 2下载网址

    Tensorflow2: 官网:https://tensorflow.google.cn/ 一个核心开源库,可以帮助您开发和训练机器学习模型.您可以通过直接在浏览器中运行 Colab 笔记本来快速上手 ...

  9. FPGA输出时钟jitter

    If customer performs simple clock forwarding from clock source -> FPGA clock input -> FPGA clo ...

  10. 【python基础】基本数据类型-字符串类型

    1.初识字符串 字符串就是一系列字符.在python中,用引号括起来文本内容的都是字符串. 其语法格式为:'文本内容'或者"文本内容" 我们发现其中的引号可以是单引号,也可以是双引 ...