nakarte

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

commit a2bbd6090c14ecf9943f7838eba96d8b409f2737
parent 8e79d6bb41839a988e94b6eae8017eaead91c25b
Author: Igor Sidorov <igor.sidorov@binarycode.ru>
Date:   Wed, 30 May 2018 11:45:19 +0300

Review fixes

Diffstat:
Msrc/layers.js | 79++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
Msrc/lib/leaflet.control.layers.configure/index.js | 1+
Msrc/lib/leaflet.control.printPages/control.js | 48+++++++++++++++++++++++++++++++-----------------
Msrc/lib/leaflet.control.printPages/map-render.js | 7++++---
Msrc/lib/leaflet.layer.rasterize/WestraPasses.js | 2+-
5 files changed, 99 insertions(+), 38 deletions(-)

diff --git a/src/layers.js b/src/layers.js @@ -25,6 +25,7 @@ export default function getLayers() { layer: L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { code: 'O', + isOverlay: false, scaleDependent: true, print: true, jnx: true, @@ -40,6 +41,7 @@ export default function getLayers() { 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', { code: 'E', + isOverlay: false, scaleDependent: false, maxNativeZoom: 18, print: true, @@ -56,6 +58,7 @@ export default function getLayers() { { scaleDependent: true, code: 'Y', + isOverlay: false, print: true, jnx: true, shortName: 'yandex' @@ -70,6 +73,7 @@ export default function getLayers() { { scaleDependent: false, code: 'S', + isOverlay: false, print: true, jnx: true, shortName: 'yandex_sat' @@ -83,6 +87,7 @@ export default function getLayers() { layer: new L.Layer.Google('ROADMAP', { code: 'G', + isOverlay: false, scaleDependent: true, print: true, jnx: true, @@ -97,6 +102,7 @@ export default function getLayers() { layer: new L.Layer.Google('SATELLITE', { code: 'L', + isOverlay: false, scaleDependent: false, print: true, jnx: true, @@ -111,6 +117,7 @@ export default function getLayers() { layer: new L.Layer.Google('TERRAIN', { code: 'P', + isOverlay: false, scaleDependent: false, print: true, jnx: true, @@ -125,10 +132,11 @@ export default function getLayers() { layer: new BingLayer(config.bingKey, { code: 'I', + isOverlay: false, scaleDependent: false, print: true, jnx: true, - shortName: 'bing' + shortName: 'bing_sat' } ) }, @@ -140,6 +148,7 @@ export default function getLayers() { layer: L.tileLayer('https://maps.marshruty.ru/ml.ashx?x={x}&y={y}&z={z}&i=1&al=1', { code: 'M', + isOverlay: false, maxNativeZoom: 18, noCors: true, scaleDependent: true, @@ -157,6 +166,7 @@ export default function getLayers() { 'http://144.76.234.108/cgi-bin/tapp/tilecache.py/1.0.0/topomapper_v2/{z}/{x}/{y}.jpg', { code: 'T', + isOverlay: false, scaleDependent: false, maxNativeZoom: 13, noCors: true, @@ -175,6 +185,7 @@ export default function getLayers() { { code: 'D', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 9, @@ -192,6 +203,7 @@ export default function getLayers() { { code: 'N', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 12, @@ -209,6 +221,7 @@ export default function getLayers() { { code: 'A', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 13, @@ -226,6 +239,7 @@ export default function getLayers() { { code: 'Q', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 13, @@ -243,6 +257,7 @@ export default function getLayers() { { code: 'J', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 13, @@ -260,6 +275,7 @@ export default function getLayers() { { code: 'C', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 13, @@ -277,6 +293,7 @@ export default function getLayers() { { code: 'F', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 14, @@ -294,6 +311,7 @@ export default function getLayers() { { code: 'B', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 14, @@ -311,6 +329,7 @@ export default function getLayers() { { code: 'K', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 15, @@ -328,6 +347,7 @@ export default function getLayers() { { code: 'Z', isOverlay: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 14, @@ -345,7 +365,7 @@ export default function getLayers() { { code: 'U', isOverlay: true, - isOverlayTransparent: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 15, @@ -363,7 +383,7 @@ export default function getLayers() { { code: 'R', isOverlay: true, - isOverlayTransparent: true, + isOverlayTransparent: false, tms: true, scaleDependent: false, maxNativeZoom: 17, @@ -379,8 +399,7 @@ export default function getLayers() { isDefault: true, layer: new L.Layer.SovietTopoGrid({ code: 'Ng', - isOverlay: true, - shortName: 'soviet_topo_grid' + isOverlay: true }) }, { @@ -389,8 +408,7 @@ export default function getLayers() { isDefault: true, layer: new L.Wikimapia({ code: 'W', - isOverlay: true, - shortName: 'wikimapia' + isOverlay: true }) }, { @@ -403,7 +421,7 @@ export default function getLayers() { isOverlayTransparent: true, print: true, scaleDependent: true, - shortName: 'westra' + shortName: 'passes' } ) }, @@ -432,6 +450,7 @@ export default function getLayers() { layer: L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { code: 'Otm', + isOverlay: false, maxNativeZoom: 17, scaleDependent: true, print: true, @@ -449,10 +468,11 @@ export default function getLayers() { layer: L.tileLayer('https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=' + config.thunderforestKey, { code: 'Ocm', + isOverlay: false, scaleDependent: true, print: true, jnx: true, - shortName: 'ocm' + shortName: 'opencyclemap' } ) }, @@ -463,6 +483,7 @@ export default function getLayers() { layer: L.tileLayer('https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=' + config.thunderforestKey, { code: 'Oso', + isOverlay: false, scaleDependent: true, print: true, jnx: true, @@ -484,6 +505,7 @@ export default function getLayers() { { code: 'E25m', isOverlay: true, + isOverlayTransparent: false, tms: true, maxNativeZoom: 9, print: true, @@ -501,6 +523,7 @@ export default function getLayers() { { code: 'NT1', isOverlay: true, + isOverlayTransparent: false, tms: true, maxNativeZoom: 14, print: true, @@ -518,6 +541,7 @@ export default function getLayers() { { code: 'NT5', isOverlay: true, + isOverlayTransparent: false, tms: true, maxNativeZoom: 15, print: true, @@ -535,6 +559,7 @@ export default function getLayers() { { code: 'T25', isOverlay: true, + isOverlayTransparent: false, tms: true, maxNativeZoom: 15, print: true, @@ -553,6 +578,7 @@ export default function getLayers() { { code: 'MN25', isOverlay: true, + isOverlayTransparent: false, tms: true, maxNativeZoom: 15, print: true, @@ -577,6 +603,7 @@ export default function getLayers() { { code: 'Mt', isOverlay: true, + isOverlayTransparent: false, tms: false, minZoom: 7, minNativeZoom: 7, @@ -614,6 +641,7 @@ export default function getLayers() { layer: new GeocachingSu(config.geocachingSuUrl, { code: 'Gc', isOverlay: true, + isOverlayTransparent: true, print: true, jnx: false, shortName: 'geocaching' @@ -627,6 +655,7 @@ export default function getLayers() { { code: 'Ot', isOverlay: true, + isOverlayTransparent: true, scaleDependent: true, print: true, jnx: false, @@ -784,6 +813,7 @@ export default function getLayers() { layer: L.tileLayer("https://tilesprod.ut.no/tilestache/ut_topo_light/{z}/{x}/{y}.jpg", { code: 'Nu', + isOverlay: false, tms: false, maxNativeZoom: 16, print: true, @@ -802,6 +832,7 @@ export default function getLayers() { { code: 'Np', isOverlay: true, + isOverlayTransparent: false, maxNativeZoom: 16, tms: false, print: true, @@ -819,6 +850,7 @@ export default function getLayers() { { code: 'Nm', isOverlay: true, + isOverlayTransparent: false, tms: false, print: true, jnx: true, @@ -835,6 +867,7 @@ export default function getLayers() { { code: 'Ns', isOverlay: true, + isOverlayTransparent: true, tms: false, print: true, jnx: true, @@ -852,6 +885,7 @@ export default function getLayers() { { code: 'Nw', isOverlay: true, + isOverlayTransparent: true, tms: false, print: true, jnx: true, @@ -870,6 +904,7 @@ export default function getLayers() { layer: L.tileLayer("https://maptiles1.finncdn.no/tileService/1.0.3/normap/{z}/{x}/{y}.png", { code: 'Nr', + isOverlay: false, tms: false, print: true, jnx: true, @@ -890,6 +925,7 @@ export default function getLayers() { layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/base-m/{z}-{x}-{y}", { code: 'Czb', + isOverlay: false, tms: false, print: true, jnx: true, @@ -906,6 +942,7 @@ export default function getLayers() { layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/turist-m/{z}-{x}-{y}", { code: 'Czt', + isOverlay: false, tms: false, print: true, jnx: true, @@ -922,6 +959,7 @@ export default function getLayers() { layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/turist_aquatic-m/{z}-{x}-{y}", { code: 'Czs', + isOverlay: false, tms: false, print: true, jnx: true, @@ -938,6 +976,7 @@ export default function getLayers() { layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/winter-m/{z}-{x}-{y}", { code: 'Czw', + isOverlay: false, tms: false, print: true, jnx: true, @@ -954,6 +993,7 @@ export default function getLayers() { layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/zemepis-m/{z}-{x}-{y}", { code: 'Czg', + isOverlay: false, tms: false, print: true, jnx: true, @@ -978,7 +1018,9 @@ export default function getLayers() { const { code, shortName, - print + print, + isOverlay, + isOverlayTransparent } = options if (!code) { throw new Error('Layer without code: ' + layer.title); @@ -997,13 +1039,16 @@ export default function getLayers() { orders[order] = 1; if (print) { - if (!shortName) { - throw new Error('Layer without shortName: ' + layer.title); - } - if (shortNames.has(shortName)) { - throw new Error(`Duplicate layer shortName "${shortName}"`); - } - shortNames.add(shortName); + if (isOverlay && (isOverlayTransparent === undefined)) { + throw new Error('Overlay layer without isOverlayTransparent: ' + layer.title); + } + if (!shortName) { + throw new Error('Layer without shortName: ' + layer.title); + } + if (shortNames.has(shortName)) { + throw new Error(`Duplicate layer shortName "${shortName}"`); + } + shortNames.add(shortName); } } } diff --git a/src/lib/leaflet.control.layers.configure/index.js b/src/lib/leaflet.control.layers.configure/index.js @@ -178,6 +178,7 @@ function enableConfig(control, layers) { url: '', tms: false, maxZoom: 18, + isOverlay: false, scaleDependent: false } ); diff --git a/src/lib/leaflet.control.printPages/control.js b/src/lib/leaflet.control.printPages/control.js @@ -216,12 +216,15 @@ L.Control.PrintPages = L.Control.extend({ decorationLayers.push(new MagneticMeridians()); } decorationLayers.push(new OverlayScale()); + const scale = this.scale(); + const width = this.pageWidth(); + const height = this.pageHeight(); renderPages({ map: this._map, pages, zooms: this.zoomForPrint(), resolution, - scale: this.scale(), + scale, decorationLayers, progressCallback: this.incrementProgress.bind(this) } @@ -229,6 +232,9 @@ L.Control.PrintPages = L.Control.extend({ if (images) { const fileName = this.getFileName({ renderedLayers, + scale, + width, + height, extension: 'pdf' }); savePagesPdf(images, resolution, fileName); @@ -259,12 +265,15 @@ L.Control.PrintPages = L.Control.extend({ this.downloadProgressRange(1000); this.downloadProgressDone(undefined); this.makingPdf(true); + const scale = this.scale(); + const width = this.pageWidth(); + const height = this.pageHeight(); renderPages({ map: this._map, pages, zooms: this.zoomForPrint(), resolution: this.resolution(), - scale: this.scale(), + scale, decorationLayers, progressCallback: this.incrementProgress.bind(this) } @@ -272,6 +281,9 @@ L.Control.PrintPages = L.Control.extend({ .then(({images, renderedLayers}) => { const fileName = this.getFileName({ renderedLayers, + scale, + width, + height, extension: 'jpg' }); savePageJpg(images[0], fileName); @@ -473,46 +485,48 @@ L.Control.PrintPages = L.Control.extend({ return true; }, - getFileName: function({renderedLayers, extension}) { + getFileName: function({renderedLayers, scale, width, height, extension}) { let fileName = ''; - const baseLayers = []; - const overlayLayers = []; + let baseLayer; + let overlayLayer; const transparentOverlayLayers = []; renderedLayers.forEach(layer => { const { options: { isOverlay, - isOverlayTransparent + isOverlayTransparent, + shortName } } = layer; + if (!shortName) { + return; + } + if (isOverlay) { if (isOverlayTransparent) { - transparentOverlayLayers.unshift(layer); + transparentOverlayLayers.push(layer); } else { - overlayLayers.unshift(layer); + overlayLayer = layer; } } else { - baseLayers.unshift(layer); + baseLayer = layer; } }); const appendLayerShortName = (layer) => { fileName += `${layer.options.shortName}_`; } - if (overlayLayers.length > 0) { - appendLayerShortName(overlayLayers[0]); - } else if (baseLayers.length > 0) { - appendLayerShortName(baseLayers[0]); + if (overlayLayer) { + appendLayerShortName(overlayLayer); + } else if (baseLayer) { + appendLayerShortName(baseLayer); } transparentOverlayLayers.forEach(appendLayerShortName); - fileName += `${this.scale()}m`; - - const width = this.pageWidth(); - const height = this.pageHeight(); + fileName += `${scale}m`; const currentPageSize = this.pageSizes.find((pageSize) => { return (width === pageSize.width) && (height === pageSize.height); diff --git a/src/lib/leaflet.control.printPages/map-render.js b/src/lib/leaflet.control.printPages/map-render.js @@ -302,8 +302,9 @@ async function renderPages({map, pages, zooms, resolution, scale, progressCallba } progressCallback(tileInfo.progressInc, progressRange); composer.putTile(tileInfo); - if (tileInfo.image) { - renderedLayers.add(tileInfo.layer); + const {image, draw, layer} = tileInfo; + if ((image || draw) && !layer._layerDummy) { + renderedLayers.add(layer); } } const dataUrl = composer.getDataUrl(); @@ -316,7 +317,7 @@ async function renderPages({map, pages, zooms, resolution, scale, progressCallba } ); } - return { images: pageImagesInfo, renderedLayers }; + return {images: pageImagesInfo, renderedLayers}; } diff --git a/src/lib/leaflet.layer.rasterize/WestraPasses.js b/src/lib/leaflet.layer.rasterize/WestraPasses.js @@ -20,7 +20,7 @@ WestraPassesMarkers.include({ }, cloneForPrint: function (options) { - options = L.Util.extend({}, options); + options = L.Util.extend({}, this.options, options); return new WestraPassesMarkers(this._baseUrl, options); },