一,需求背景
地图中存在无人机,停机坪,航线三个图层,需要实现无人机图层显示在最上面,停机坪图层显示在最下面,航线图层显示在中间。
二,遇到问题
由下图可知航线图层所在overlayPane窗格的z-index层级是低于无人机和停机坪所在markerPane窗格的z-index层级,通过设置Marker标记的zIndexOffset,只能让无人机图层显示在最上面,而航线图层始终会被遮住。
三,解决方法
通过自定义窗格可以解决这个问题,新建一个名称为plane-stop窗格,将停机坪图层放到这个窗格中,设置这个自定义窗格的css样式z-index值在200和400之间,不能低于200,低于200会被瓦片遮住。
// js
const latlngs = [[31.59111111, 120.29],[31.59222222, 120.28],[31.59333333, 120.29],
];
L.polyline(latlngs, { color: "red" }).addTo(map);
const planeIcon = L.icon({iconUrl: planeImg,iconSize: [48, 48],iconAnchor: [24, 24],
});
L.marker([31.59111111, 120.29], {icon: planeIcon,zIndexOffset: 1000,
}).addTo(map);const planeStopPane = map.createPane("plane-stop");
const planeStopIcon = L.icon({iconUrl: planeStopImg,iconSize: [48, 48],iconAnchor: [24, 24],
});
L.marker([31.59111111, 120.29], {icon: planeStopIcon,pane: planeStopPane,
}).addTo(map);// css
.leaflet-plane-stop-pane {z-index: 300;
}