Запустить функцию после обработки всех плиток - PullRequest
0 голосов
/ 28 апреля 2020

Как заставить функцию работать после того, как forEachTileCoord обработал все плитки?

Я писал скрипт для перекрашивания слоя WMTS на основе отображаемых в данный момент плиток. Скрипт просматривает все плитки, чтобы определить их максимальные значения, а затем раскрашивает плитки на основе наибольшего значения в любой из отображаемых плиток. Окрашивающая часть работает нормально, но не ждет, пока все плитки будут обработаны.

В моем коде, прикрепленном внизу, последняя половина не должна срабатывать, пока все плитки не были обработаны. Я предполагаю, что мне нужно будет использовать Promises . Проблема в том, что я не знаю, как определить, когда forEachTileCoord закончен.

  map.on("moveend", function() {
  var tileUrlFunction = tileSource.getTileUrlFunction()
  var maxValues = [];
  var loadExtent = map.getView().calculateExtent(map.getSize());
  //Checks which tiles that currently are being displayed
  tileSource.getTileGrid().forEachTileCoord(loadExtent, mapZoom, function(tileCoord) {

    //Gets the name of each currently displayed tile
    tileName = tileUrlFunction(tileCoord, ol.proj.get('EPSG:4326'))
    asyncCall()

    async function asyncCall() {
    tileMaxValue = await calculateMaxValue(tileName);
    maxValues.push(tileMaxValue)
    }

    })


//This next part triggers too early - returns -Infinity
  currentMax = Math.max(...maxValues)
  if (Number.isInteger(currentMax)) {
//This is the function for recoloring the map
    olgt_map.redraw(olgt_map, currentMax, colorScale);
  }  
  }

Функция перерисовки изменяет значения легенды и распределение окраски слоя, как показано здесь . Два скриншота - это две разные области одной и той же карты. Легенда и окраска корректируются до максимального значения, отображаемого в данный момент.

olGeoTiff.prototype.redraw = function(map, currentMax, legendValues) {

    map.plotOptions.domain = [0, currentMax];

  this.layer.getSource().refresh();
  updateLegend(legendValues, currentMax);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...