nakarte

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

commit c901316c0b2e4ae84983bc916252e9d39a38b985
parent bfa359ebdb4a3c6d24ba06133d7761a47cf63c40
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Wed,  4 Jul 2018 14:56:40 +0300

[layers] set layers order using list instead of explicit order values

Diffstat:
Msrc/layers.js | 171++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
1 file changed, 100 insertions(+), 71 deletions(-)

diff --git a/src/layers.js b/src/layers.js @@ -19,7 +19,6 @@ export default function getLayers() { { title: 'OpenStreetMap', description: 'OSM default style', - order: 100, isDefault: true, layer: L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { @@ -34,7 +33,6 @@ export default function getLayers() { }, { title: 'ESRI Sat', - order: 200, isDefault: true, layer: L.tileLayer( 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', @@ -51,7 +49,6 @@ export default function getLayers() { }, { title: 'Yandex map', - order: 300, isDefault: true, layer: new L.Layer.Yandex('map', { @@ -66,7 +63,6 @@ export default function getLayers() { }, { title: 'Yandex Satellite', - order: 400, isDefault: true, layer: new L.Layer.Yandex('sat', { @@ -81,7 +77,6 @@ export default function getLayers() { }, { title: 'Google', - order: 500, isDefault: true, layer: new L.Layer.Google('ROADMAP', { @@ -96,7 +91,6 @@ export default function getLayers() { }, { title: 'Google Satellite', - order: 600, isDefault: true, layer: new L.Layer.Google('SATELLITE', { @@ -111,7 +105,6 @@ export default function getLayers() { }, { title: 'Google Terrain', - order: 650, isDefault: true, layer: new L.Layer.Google('TERRAIN', { @@ -126,7 +119,6 @@ export default function getLayers() { }, { title: 'Bing Sat', - order: 700, isDefault: true, layer: new BingLayer(config.bingKey, { @@ -142,7 +134,6 @@ export default function getLayers() { { title: 'marshruty.ru', - order: 800, isDefault: true, layer: L.tileLayer('https://maps.marshruty.ru/ml.ashx?x={x}&y={y}&z={z}&i=1&al=1', { @@ -159,7 +150,6 @@ export default function getLayers() { }, { title: 'Topomapper 1km', - order: 900, isDefault: true, layer: L.tileLayer( 'http://144.76.234.108/cgi-bin/tapp/tilecache.py/1.0.0/topomapper_v2/{z}/{x}/{y}.jpg', @@ -178,7 +168,6 @@ export default function getLayers() { { title: 'Topo 10km', - order: 10100, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/topo001m/{z}/{x}/{y}", { @@ -196,7 +185,6 @@ export default function getLayers() { }, { title: 'GGC 2 km', - order: 10200, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/ggc2000/{z}/{x}/{y}", { @@ -214,7 +202,6 @@ export default function getLayers() { }, { title: 'ArbaletMO', - order: 10300, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/ArbaletMO/{z}/{x}/{y}", { @@ -232,7 +219,6 @@ export default function getLayers() { }, { title: 'Slazav mountains', - order: 10400, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/map_hr/{z}/{x}/{y}", { @@ -250,7 +236,6 @@ export default function getLayers() { }, { title: 'GGC 1km', - order: 10500, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/ggc1000/{z}/{x}/{y}", { @@ -268,7 +253,6 @@ export default function getLayers() { }, { title: 'Topo 1km', - order: 10600, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/topo1000/{z}/{x}/{y}", { @@ -286,7 +270,6 @@ export default function getLayers() { }, { title: 'GGC 500m', - order: 10700, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/ggc500/{z}/{x}/{y}", { @@ -304,7 +287,6 @@ export default function getLayers() { }, { title: 'Topo 500m', - order: 10800, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/topo500/{z}/{x}/{y}", { @@ -322,7 +304,6 @@ export default function getLayers() { }, { title: 'GGC 250m', - order: 10900, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/ggc250/{z}/{x}/{y}", { @@ -340,7 +321,6 @@ export default function getLayers() { }, { title: 'Slazav map', - order: 11000, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/map_podm/{z}/{x}/{y}", { @@ -358,7 +338,6 @@ export default function getLayers() { }, { title: 'Races', - order: 11050, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/adraces/{z}/{x}/{y}", { @@ -376,7 +355,6 @@ export default function getLayers() { }, { title: 'O-sport', - order: 11100, isDefault: true, layer: L.tileLayer("https://tiles.nakarte.tk/osport/{z}/{x}/{y}", { @@ -394,7 +372,6 @@ export default function getLayers() { }, { title: 'Soviet topo maps grid', - order: 11200, isDefault: true, layer: new L.Layer.SovietTopoGrid({ code: 'Ng', @@ -403,7 +380,6 @@ export default function getLayers() { }, { title: 'Wikimapia', - order: 11300, isDefault: true, layer: new L.Wikimapia({ code: 'W', @@ -412,7 +388,6 @@ export default function getLayers() { }, { title: 'Mountain passes (Westra)', - order: 11400, isDefault: true, layer: new L.Layer.WestraPasses(config.westraDataBaseUrl, { code: 'Wp', @@ -435,7 +410,6 @@ export default function getLayers() { layers: [ { title: 'OpenTopoMap', - order: 110, isDefault: false, layer: L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { @@ -453,7 +427,6 @@ export default function getLayers() { { title: 'OpenCycleMap', description: '<a href="https://www.opencyclemap.org/docs/">(Info and key)</a>', - order: 120, isDefault: false, layer: L.tileLayer('https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=' + config.thunderforestKey, { @@ -468,7 +441,6 @@ export default function getLayers() { }, { title: 'OSM Outdoors', - order: 130, isDefault: false, layer: L.tileLayer('https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey=' + config.thunderforestKey, { @@ -489,7 +461,6 @@ export default function getLayers() { { title: 'Eurasia 25km', description: '1975-80', - order: 10090, isDefault: false, layer: L.tileLayer("https://tiles.nakarte.tk/eurasia25km/{z}/{x}/{y}", { @@ -507,7 +478,6 @@ export default function getLayers() { }, { title: 'Caucasus 1km', - order: 10610, isDefault: false, layer: L.tileLayer("https://tiles.nakarte.tk/new_gsh_100k/{z}/{x}/{y}", { @@ -525,7 +495,6 @@ export default function getLayers() { }, { title: 'Caucasus 500m', - order: 10810, isDefault: false, layer: L.tileLayer("https://tiles.nakarte.tk/new_gsh_050k/{z}/{x}/{y}", { @@ -543,7 +512,6 @@ export default function getLayers() { }, { title: 'Topo 250m', - order: 10950, isDefault: false, layer: L.tileLayer("https://tiles.nakarte.tk/topo250/{z}/{x}/{y}", { @@ -562,7 +530,6 @@ export default function getLayers() { { title: 'Montenegro topo 250m', description: '1970-72', - order: 10960, isDefault: false, layer: L.tileLayer("https://tiles.nakarte.tk/montenegro250m/{z}/{x}/{y}", { @@ -586,7 +553,6 @@ export default function getLayers() { { title: 'Mountains by Aleksey Tsvetkov', description: 'Tian Shan, Dzungaria, <a href="http://pereval.g-utka.ru/">http://pereval.g-utka.ru/</a>', - order: 10390, isDefault: false, layer: L.tileLayer("http://map.g-utka.ru/{z}/{x}/{y}.png", // FIXME: сделать minZoom=5, когда перейдём на версию leaflet с поддержкой minNativeZoom @@ -612,7 +578,6 @@ export default function getLayers() { layers: [ { title: 'Bing imagery acquisition dates', - order: 11110, isDefault: false, layer: new BingDates({ code: 'Bd', @@ -626,7 +591,6 @@ export default function getLayers() { }, { title: 'geocaching.su', - order: 11500, isDefault: false, layer: new GeocachingSu(config.geocachingSuUrl, { code: 'Gc', @@ -639,7 +603,6 @@ export default function getLayers() { }, { title: 'OpenStreetMap GPS traces', - order: 11120, isDefault: false, layer: L.tileLayer('https://{s}.gps-tile.openstreetmap.org/lines/{z}/{x}/{y}.png', { @@ -655,7 +618,6 @@ export default function getLayers() { }, { title: 'Strava heatmap (all)', - order: 11130, isDefault: false, layer: new StravaHeatmap('https://heatmap-external-{s}.strava.com/tiles-auth/all/hot/{z}/{x}/{y}.png?px=256', { @@ -672,7 +634,6 @@ export default function getLayers() { }, { title: 'Strava heatmap (run)', - order: 11131, isDefault: false, layer: new StravaHeatmap('https://heatmap-external-{s}.strava.com/tiles-auth/run/hot/{z}/{x}/{y}.png?px=256', { @@ -689,7 +650,6 @@ export default function getLayers() { }, { title: 'Strava heatmap (ride)', - order: 11132, isDefault: false, layer: new StravaHeatmap('https://heatmap-external-{s}.strava.com/tiles-auth/ride/hot/{z}/{x}/{y}.png?px=256', { @@ -706,7 +666,6 @@ export default function getLayers() { }, { title: 'Strava heatmap (winter)', - order: 11133, isDefault: false, layer: new StravaHeatmap('https://heatmap-external-{s}.strava.com/tiles-auth/winter/hot/{z}/{x}/{y}.png?px=256', { @@ -723,7 +682,6 @@ export default function getLayers() { }, { title: 'Strava heatmap lowres (all)', - order: 11134, isDefault: false, layer: L.tileLayer('https://heatmap-external-{s}.strava.com/tiles/all/hot/{z}/{x}/{y}.png?px=256', { @@ -740,7 +698,6 @@ export default function getLayers() { }, { title: 'Strava heatmap lowres (run)', - order: 11135, isDefault: false, layer: L.tileLayer('https://heatmap-external-{s}.strava.com/tiles/run/hot/{z}/{x}/{y}.png?px=256', { @@ -757,7 +714,6 @@ export default function getLayers() { }, { title: 'Strava heatmap lowres (ride)', - order: 11136, isDefault: false, layer: L.tileLayer('https://heatmap-external-{s}.strava.com/tiles/ride/hot/{z}/{x}/{y}.png?px=256', { @@ -774,7 +730,6 @@ export default function getLayers() { }, { title: 'Strava heatmap lowres (winter)', - order: 11137, isDefault: false, layer: L.tileLayer('https://heatmap-external-{s}.strava.com/tiles/winter/hot/{z}/{x}/{y}.png?px=256', { @@ -798,7 +753,6 @@ export default function getLayers() { { // Вместо 404 отдают 500 для отсутствующих тайлов title: 'Norway UT map', - order: 5000, isDefault: false, layer: L.tileLayer("https://tilesprod.ut.no/tilestache/ut_topo_light/{z}/{x}/{y}.jpg", { @@ -816,7 +770,6 @@ export default function getLayers() { }, { title: 'Norway paper map', - order: 10310, isDefault: false, layer: new L.TileLayer.Nordeskart('https://gatekeeper1.geonorge.no/BaatGatekeeper/gk/gk.cache_gmaps?layers=toporaster3&zoom={z}&x={x}&y={y}&gkt={baatToken}', { @@ -834,7 +787,6 @@ export default function getLayers() { }, { title: 'Norway map', - order: 10320, isDefault: false, layer: new L.TileLayer.Nordeskart('https://gatekeeper1.geonorge.no/BaatGatekeeper/gk/gk.cache_gmaps?layers=topo4&zoom={z}&x={x}&y={y}&gkt={baatToken}', { @@ -851,7 +803,6 @@ export default function getLayers() { }, { title: 'Norway summer trails', - order: 20000, isDefault: false, layer: L.tileLayer("https://tilesprod.ut.no/tilestache/dnt_sommer/{z}/{x}/{y}.png", { @@ -869,7 +820,6 @@ export default function getLayers() { }, { title: 'Norway winter trails', - order: 20010, isDefault: false, layer: L.tileLayer("https://tilesprod.ut.no/tilestache/dnt_vinter/{z}/{x}/{y}.png", { @@ -889,7 +839,6 @@ export default function getLayers() { // Вместо 404 отдают 500 для отсутствующих тайлов title: 'Norway roads', description: '<a href="https://kart.finn.no/">https://kart.finn.no/</a>', - order: 5030, isDefault: false, layer: L.tileLayer("https://maptiles1.finncdn.no/tileService/1.0.3/normap/{z}/{x}/{y}.png", { @@ -910,7 +859,6 @@ export default function getLayers() { layers: [ { title: 'Czech base', - order: 5040, isDefault: false, layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/base-m/{z}-{x}-{y}", { @@ -927,7 +875,6 @@ export default function getLayers() { }, { title: 'Czech tourist', - order: 5050, isDefault: false, layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/turist-m/{z}-{x}-{y}", { @@ -944,7 +891,6 @@ export default function getLayers() { }, { title: 'Czech summer', - order: 5060, isDefault: false, layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/turist_aquatic-m/{z}-{x}-{y}", { @@ -961,7 +907,6 @@ export default function getLayers() { }, { title: 'Czech winter', - order: 5070, isDefault: false, layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/winter-m/{z}-{x}-{y}", { @@ -978,7 +923,6 @@ export default function getLayers() { }, { title: 'Czech geographical', - order: 5080, isDefault: false, layer: L.tileLayer("https://m{s}.mapserver.mapy.cz/zemepis-m/{z}-{x}-{y}", { @@ -995,38 +939,118 @@ export default function getLayers() { }] } ]; + + const titlesByOrder = [ + // common base layers + "OpenStreetMap", + "OpenTopoMap", + "OpenCycleMap", + "OSM Outdoors", + "ESRI Sat", + "Yandex map", + "Yandex Satellite", + "Google", + "Google Satellite", + "Google Terrain", + "Bing Sat", + "marshruty.ru", + "Topomapper 1km", + + // local base layers + "Czech base", + "Czech tourist", + "Czech summer", + "Czech winter", + "Czech geographical", + "Norway UT map", + + // map overlays + "Norway roads", + "Eurasia 25km", + "Topo 10km", + "GGC 2 km", + "ArbaletMO", + "Norway paper map", + "Norway map", + "Mountains by Aleksey Tsvetkov", + "Slazav mountains", + "GGC 1km", + "Topo 1km", + "Caucasus 1km", + "GGC 500m", + "Topo 500m", + "Caucasus 500m", + "GGC 250m", + "Topo 250m", + "Montenegro topo 250m", + "Slazav map", + "Races", + "O-sport", + + // line overlays + "Norway summer trails", + "Norway winter trails", + "Bing imagery acquisition dates", + "OpenStreetMap GPS traces", + "Strava heatmap (all)", + "Strava heatmap (run)", + "Strava heatmap (ride)", + "Strava heatmap (winter)", + "Strava heatmap lowres (all)", + "Strava heatmap lowres (run)", + "Strava heatmap lowres (ride)", + "Strava heatmap lowres (winter)", + "Soviet topo maps grid", + "Wikimapia", + + // point overlays + "Mountain passes (Westra)", + "geocaching.su", + ]; + + const orderByTitle = {}; + for (let i=0; i < titlesByOrder.length; i++) { + const title = titlesByOrder[i]; + orderByTitle[title] = i + 1; + } + + for (let group of layers) { + for (let layer of group.layers) { + const title = layer.title; + layer.order = orderByTitle[title]; + if (!layer.order) { + throw new Error(`Layer title not found in titlesByOrder list: ${title}`) + } + } + } // TODO: move it to tests - const codes = {}; - const orders = {}; + const codes = new Set(); + const titles = new Set(); const shortNames = new Set(); for (let group of layers) { for (let layer of group.layers) { - const { layer: { options } } = layer + const {title, layer: {options}} = layer; if (!options) { - throw new Error('Layer without options: ' + layer.title); + throw new Error(`Layer without options: ${layer.title}`); + } + if (titles.has(title)) { + throw new Error(`Duplicate layer title "${title}"`); } + titles.add(title); const { code, shortName, print, isOverlay, isOverlayTransparent - } = options + } = options; if (!code) { throw new Error('Layer without code: ' + layer.title); } - if (code in codes) { + if (codes.has(code)) { throw new Error(`Duplicate layer code "${code}"`); } - codes[code] = 1; - let order = layer.order; - if (!order) { - throw new Error('Layer without order: ' + layer.title); - } - if (order in orders) { - throw new Error(`Duplicate layer order "${order}"`); - } - orders[order] = 1; + codes.add(code); if (print) { if (isOverlay && (isOverlayTransparent === undefined)) { @@ -1042,6 +1066,11 @@ export default function getLayers() { } } } + for (let title of titlesByOrder) { + if (!titles.has(title)) { + throw new Error(`Unknown layer title in order list: ${title}`); + } + } return layers; }