Отслеживайте плитки по мере их запроса и рендеринга в MapboxGL
Фон:
Я использую MapboxGL для отображения карт, насыщенных данными, для моих пользователей. Иногда мои векторные источники мозаики загружаются и отображаются на экране.
Чтобы предоставить пользователю некоторую обратную связь о происходящем, я реализовал счетчик, основанный на map.loaded()
,
map.on('render', () => {
if (!map.loaded()) { showSpinner(); }
else { hideSpinner(); }
});
Однако иногда может потребоваться несколько минут, чтобы плитка возвратилась с сервера и отобразилась на экране. Мои пользователи жаловались, что счетчик карт зависает, когда на самом деле работа еще выполняется!
Поэтому вместо счетчика я хотел бы показать индикатор выполнения, который обновляется по мере того, как плитки отображаются на экране. Это должно дать пользователю представление о том, сколько работы осталось до полной визуализации карты.
Где я сейчас
Для этого мне нужно знать, какие события MapboxGL отвечают за сигнализацию при отправке запроса на плитку и при отображении плитки на экран.
const pendingTiles = {};
// marks tiles as loading, this works!
map.on('dataloading', data => {
if (data.tile) {
pendingTiles[data.tile.uid] = data.tile.state;
}
});
// triggered on every render event, however
// there appears to be no way of identifying *what* was rendered
map.on('render', (data) => {
// how can I identify the tile that was rendered?
});