commit c7590c36ce60dafad385ddb810d02fb984d758f3
parent 57215a908ab74e3e9f5640bac2add2ff23a64c96
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Fri, 3 Mar 2017 02:17:17 +0300
[print] waypoints and westra passes are now printed as overlays at target canvas resolution
Diffstat:
4 files changed, 61 insertions(+), 32 deletions(-)
diff --git a/src/lib/leaflet.control.printPages/map-render.js b/src/lib/leaflet.control.printPages/map-render.js
@@ -121,7 +121,7 @@ class PageComposer {
}
let zoom;
if (tileInfo.isOverlay) {
- zoom = 'overlay';
+ zoom = tileInfo.overlaySolid ? 'solidOverlay' : 'overlay';
} else {
zoom = tileInfo.zoom;
}
@@ -141,7 +141,7 @@ class PageComposer {
setupCurrentCanvas(zoom) {
let size;
- if (zoom === 'overlay') {
+ if (zoom === 'overlay' || zoom === 'solidOverlay') {
size = this.destSize;
} else {
const q = 1 << (24 - zoom);
diff --git a/src/lib/leaflet.layer.rasterize/CanvasMarkers.js b/src/lib/leaflet.layer.rasterize/CanvasMarkers.js
@@ -1,8 +1,6 @@
import L from "leaflet";
import 'lib/leaflet.layer.canvasMarkers'
-import {CanvasLayerGrabMixin} from './TileLayer';
-L.Layer.CanvasMarkers.include(CanvasLayerGrabMixin);
L.Layer.CanvasMarkers.include({
_printProgressWeight: 0.1,
@@ -22,9 +20,49 @@ L.Layer.CanvasMarkers.include({
},
cloneForPrint: function(options) {
- options = L.Util.extend({}, this.options, {iconScale: 1, labelFontSize: 12});
+ options = L.Util.extend({}, this.options);
return new L.Layer.CanvasMarkers(this.cloneMarkers(), options);
+ },
+
+ getTilesInfo: async function(printOptions) {
+ this.options.iconScale = printOptions.resolution / 90 * 0.75;
+ const scale = printOptions.pixelBounds.getSize().x / printOptions.destPixelSize.x;
+ const pixelExtents = {
+ tileN: printOptions.pixelBounds.getTopRight().y / scale,
+ tileS: printOptions.pixelBounds.getBottomLeft().y / scale,
+ tileE: printOptions.pixelBounds.getTopRight().x / scale,
+ tileW: printOptions.pixelBounds.getBottomLeft().x / scale
+ };
+ const crs = L.CRS.EPSG3857;
+ if (!this._map) {
+ const dummyMap = {
+ project: crs.latLngToPoint.bind(crs),
+ unproject: crs.pointToLatLng.bind(crs),
+ };
+ this._map = dummyMap;
+ }
+ const zoom = crs.zoom((1 / scale) * crs.scale(printOptions.zoom));
+ const {iconUrls, markerJobs, pointsForLabels} = this.selectMarkersForDraw(pixelExtents, zoom, false);
+ console.log(iconUrls, markerJobs, pointsForLabels);
+ await this.preloadIcons(iconUrls);
+ return {
+ iterateTilePromises: (function*() {
+ yield {
+ tilePromise: Promise.resolve({
+ draw: (canvas) => {
+ this.drawSelectedMarkers(canvas, pixelExtents, markerJobs, pointsForLabels, zoom);
+ },
+ isOverlay: true,
+ overlaySolid: true
+ }
+ ),
+ abortLoading: () => {
+ }
+ }
+ }).bind(this),
+ count: 1
+ };
}
}
);
diff --git a/src/lib/leaflet.layer.rasterize/WestraPasses.js b/src/lib/leaflet.layer.rasterize/WestraPasses.js
@@ -1,32 +1,8 @@
import L from "leaflet";
import 'lib/leaflet.layer.westraPasses';
import {WestraPassesMarkers} from 'lib/leaflet.layer.westraPasses/westraPassesMarkers';
-import {CanvasLayerGrabMixin} from './TileLayer';
import 'lib/leaflet.layer.canvasMarkers'
-
-const WestraPrint = L.Layer.CanvasMarkers.extend({
- includes: CanvasLayerGrabMixin,
-
- initialize: function(srcLayer, options) {
- this.srcLayer = srcLayer;
- L.Layer.CanvasMarkers.prototype.initialize.call(this, null, options);
- },
-
- waitTilesReadyToGrab: function() {
- let promise;
- if (this.srcLayer._dataLoaded) {
- promise = Promise.resolve(null);
- } else {
- // FIXME: handle data load errors
- promise = new Promise((resolve) => {
- this.srcLayer.once('data-loaded', resolve);
- })
- }
- return promise.then(() => {
- this.addMarkers(this.srcLayer.rtree.all());
- })
- },
-});
+import './CanvasMarkers';
L.Layer.WestraPasses.addInitHook(function() {
this.markers.options.print = this.options.print;
@@ -34,8 +10,22 @@ L.Layer.WestraPasses.addInitHook(function() {
});
WestraPassesMarkers.include({
+ waitDataReady: function() {
+ if (this._dataLoaded) {
+ return Promise.resolve()
+ }
+ return new Promise((resolve) => {
+ this.on('data-loaded', resolve);
+ });
+ },
+
cloneForPrint: function (options) {
- return new WestraPrint(this, L.Util.extend(
- {}, this.options, {iconScale: 1.5, labelFontSize: 14}, options));
+ options = L.Util.extend({}, options);
+ return new WestraPassesMarkers(this._baseUrl, options);
+ },
+
+ getTilesInfo: async function(printOptions) {
+ await this.waitDataReady();
+ return await L.Layer.CanvasMarkers.prototype.getTilesInfo.call(this, printOptions);
}
});
diff --git a/src/lib/leaflet.layer.westraPasses/westraPassesMarkers.js b/src/lib/leaflet.layer.westraPasses/westraPassesMarkers.js
@@ -17,6 +17,7 @@ const WestraPassesMarkers = L.Layer.CanvasMarkers.extend({
initialize: function(baseUrl, options) {
L.Layer.CanvasMarkers.prototype.initialize.call(this, null, options);
this.on('markerclick', this.showPassDescription, this);
+ this._baseUrl = baseUrl;
this.url = baseUrl + this.options.filePasses;
},