Есть ли способ остановить загрузку слоя mapbox gl? - PullRequest
2 голосов
/ 31 октября 2019

В моем приложении есть примеры использования, когда после добавления слоя листов на гибридной карте пользователь может быстро переключиться на карту в стиле дорожной карты без предыдущего слоя. Если слой листов не начинает загружаться, он будет отображен на дорожной карте. Поэтому мне нужно прекратить загрузку слоя листов или иметь прослушиватель, который срабатывает при загрузке слоя. Попытался решить эту проблему с помощью метода removeLayer, но это не помогло. Хотите избежать использования setTimeout или любого асинхронного js-метода, если есть какое-либо решение в библиотеке Mapbox gl.

Извините, код закрыт. Например, у меня в классе есть метод, который переключается с одного стиля на другой при нажатии на кнопку. Если спутник, то слой рисуется, в противном случае он удаляется. Пробовал как удалять, так и прятать.

const map = new mapboxgl.Map();

const drawLayer = (layerId: string) => {
   map.addSource(`${layerId}-source`, {
         'type': 'raster',
         'tiles': [getTileUrl()],
         'tileSize': 256
       });
   map.addLayer({
        'id': layerId,
        'type': 'raster',
        'source': `${layerId}-source`,
        'paint': {
          'raster-opacity': opacity
        }
      });
};

const switchStyle = (isSatellite: boolean) => {
   if (isSatellite) {
      map.setOptions({
         styles = 'mapbox://styles/mapbox/satellite-streets-v10'
      });
      drawLayer('some-layer-id');
   } else {
      map.setOptions({
         styles = 'mapbox://styles/mapbox/streets-v11'
      });
      if (map.getLayer('some-layer-id')) {
         map.removeLayer('some-layer-id');
         map.removeSource('some-layer-id-source');
      }
   }
}

map.once('load', () => {
  document.getElementById("switchButton").addEventListener("click", switchStyle);
});

...