如何在地图缩放时交换图层可见性?

How can I swap layer visibilty on map zoom?

我认为这应该非常简单,或者有一些使用 Azure Maps 的示例...

因此,我在地图中添加了 3 个图层、2 个点和 1 个多边形。我希望点层最初处于打开状态,然后如果用户放大地图,则关闭点层并打开多边形。如果用户缩小多边形关闭并且点重新打开,这也会发生相反的情况。

我已经能够通过单击按钮关闭 1 点层并打开多边形,但是 1 点层是一个 htmlMarker,因此我可以将其脉冲以产生效果。

关于在另一层之后添加一层的文档也不起作用。如果我保持全部打开,多边形位于两个点层之上?

   htmlMarkerLayer = new atlas.layer.SymbolLayer(dataSource, null, {
     filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']], // Only render Point or MultiPoint in this layer.
     name: 'htmlMarkerLayer'
   });
   map.layers.add(htmlMarkerLayer, 'poiPointLayer');

   poiPointLayer = new atlas.layer.SymbolLayer(dataSource, null, {
     filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']], // Only render Point or MultiPoint in this layer.
     name: 'poiPointLayer'
   });
   map.layers.add(poiPointLayer, 'htmlMarkerLayer');

polygonLayer = new atlas.layer.PolygonLayer(dataSource, null, {
        filter: ['any', ['==', ['geometry-type'], 'Polygon'], ['==', ['geometry-type'], 'MultiPolygon']], // Only render Point or MultiPoint in this layer.
        name: 'facilityLayer',
        fillColor: 'gray',
        fillOpacity: 0.5
    });
    map.layers.add(polygonLayer, 'poiPointLayer');

// Does not work on htmlMarker layer with pulse?
      var opts = htmlMarkerLayer.getOptions();
      opts['visible'] = false;
      htmlMarkerLayer.setOptions(opts);

// Works
   opts = poiPointLayer .getOptions();
   opts['visible'] = false;
   poiPointLayer .setOptions(opts);

// Works
   opts = polygonLayer.getOptions();
   opts['visible'] = true;
   polygonLayer.setOptions(opts);

关于如何与地图进行缩放交互,有什么想法吗?如何关闭 htmlMarker 层?

所有图层都有 minZoom 和 maxZoom 选项。使用这些来指定你的限制,它会做你所要求的。此外,名称不是图层的选项。初始化函数时的第二个参数(代码中为 null)是您可以传入 ID 的地方。我在下面的代码中进行了此更改。

polygonLayer = new atlas.layer.PolygonLayer(dataSource, 'facilityLayer', {
    minZoom: 10,
    maxZoom: 24,    
    fillColor: 'gray',
    fillOpacity: 0.5,
    filter: ['any', ['==', ['geometry-type'], 'Polygon'], ['==', ['geometry-type'], 'MultiPolygon']], // Only render Point or MultiPoint in this layer.
});
map.layers.add(polygonLayer, 'poiPointLayer');

poiPointLayer = new atlas.layer.SymbolLayer(dataSource, 'poiPointLayer', {
    minZoom: 0,
    maxZoom: 10,
    filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']], // Only render Point or MultiPoint in this layer.
});
map.layers.add(poiPointLayer, 'htmlMarkerLayer');

为清楚起见,以下是 minZoom/maxZoom 值的工作原理:

  • minZoom -> 出现在这个缩放级别。
  • maxZoom -> 在此级别消失(出现在 maxZoom - 1)