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

时间:2019-04-02 09:31:57

标签: mapbox mapbox-gl-js

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

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' );

有什么想法吗?

1 个答案:

答案 0 :(得分: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');
  }
})