为何标记在LayerSwitcher中显示为数字而非自定义名称
问题:LayerSwitcher中标记显示数字而非预设名称
我通过JSON获取待使用的图层列表,遍历JSON将图层添加至overlayLayers。随后希望用标记可视化页面传入的坐标,标记可正常显示,但在LayerSwitcher中显示的是数字,而非预设的“Position”名称。以下是相关代码,求解决思路?
jsonData.Layers.forEach(layer => { console.log("2 " + layer.Layer.nom); // 打印每个图层的名称 index = index + 1; const layerKey = `lyr${index}`; // 创建动态键 let [unLayer, unNom, unVisible] = createLayer(layer.Layer); theLayers[index] = unLayer; theLayersSwitcher[index] = {layer : unLayer, config : {title : unNom, description : unNom, visibility : unVisible}}; theLayersNom[index] = unNom; theLayersVisible[index] = unVisible; if (layer.Layer.inUse == 1) { overlayLayers[layer.Layer.nom] = unLayer; // 将图层存入对象 unLayer.addTo(map); } else { overlayLayers[layer.Layer.nom] = unLayer; // 将图层存入对象 } }); let PositionMarker = L.marker([<?php echo $_REQUEST["LATITUDE"]?>, <?php echo $_REQUEST["LONGITUDE"]?>], { title: "La position" }).addTo(map); let reversedLayersSwitcher = {}; let keys = Object.keys(theLayersSwitcher).reverse(); index = 0; for (let i = 0; i < keys.length; i++) { index += 1; reversedLayersSwitcher[index] = theLayersSwitcher[keys[i]]; } let layerSwitcher = L.geoportalControl.LayerSwitcher({ layers: reversedLayersSwitcher }); map.addControl(layerSwitcher);
解决思路
问题本质
你创建的PositionMarker只是单个标记,没有被纳入LayerSwitcher的配置对象theLayersSwitcher中。当前LayerSwitcher里显示的数字是JSON加载图层的索引,标记完全没出现在切换器的图层列表里。
具体修复步骤
- 将标记包装为图层组:LayerSwitcher主要管理图层(而非单个标记),把标记放入
L.layerGroup才能被切换器识别为可管理的图层项。 - 添加到切换器配置:把这个图层组加入
theLayersSwitcher,并配置好显示名称“Position”。 - 确保反转顺序时包含该图层:后续的反转逻辑会自动处理新添加的图层项,无需额外修改反转代码。
修改后的代码片段
在创建PositionMarker之后,添加以下代码:
// 将单个标记包装成图层组 const positionLayer = L.layerGroup([PositionMarker]); // 给图层组分配索引,延续之前的计数 index += 1; // 将图层组加入切换器配置 theLayersSwitcher[index] = { layer: positionLayer, config: { title: "Position", description: "用户传入的坐标标记", visibility: true // 和标记addTo(map)的状态保持一致 } };
这样修改后,LayerSwitcher里就会显示“Position”选项,而不是无意义的数字了。
内容的提问来源于stack exchange,提问作者Pascal Boulesteix
相关产品推荐
相关产品推荐

