如何在mapbox gl js中以特定缩放级别隐藏点标签?

如何在mapbox gl js中以特定缩放级别隐藏点标签?,mapbox,mapbox-gl-js,Mapbox,Mapbox Gl Js,我使用mapbox gl js将geojson文件中的点渲染到地图上 对于每个点,我还将在标记图标下方显示一个标签。我目前使用以下代码执行此操作: map.addSource("mypoints", { type: "geojson", data: "mypoints.geojson", }); map.addLayer({ "id": "layer-mypoints", "type": "symbol", "source": "mypoints",

我使用mapbox gl js将geojson文件中的点渲染到地图上

对于每个点,我还将在标记图标下方显示一个标签。我目前使用以下代码执行此操作:

map.addSource("mypoints", {
    type: "geojson",
    data: "mypoints.geojson",
});

map.addLayer({
    "id": "layer-mypoints",
    "type": "symbol",
    "source": "mypoints",
    "layout": {
        "icon-image": "marker-15",
        "text-field": "{name}",
        "text-anchor": "top"
    }
});
这将按预期工作,并将点添加到贴图中,并在每个点下渲染标签

为了减少地图的混乱,我想在地图缩小到一定的缩放级别后隐藏标签(反之亦然,在地图放大时显示标签)。无论缩放级别如何,我始终希望显示点图标


我不知道怎么做。任何关于如何实现这一点的想法都将不胜感激

在做了一些思考/阅读/测试之后,我想我找到了解决问题的方法

现在,我添加了一个仅显示图标的层,还添加了第二个仅包含标签的层。在第二层中,我将“minzoom”属性设置为缩放级别,当用户放大地图时,我希望标签显示在该级别

map.addSource("mypoints", {
    type: "geojson",
    data: "mypoints.geojson",
});


// Layer with icons that should always be visible
map.addLayer({
    "id": "layer-mypoints",
    "type": "symbol",
    "source": "mypoints",
    "layout": {
        "icon-image": "monument-15",
        "icon-allow-overlap": true
    }
});            

// Layer with just labels that are only visible from a certain zoom level
map.addLayer({
    "id": "layer-mypoints-label",
    "type": "symbol",
    "source": "mypoints",
    "minzoom": 12, // Set zoom level to whatever suits your needs
    "layout": {
        "text-field": "{name}",
        "text-anchor": "top",
        "text-offset": [0,0.5]
    }
});

这似乎非常适合我的需要。

如果您不需要多层,我可以使用另一种解决方法

给定原始代码,您可以将
文本大小
属性与缩放相关
停止

map.addSource(“mypoints”{
键入:“geojson”,
数据:“mypoints.geojson”,
});
map.addLayer({
“id”:“图层mypoints”,
“类型”:“符号”,
“来源”:“mypoints”,
“布局”:{
“图标图像”:“marker-15”,
“文本字段”:“{name}”,
“文本锚定”:“顶部”,
“文本大小”:{
“停止”:[
[0, 0],
[3, 0],
[4, 10]
]
}
}
});

该值在停止之间插值,因此在缩放0和3之间,
文本大小
在0和0之间插值,导致。。。0(即缺席)。从zoom 3到zoom 4,文本都有放大的效果(我喜欢这种效果,但这是个人的)。从缩放4开始,文本大小将保持在10。如果您不想在缩放3和4之间产生“放大”效果,也可以指定分数缩放:只需将4更改为3.1。

对我有效!此时,不可能分层,因此无法获得最佳解决方案!谢谢对于“文本不透明度”“绘制”属性也是如此,这对我来说是最好的解决方案。