如何在mapbox gl js中以特定缩放级别隐藏点标签?
我使用mapbox gl js将geojson文件中的点渲染到地图上 对于每个点,我还将在标记图标下方显示一个标签。我目前使用以下代码执行此操作:如何在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",
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。对我有效!此时,不可能分层,因此无法获得最佳解决方案!谢谢对于“文本不透明度”“绘制”属性也是如此,这对我来说是最好的解决方案。