commit f8403411461084cf352c1e983060d2fce9cdbc05
parent 8c1df8fe8d06bfc6d373cff660ea2eeee9d97645
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Wed, 4 Jul 2018 14:57:04 +0300
Merge branch 'laters-order' into release-3
Diffstat:
M | src/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;
}