nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

commit b94a0768f4a6c23a3876457f0ebe1e15acdde9ed
parent f70fbdc9ecb488ed05dd650ede6b07573163a969
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Sat, 18 Feb 2017 03:02:21 +0300

canvas markers layer is now async; fixed printing async gridlayers

Diffstat:
Msrc/lib/leaflet.control.printPages/map-render.js | 8+++++++-
Msrc/lib/leaflet.layer.canvasMarkers/index.js | 7+++++--
Msrc/lib/leaflet.layer.rasterize/TileLayer.js | 2+-
3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/lib/leaflet.control.printPages/map-render.js b/src/lib/leaflet.control.printPages/map-render.js @@ -171,7 +171,9 @@ async function* iterateLayersTiles(layers, latLngBounds, zooms) { let map = getTempMap(zoom, layer._rasterizeNeedsFullSizeMap, pixelBounds); map.addLayer(layer); let {iterateTilePromises, count} = await layer.getTilesInfo({xhrOptions: defaultXHROptions, pixelBounds}); + let lastPromise; for (let tilePromise of iterateTilePromises()) { + lastPromise = tilePromise.tilePromise; tilePromise.tilePromise = tilePromise.tilePromise.then((tileInfo) => Object.assign(tileInfo, {zoom, progressInc: 1 / count})); doStop = yield tilePromise; @@ -180,9 +182,13 @@ async function* iterateLayersTiles(layers, latLngBounds, zooms) { break; } } - disposeMap(map); if (doStop) { + disposeMap(map); break; + } else { + if (lastPromise) { + lastPromise.then(() => disposeMap(map)); + } } } } diff --git a/src/lib/leaflet.layer.canvasMarkers/index.js b/src/lib/leaflet.layer.canvasMarkers/index.js @@ -147,11 +147,14 @@ L.Layer.CanvasMarkers = L.GridLayer.extend({ } }, - createTile: function(coords) { + createTile: function(coords, done) { const canvas = L.DomUtil.create('canvas', 'leaflet-tile'); canvas.width = this.options.tileSize; canvas.height = this.options.tileSize; - L.Util.requestAnimFrame(() => this.drawTile(canvas, coords)); + L.Util.requestAnimFrame(() => { + this.drawTile(canvas, coords); + done(null, canvas); + }); return canvas; }, diff --git a/src/lib/leaflet.layer.rasterize/TileLayer.js b/src/lib/leaflet.layer.rasterize/TileLayer.js @@ -85,7 +85,7 @@ const CanvasLayerGrabMixin = L.Util.extend({}, GridLayerGrabMixin, { tilePromise = Promise.resolve(tile); } else { tilePromise = new Promise((resolve) => { - return this.createTile(coords, resolve); + return this.createTile(coords, (_, canvas) => resolve(canvas)); }); }