Как сохранить слои в Mapbox при использовании setStyle? - PullRequest
0 голосов
/ 27 августа 2018

Я боролся с этим довольно долго.Задача состоит в том, чтобы я мог нарисовать несколько разных слоев в одном стиле, а затем вызвать setStyle (например: переход в вид со спутника), который уничтожит все мои слои.

1 Ответ

0 голосов
/ 27 августа 2018

Я решил это, скопировав слои и источники, которые мне небезразличны, и применив их заново

function forEachLayer(text, cb) {
  this.map.getStyle().layers.forEach((layer) => {
    if (!layer.id.includes(text)) return;

    cb(layer);
  });
}
// Changing the map base style
export function changeStyle(style) {
  const savedLayers = [];
  const savedSources = {};
  const layerGroups = [
    'layer-type-1',
    'layer-type-2'
  ];

  layerGroups.forEach((layerGroup) => {
    this.forEachLayer(layerGroup, (layer) => {
      savedSources[layer.source] = this.map.getSource(layer.source).serialize();
      savedLayers.push(layer);
    });
  });

  this.map.setStyle(`mapbox://styles/mapbox/${style}`);


  setTimeout(() => {
    Object.entries(savedSources).forEach(([id, source]) => {
      this.map.addSource(id, source);
    });

    savedLayers.forEach((layer) => {
      this.map.addLayer(layer);
    });
  }, 1000);
}
...