我正在使用Mapbox GL构建交互式地图应用。
我一直在创建的地图现在可以扩展到许多层,并且我创建了用于管理它们的边栏。
我将它们分组为一个下拉列表,使按钮能够带有图标的颜色和图标,包括信息按钮,并且默认情况下可以选择按钮的打开或关闭。
问题是,在侧边栏上选择图层时我无法获得图层的类型。
关于类型,需要更改滤镜和属性,例如线条颜色,填充颜色,圆圈颜色等。
map.setPainProperty(layer, type, value);
这里,我可以通过选择图层从侧边栏获取layerID和值。我找到了一个临时解决方案,那就是根据包含layerID和类型的对象创建数组。
喜欢这个
var layers = [
{id: 'layer1', type'fill'},
{id: 'layer2', type'line'}
];
但是它使代码混乱并且不负责动态层,因为它是hardcoded。
请帮助我提供简单的解决方法。
谢谢。
我之前也遇到过这样的问题,并仔细检查了[[Mapbox API参考,但找不到合适的函数来直接获取图层的类型。
在旧版本中,它们不提供像getLayerType
这样的功能。在这种情况下,您可以使用getLayer
功能,该功能可用于多种用途。
getLayer
功能在验证
Layer
时也可以使用。const layer = map.getLayer(layerID);
if (layer) {
map.setPainProperty(layerID, layer.type, value);
}
这里,type等...,以及在将图层添加到地图时由您定义的自定义值。例如:layer
是一个对象,其中包含各种典型值,例如id
map.addLayer({
'id': layerID',
'type': 'symbol',
'source': source,
'layout': {
'visibility': 'visible'
},
layout: {
"text-field": "{Name}",
"text-size": {
stops: [
[11, 10],
[12, 12]
]
}
},
"source-layer": sourceLayer,
paint: {
"text-halo-color": "#ffffff",
"text-halo-width": 5,
"text-opacity": {
stops: [
[8, 0],
[9, 1]
]
}
}
});
希望对您有帮助。问候