prepareTiles method
Implementation
Future<void> prepareTiles(bool debugFile, double maxDeviationPixel, int instanceCount) async {
Timing timing = Timing(log: _log);
List<IsolateTileConstructor> tileConstructor = [];
// each instance must process this number of consecutive tiles
final int iterationCount = 20;
for (int i = 0; i < instanceCount; ++i)
tileConstructor.add(
await IsolateTileConstructor.create(debugFile, _poiinfos, _wayinfos, zoomlevelRange, maxDeviationPixel, Math.min(_maxX - _minX + 1, iterationCount)));
// the isolates now hove the infos, we can remove them from memory here
_poiinfos.clear();
_wayinfos.clear();
List<Future> futures = [];
int current = 0;
int counter = 0;
await _processAsync("preparing tiles", (tile) async {
Future future = _future(tileConstructor[current], tile);
futures.add(future);
++counter;
if (counter >= iterationCount) {
counter = 0;
++current;
current = current % instanceCount;
}
}, (int processedTiles, int sumTiles) async {
if (futures.length > 1000 || processedTiles == sumTiles) {
await Future.wait(futures);
futures.clear();
tileBuffer.cacheToDisk(processedTiles, sumTiles);
}
});
await tileBuffer.writeComplete();
for (int i = 0; i < instanceCount; ++i) tileConstructor[i].dispose();
tileConstructor.clear();
timing.done(10000, "prepare tiles for baseZoomLevel $baseZoomLevel completed");
}