如何在Mapbox GL JS中通过缩放级别设置map.loadImage可见性?

问题描述 投票:1回答:1

我正在使用以下代码加载图像:

map.on('load', function () {

map.loadImage('....png', function(error, image) { 
  if (error) throw error;
  map.addImage('b7', image);
  map.addLayer({ 
    "id": "b7",
    "type": "symbol",
    "source": { 
      "type": "geojson",
      "data": {
        "type": "FeatureCollection",
        "features": [{
          "type": "Feature",
          "geometry": {
            "type": "Point",
            "coordinates": [0, 0] 
          } 
        }] 
      }
    },
    "layout": {
      "icon-image": "b7",
      "icon-size": 0.2
    }
  });
});

如何在某个缩放级别将可见性设置为无?

看起来你不能在loadImage上使用map.setLayoutProperty。在控制台中,它说:错误:图层'b7'在地图的样式中不存在,无法设置样式。

乳清我尝试类似的东西:

map.setLayoutProperty( 'b7', 'visibility', 'none' );

有任何想法吗?

mapbox mapbox-gl-js
1个回答
2
投票

关于如何解决这个问题的两点建议:

首先,确保您的图像名称和图层名称不同。可能是该功能正在寻找b7层,但它首先找到名为b7的图像(反之亦然)。无论哪种方式,都应该更改,因为它会创建冲突的变量。

其次,如果不起作用,请尝试单独添加源,而不是在图层内。

 map.addSource("mySource", {
  "type": "geojson",
  "data": {
    "type": "FeatureCollection",
    "features": [{
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [-74.981906, 41.742503]
      },
      "properties": {
        "title": "title ",
        "icon": "myImage",
      }
    }]
  }
});

然后使用源添加图层。

 map.addLayer({
  "id": "b7",
  "type": "symbol",
  "source": "mySource",
  "layout": {
    "icon-image": "myImage",
    "icon-size": 0.2
  }
});

您现在可以在zoomstart侦听器上调用setLayoutProperty。如果您只想在特定的缩放级别使用map.getZoom();来添加条件,则需要在此处设置图层的可见性,而不是图像。

map.on('zoomstart', 'b7', function(e) {
  if (map.getZoom() > 12) {
    map.setLayoutProperty('b7', 'visibility', 'none');
  }
})

片段在下面,如果您遇到任何问题,请告诉我。

map.on('load', function() {

  map.loadImage('myImage.png', function(error, image) {
    if (error) throw error;
    map.addImage('myImage', image);
    map.addSource("mySource", {
      "type": "geojson",
      "data": {
        "type": "FeatureCollection",
        "features": [{
          "type": "Feature",
          "geometry": {
            "type": "Point",
            "coordinates": [-73.981906, 40.742503]
          },
          "properties": {
            "title": "title ",
            "icon": "myImage",
          }
        }]
      }
    });

    map.addLayer({
      "id": "b7",
      "type": "symbol",
      "source": "mySource",
      "layout": {
        "icon-image": "myImage",
        "icon-size": 0.2
      }
    });
  });
});

map.on('zoomstart', 'b7', function(e) {
  if (map.getZoom() > 12) {
    map.setLayoutProperty('b7', 'visibility', 'none');
  }
})
© www.soinside.com 2019 - 2024. All rights reserved.