Merge pull request #164 from nrenner/layers-tree

Optional layers tree
This commit is contained in:
Norbert Renner 2019-03-22 20:58:40 +01:00 committed by GitHub
commit 5a12879892
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
54 changed files with 13238 additions and 76 deletions

View file

@ -389,11 +389,18 @@ table.dataTable.display tbody tr.even:hover {
height: 100%;
}
.leaflet-sidebar-content {
/* for optional-layers-tree */
overflow-x: auto;
}
/* layers control as sidebar tab */
#layers-control-wrapper label {
#layers-control-wrapper label,
#optional-layers-tree {
font-size: 0.9rem;
line-height: normal;
}
#layers-control-wrapper label {
/* override Bootstrap/Reboot label */
display: block;
margin-bottom: 0px;
@ -404,6 +411,19 @@ table.dataTable.display tbody tr.even:hover {
height: 23px;
}
#layers-button-group {
display: flex;
justify-content: space-between;
}
#tree-button-group {
margin-right: 5px;
}
#optional-layers-tree {
margin-top: 5px;
}
/* hide currently unused bottom tabs container because of touch border artefacts */
.leaflet-sidebar-tabs > ul:last-child {
display: none;

View file

@ -23,6 +23,8 @@ var cleanCSS = require('gulp-clean-css');
var modifyCssUrls = require('gulp-modify-css-urls');
var sort = require('gulp-sort');
var scanner = require('i18next-scanner');
var jsonConcat = require('gulp-json-concat');
var rename = require("gulp-rename");
var debug = false;
@ -41,6 +43,7 @@ var paths = {
'js/Browser.js',
'js/Util.js',
'js/Map.js',
'js/LayersConfig.js',
'js/router/BRouter.js',
'js/plugin/*.js',
'js/control/*.js',
@ -53,6 +56,8 @@ var paths = {
images: mainNpmFiles().filter(f => RegExp('.*.+(png|gif|svg)', 'i').test(f)),
fonts: mainNpmFiles().filter(f => RegExp('font-awesome/fonts/.*', 'i').test(f)),
locales: 'locales/*.json',
layers: 'layers/**/*.geojson',
layersDestName: 'layers.js',
dest: 'dist',
destName: 'brouter-web'
};
@ -162,7 +167,7 @@ gulp.task('inject', function () {
.pipe(gulp.dest('.'));
});
gulp.task('default', ['clean', 'scripts_config', 'scripts', 'styles', 'images', 'fonts', 'locales']);
gulp.task('default', ['clean', 'scripts_config', 'layers', 'scripts', 'styles', 'images', 'fonts', 'locales']);
gulp.task('debug', function() {
debug = true;
@ -272,3 +277,14 @@ gulp.task('i18next', function() {
}))
.pipe(gulp.dest('.'));
})
// Bundles layer files. To download and extract run "yarn layers"
gulp.task('layers', function () {
return gulp.src(paths.layers)
// Workaround to get file extension removed from the dictionary key
.pipe(rename({ extname: ".json" }))
.pipe(jsonConcat(paths.layersDestName, function(data){
return Buffer.from('BR.layerIndex = ' + JSON.stringify(data, null, 2) + ';');
}))
.pipe(gulp.dest(paths.dest));
});

View file

@ -278,12 +278,22 @@
<div class="leaflet-sidebar-content">
<div class="leaflet-sidebar-pane" id="tab_layers_control">
<h1 class="leaflet-sidebar-header"><span class="leaflet-sidebar-close"><i class="fa fa-caret-right"></i></span><span data-i18n="sidebar.layers.title">Layers</span></h1>
<h1 class="leaflet-sidebar-header"><span class="leaflet-sidebar-close"><i class="fa fa-caret-right"></i></span><span class="leaflet-sidebar-expand"><i class="fa fa-expand"></i></span><span data-i18n="sidebar.layers.title">Layers</span></h1>
<div id="layers-control-wrapper"></div>
<div class="leaflet-control-layers-separator"></div>
<div>
<button type="button" id="custom_layers_button" class="btn btn-sm pull-right" data-i18n="[title]sidebar.layers.customize" title="Add or remove custom layers"><span class="fa fa-plus-square"></span> <span data-i18n="sidebar.layers.custom-layers">Custom layers</span></button>
<div id="layers-button-group">
<div hidden id="tree-button-group">
<button type="button" id="expand_tree_button" class="btn btn-sm" data-i18n="[title]sidebar.layers.expand" title="Expand all"><span class="fa fa-plus-square-o"></span></button>
<button type="button" id="collapse_tree_button" class="btn btn-sm" data-i18n="[title]sidebar.layers.collapse" title="Collapse all"><span class="fa fa-minus-square-o"></span></button>
</div>
<!-- empty dummy to keep following buttons right-aligned when previous hidden -->
<div></div>
<div>
<button type="button" id="optional_layers_button" class="btn btn-sm" data-i18n="[title]sidebar.layers.optional" title="Add or remove optional layers"><span class="fa fa-cogs"></span> <span data-i18n="sidebar.layers.optional-layers">More</span></button>
<button type="button" id="custom_layers_button" class="btn btn-sm" data-i18n="[title]sidebar.layers.customize" title="Add or remove custom layers"><span class="fa fa-plus-square"></span> <span data-i18n="sidebar.layers.custom-layers">Custom layers</span></button>
</div>
</div>
<div hidden id="optional-layers-tree"></div>
</div>
<div class="leaflet-sidebar-pane" id="tab_profile">
@ -358,6 +368,7 @@
<script src="dist/url-search-params.js"></script>
<script src="config.js"></script>
<script src="keys.js"></script>
<script src="dist/layers.js"></script>
<!-- "gulp inject" for debugging -->
<!-- inject:js -->

239
js/LayersConfig.js Normal file
View file

@ -0,0 +1,239 @@
BR.LayersConfig = L.Class.extend({
defaultBaseLayers: [
'standard',
'osm-mapnik-german_style',
'OpenTopoMap',
'Stamen.Terrain',
'Esri.WorldImagery'
],
defaultOverlays: [
'HikeBike.HillShading',
'Waymarked_Trails-Cycling',
'Waymarked_Trails-Hiking'
],
initialize: function (map) {
this._map = map;
this._addLeafletProvidersLayers();
this._customizeLayers();
},
_addLeafletProvidersLayers: function () {
var includeList = [
'Stamen.Terrain',
'MtbMap',
'OpenStreetMap.CH',
'HikeBike.HillShading',
'Esri.WorldImagery'
];
for (var i = 0; i < includeList.length; i++) {
var id = includeList[i];
var obj = {
geometry: null,
properties: {
id: id,
name: id.replace('.', ' '),
dataSource: 'leaflet-providers'
},
type: "Feature"
};
BR.layerIndex[id] = obj;
}
},
_customizeLayers: function () {
// add Thunderforest API key variable
BR.layerIndex['opencylemap'].properties.url = 'https://{switch:a,b,c}.tile.thunderforest.com/cycle/{zoom}/{x}/{y}.png?apikey={keys_thunderforest}';
BR.layerIndex['1061'].properties.url = 'http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png?apikey={keys_thunderforest}';
BR.layerIndex['HikeBike.HillShading'].properties.overlay = true;
function setProperty(layerId, key, value) {
var layer = BR.layerIndex[layerId];
if (layer) {
layer.properties[key] = value;
} else {
console.error('Layer not found: ' + layerId);
}
}
function setMapUrl(layerId, url) {
setProperty(layerId, 'mapUrl', url);
}
function setName(layerId, url) {
setProperty(layerId, 'name', url);
}
// Layer attribution here only as short link to original site,
// to keep current position use placeholders: {zoom}/{lat}/{lon}
// Copyright attribution in index.html #credits
setMapUrl('standard', '<a target="_blank" href="https://www.openstreetmap.org/#map={zoom}/{lat}/{lon}">OpenStreetMap</a>');
setMapUrl('osm-mapnik-german_style', '<a target="_blank" href="https://www.openstreetmap.de/karte.html?zoom={zoom}&lat={lat}&lon={lon}&layers=B000TF">OpenStreetMap.de</a>');
setMapUrl('OpenTopoMap', '<a target="_blank" href="https://opentopomap.org/#map={zoom}/{lat}/{lon}">OpenTopoMap</a>');
setMapUrl('Stamen.Terrain', '<a target="_blank" href="http://maps.stamen.com/#terrain/{zoom}/{lat}/{lon}">' + i18next.t('map.layer.stamen-terrain') + '</a>');
setMapUrl('opencylemap', '<a target="_blank" href="https://www.opencyclemap.org/?zoom={zoom}&lat={lat}&lon={lon}&layers=B0000">OpenCycleMap</a>');
setMapUrl('1061', '<a target="_blank" href="https://www.opencyclemap.org/?zoom={zoom}&lat={lat}&lon={lon}&layers=000B0">Outdoors</a>');
setMapUrl('Esri.WorldImagery', '<a target="_blank" href="http://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9">' + i18next.t('credits.esri-tiles') + '</a>');
setMapUrl('HikeBike.HillShading', '<a target="_blank" href="http://hikebikemap.org/?zoom={zoom}&lat={lat}&lon={lon}&layer=HikeBikeMap">' + i18next.t('map.hikebike-hillshading') + '</a>');
setMapUrl('Waymarked_Trails-Cycling', '<a target="_blank" href="http://cycling.waymarkedtrails.org/#?map={zoom}!{lat}!{lon}">' + i18next.t('map.cycling') + '</a>');
setMapUrl('Waymarked_Trails-Hiking', '<a target="_blank" href="http://hiking.waymarkedtrails.org/#?map={zoom}!{lat}!{lon}">' + i18next.t('map.hiking') + '</a>');
setName('standard', i18next.t('map.layer.osm'));
setName('osm-mapnik-german_style', i18next.t('map.layer.osmde'));
setName('OpenTopoMap', i18next.t('map.layer.topo'));
setName('Stamen.Terrain', i18next.t('map.layer.stamen-terrain'));
setName('opencylemap', i18next.t('map.layer.cycle'));
setName('1061', i18next.t('map.layer.outdoors'));
setName('Esri.WorldImagery', i18next.t('map.layer.esri'));
setName('HikeBike.HillShading', i18next.t('map.layer.hikebike-hillshading'));
setName('Waymarked_Trails-Cycling', i18next.t('map.layer.cycling'));
setName('Waymarked_Trails-Hiking', i18next.t('map.layer.hiking'));
},
isDefaultLayer: function(id, overlay) {
var result = false;
if (overlay) {
result = this.defaultOverlays.indexOf(id) > -1;
} else {
result = this.defaultBaseLayers.indexOf(id) > -1;
}
return result;
},
getBaseLayers: function() {
return this._getLayers(this.defaultBaseLayers);
},
getOverlays: function() {
return this._getLayers(this.defaultOverlays);
},
_getLayers: function(ids) {
var layers = {};
for (var i = 0; i < ids.length; i++) {
var layerId = ids[i];
var layerData = BR.layerIndex[layerId];
if (layerData) {
layers[layerData.properties.name] = this.createLayer(layerData);
} else {
console.error('Layer not found: ' + layerId);
}
}
return layers;
},
// own convention: key placeholder with prefix
// e.g. ?api_key={keys_openrouteservice}
getKeyName: function (url) {
var result = null;
// L.Util.template only matches [\w_-]
var prefix = 'keys_';
var regex = new RegExp('{' + prefix + '([^}]*)}');
var found, name;
if (!url) return result;
found = url.match(regex);
if (found) {
name = found[1];
result = {
name: name,
urlVar: prefix + name
};
}
return result;
},
createLayer: function (layerData) {
var props = layerData.properties;
var url = props.url;
var layer;
// JOSM: https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png
// Leaflet: https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
function convertUrlJosm(url) {
var rxSwitch = /{switch:[^}]*}/;
var rxZoom = /{zoom}/g;
var result = url.replace(rxSwitch, '{s}');
result = result.replace(rxZoom, '{z}');
return result;
}
// JOSM: https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png
// Leaflet: ['a','b','c']
function getSubdomains(url) {
var result = 'abc';
var regex = /{switch:([^}]*)}/;
var found = url.match(regex);
if (found) {
result = found[1].split(',');
}
return result;
}
var options = {
maxZoom: this._map.getMaxZoom(),
mapUrl: props.mapUrl
};
var keyObj = this.getKeyName(url);
if (keyObj && BR.keys[keyObj.name]) {
options[keyObj.urlVar] = BR.keys[keyObj.name];
}
if (props.dataSource === 'leaflet-providers') {
layer = L.tileLayer.provider(props.id);
var layerOptions = L.Util.extend(options, {
maxNativeZoom: layer.options.maxZoom,
});
L.setOptions(layer, layerOptions);
} else if (props.dataSource === 'LayersCollection') {
layer = L.tileLayer(url, L.Util.extend(options, {
minZoom: props.minZoom,
maxNativeZoom: props.maxZoom,
}));
if (props.subdomains) {
layer.subdomains = props.subdomains;
}
} else {
// JOSM
var url = convertUrlJosm(url);
var josmOptions = L.Util.extend(options, {
minZoom: props.min_zoom,
maxNativeZoom: props.max_zoom,
subdomains: getSubdomains(url),
});
if (props.type && props.type === 'wms') {
layer = L.tileLayer.wms(url, L.Util.extend(josmOptions, {
layers: props.layers,
format: props.format
}));
} else {
layer = L.tileLayer(url, josmOptions);
}
}
var getAttribution = function () {
return this.options.mapUrl;
}
layer.getAttribution = getAttribution;
return layer;
}
});
BR.layersConfig = function (map) {
return new BR.LayersConfig(map);
};

View file

@ -8,62 +8,10 @@ BR.Map = {
var maxZoom = 19;
// Layer attribution here only as short link to original site,
// to keep current position use placeholders: {zoom}/{lat}/{lon}
// Copyright attribution in index.html #credits
var osm = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: maxZoom,
attribution: '<a target="_blank" href="https://www.openstreetmap.org/#map={zoom}/{lat}/{lon}">OpenStreetMap</a>'
});
var osmde = L.tileLayer('https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', {
maxNativeZoom: 19,
maxZoom: maxZoom,
attribution: '<a target="_blank" href="https://www.openstreetmap.de/karte.html?zoom={zoom}&lat={lat}&lon={lon}&layers=B000TF">OpenStreetMap.de</a>'
});
var topo = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
maxNativeZoom: 17,
maxZoom: maxZoom,
attribution: '<a target="_blank" href="https://opentopomap.org/#map={zoom}/{lat}/{lon}">OpenTopoMap</a>'
});
var thunderforestAuth = BR.keys.thunderforest ? '?apikey=' + BR.keys.thunderforest : '';
var cycle = L.tileLayer('https://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png' + thunderforestAuth, {
maxNativeZoom: 18,
maxZoom: maxZoom,
attribution: '<a target="_blank" href="https://www.opencyclemap.org/?zoom={zoom}&lat={lat}&lon={lon}&layers=B0000">OpenCycleMap</a>'
});
var outdoors = L.tileLayer('https://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png' + thunderforestAuth, {
maxNativeZoom: 18,
maxZoom: maxZoom,
attribution: '<a target="_blank" href="https://www.opencyclemap.org/?zoom={zoom}&lat={lat}&lon={lon}&layers=000B0">Outdoors</a>'
});
var esri = L.tileLayer('https://{s}.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxNativeZoom: 19,
maxZoom: maxZoom,
subdomains: ['server', 'services'],
attribution: '<a target="_blank" href="http://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9">' + i18next.t('credits.esri-tiles') + '</a>'
});
var cycling = L.tileLayer('https://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', {
maxNativeZoom: 18,
opacity: 0.7,
maxZoom: maxZoom,
attribution: '<a target="_blank" href="http://cycling.waymarkedtrails.org/#?map={zoom}!{lat}!{lon}">' + i18next.t('map.cycling') + '</a>'
});
var hiking = L.tileLayer('https://tile.waymarkedtrails.org/hiking/{z}/{x}/{y}.png', {
maxNativeZoom: 18,
opacity: 0.7,
maxZoom: maxZoom,
attribution: '<a target="_blank" href="http://hiking.waymarkedtrails.org/#?map={zoom}!{lat}!{lon}">' + i18next.t('map.hiking') + '</a>'
});
map = new L.Map('map', {
zoomControl: false, // add it manually so that we can translate it
worldCopyJump: true
worldCopyJump: true,
maxZoom: maxZoom
});
L.control.zoom({
zoomInTitle: i18next.t('map.zoomInTitle'),
@ -84,16 +32,9 @@ BR.Map = {
new L.Control.PermalinkAttribution().addTo(map);
map.attributionControl.setPrefix(false);
var baseLayers = {}
baseLayers[i18next.t('map.layer.osm')] = osm;
baseLayers[i18next.t('map.layer.osmde')] = osmde;
baseLayers[i18next.t('map.layer.topo')] = topo;
baseLayers[i18next.t('map.layer.cycle')] = cycle;
baseLayers[i18next.t('map.layer.outdoors')] = outdoors;
baseLayers[i18next.t('map.layer.esri')] = esri;
var overlays = {}
overlays[i18next.t('map.layer.cycling')] = cycling;
overlays[i18next.t('map.layer.hiking')] = hiking;
var layersConfig = BR.layersConfig(map);
var baseLayers = layersConfig.getBaseLayers();
var overlays = layersConfig.getOverlays();
if (BR.keys.bing) {
baseLayers[i18next.t('map.layer.bing')] = new BR.BingLayer(BR.keys.bing);
@ -128,7 +69,7 @@ BR.Map = {
map.addLayer(defaultLayer);
}
layersControl = BR.layersTab(baseLayers, overlays).addTo(map);
layersControl = BR.layersTab(layersConfig, baseLayers, overlays).addTo(map);
var secureContext = 'isSecureContext' in window ? isSecureContext : location.protocol === 'https:';
if (secureContext) {

View file

@ -1,9 +1,360 @@
BR.LayersTab = L.Control.Layers.extend({
previewLayer: null,
saveLayers: [],
initialize: function (layersConfig, baseLayers, overlays, options) {
L.Control.Layers.prototype.initialize.call(this, baseLayers, overlays, options);
this.layersConfig = layersConfig;
},
addTo: function (map) {
this._map = map;
this.onAdd(map);
var layerIndex = BR.layerIndex;
L.DomUtil.get('layers-control-wrapper').appendChild(this._form);
this.initButtons();
var structure = {
'Base layers': {
'Worldwide international': [
'standard',
'OpenTopoMap',
'Stamen.Terrain',
'Esri.WorldImagery',
'wikimedia-map',
'HDM_HOT',
'1010', // OpenStreetMap.se (Hydda.Full)
'opencylemap',
'1061', // Thunderforest Outdoors
'1065', // Hike & Bike Map
'1016', // 4UMaps,
'openmapsurfer'
],
'Worldwide monolingual': [
'osm-mapnik-german_style',
'osmfr',
'1023', // Osmapa.pl - Mapa OpenStreetMap Polska
'1021', // kosmosnimki.ru
'1017' // sputnik.ru
],
'Europe': [
'MtbMap',
'1069' // MRI (maps.refuges.info)
],
'Country': [
'topplus-open',
'OpenStreetMap.CH',
'Freemap.sk-Car',
'Freemap.sk-Hiking',
'Freemap.sk-Cyclo',
'OpenStreetMap-turistautak',
'Israel_Hiking',
'Israel_MTB',
'osmbe',
'osmbe-fr',
'osmbe-nl',
'osmfr-basque',
'osmfr-breton',
'osmfr-occitan',
'mtbmap-no',
'osm-cambodia_laos_thailand_vietnam-bilingual'
]
},
'Overlays': {
'World-wide': [
'HikeBike.HillShading',
'Waymarked_Trails-Hiking',
'Waymarked_Trails-Cycling',
'Waymarked_Trails-MTB',
'mapillary-coverage-raster'
],
'Country': [
'historic-place-contours',
'hu-hillshade',
{
'PL - Poland': [
'mapaszlakow-cycle',
'mapaszlakow-bike',
'mapaszlakow-hike',
'mapaszlakow-mtb',
'mapaszlakow-incline'
]
}
]
}
};
var treeData = this.toJsTree(structure);
var oldSelected = null;
var onSelectNode = function (e, data) {
var layerData = layerIndex[data.node.id];
var selected = data.selected[0];
if (selected !== oldSelected) {
this.showPreview(this.createLayer(layerData));
oldSelected = selected;
} else {
data.instance.deselect_node(data.node);
}
};
var onDeselectNode = function (e, data) {
this.hidePreview();
oldSelected = null;
};
var onCheckNode = function (e, data) {
var layerData = layerIndex[data.node.id];
var layer = this.createLayer(layerData);
var name = layerData.properties.name;
var overlay = layerData.properties.overlay;
if (overlay) {
this.addOverlay(layer, name);
} else {
this.addBaseLayer(layer, name);
}
};
var onUncheckNode = function (e, data) {
var obj = this._getLayerObjByName(data.node.text);
if (!obj) return;
this.removeLayer(obj.layer);
if (this._map.hasLayer(obj.layer)) {
this._map.removeLayer(obj.layer);
if (!obj.overlay) {
this.addFirstLayer();
}
}
};
$('#optional-layers-tree')
.on('select_node.jstree', L.bind(onSelectNode, this))
.on('deselect_node.jstree', L.bind(onDeselectNode, this))
.on('check_node.jstree', L.bind(onCheckNode, this))
.on('uncheck_node.jstree', L.bind(onUncheckNode, this))
.on('ready.jstree', function (e, data) {
data.instance.open_all();
})
.jstree({
plugins: [ 'checkbox' ],
checkbox: {
whole_node: false,
tie_selection: false
},
core: {
'multiple': false,
'themes': {
'icons': false,
dots : false
},
'data' : treeData
}
});
this.jstree = $('#optional-layers-tree').jstree(true);
return this;
},
initButtons: function () {
var expandTree = function (e) {
this.jstree.open_all();
};
var collapseTree = function (e) {
this.jstree.close_all();
};
var toggleOptionalLayers = function (e) {
var button = L.DomUtil.get('optional_layers_button');
var treeButtons = L.DomUtil.get('tree-button-group');
var div = L.DomUtil.get('optional-layers-tree');
div.hidden = !div.hidden;
treeButtons.hidden = !treeButtons.hidden;
button.classList.toggle('active');
if (div.hidden) {
this.deselectNode();
}
};
L.DomUtil.get('expand_tree_button').onclick = L.bind(expandTree, this);
L.DomUtil.get('collapse_tree_button').onclick = L.bind(collapseTree, this);
L.DomUtil.get('optional_layers_button').onclick = L.bind(toggleOptionalLayers, this);
},
toJsTree: function (layerTree) {
var data = [];
var self = this;
function createRootNode(name) {
var children = [];
var rootNode = {
'text': name,
'state': {
'disabled': true
},
'children': children
};
return rootNode;
}
function createNode(id, layerData) {
var props = layerData.properties;
var url = props.url;
var keyObj = self.layersConfig.getKeyName(url);
var childNode = null;
// when key required only add if configured
if (!keyObj || keyObj && BR.keys[keyObj.name]) {
childNode = {
'id': id,
'text': props.name,
'state': {
'checked': self.layersConfig.isDefaultLayer(id, props.overlay)
}
};
}
return childNode;
}
function walkTree(inTree, outTree) {
function walkObject(obj) {
for (name in obj) {
var value = obj[name];
var rootNode = createRootNode(name)
outTree.push(rootNode);
walkTree(value, rootNode.children);
}
}
if (Array.isArray(inTree)) {
for (var i = 0; i < inTree.length; i++) {
var entry = inTree[i];
if (typeof entry === 'object') {
walkObject(entry);
} else {
var layer = BR.layerIndex[entry];
if (layer) {
var childNode = createNode(entry, layer);
if (childNode) {
outTree.push(childNode);
}
} else {
console.error('Layer "' + entry + '" not found');
}
}
}
} else {
walkObject(inTree);
}
}
walkTree(layerTree, data);
return data;
},
addFirstLayer: function () {
for (var i = 0; i < this._layers.length; i++) {
var obj = this._layers[i];
if (!obj.overlay) {
this._map.addLayer(obj.layer);
break;
}
}
},
_getLayerObjByName: function (name) {
for (var i = 0; i < this._layers.length; i++) {
if (this._layers[i] && this._layers[i].name === name) {
return this._layers[i];
}
}
},
createLayer: function (layerData) {
var layer = this.layersConfig.createLayer(layerData);
layer.options.zIndex = this._lastZIndex + 1;
return layer;
},
removeSelectedLayers: function () {
for (var i = 0; i < this._layers.length; i++) {
var obj = this._layers[i];
if (this._map.hasLayer(obj.layer)) {
this._map.removeLayer(obj.layer);
this.saveLayers.push(obj);
}
}
},
restoreSelectedLayers: function (overlaysOnly) {
for (var i = 0; i < this.saveLayers.length; i++) {
var obj = this.saveLayers[i];
if (!overlaysOnly || (overlaysOnly && obj.overlay)) {
var hasLayer = !!this._getLayer(L.Util.stamp(obj.layer));
if (hasLayer) {
if (!this._map.hasLayer(obj.layer)) {
this._map.addLayer(obj.layer);
}
} else if (!obj.overlay) {
// saved base layer has been removed during preview, select first
this.addFirstLayer();
}
}
}
this.saveLayers = [];
},
removePreviewLayer: function () {
if (this.previewLayer && this._map.hasLayer(this.previewLayer)) {
this._map.removeLayer(this.previewLayer);
this.previewLayer = null;
return true;
}
return false;
},
deselectNode: function () {
var selected = this.jstree.get_selected();
if (selected.length > 0) {
this.jstree.deselect_node(selected[0]);
}
},
onBaselayerchange: function () {
// execute after current input click handler,
// otherwise added overlay checkbox state doesn't update
setTimeout(L.Util.bind(function () {
this.removePreviewLayer();
this.restoreSelectedLayers(true);
this.deselectNode();
}, this), 0);
},
showPreview: function (layer) {
this._map.addLayer(layer);
if (!this.removePreviewLayer()) {
this.removeSelectedLayers();
this._map.once('baselayerchange', this.onBaselayerchange, this);
}
this.previewLayer = layer;
},
hidePreview: function (layer) {
this._map.off('baselayerchange', this.onBaselayerchange, this);
this.removePreviewLayer();
this.restoreSelectedLayers();
}
});

View file

@ -13,7 +13,10 @@
thunderforest: '',
// Strava API token in case you want to display Strava segments
strava: ''
strava: '',
// OpenMapSurfer (OpenRouteService API), https://openrouteservice.org/plans/
openrouteservice: ''
};
})();

View file

@ -0,0 +1,20 @@
{
"geometry": null,
"properties": {
"name": "OpenStreetMap.se",
"maxZoom": 18,
"attribution": "Map data: &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, under ODbL | Tiles: &copy; <a href=\"http://openstreetmap.se/\" target=\"_blank\">OpenStreetMap Sweden</a>",
"id": "1010",
"subdomains": [
"a",
"b",
"c",
"d",
"e",
"f"
],
"url": "http://{s}.tile.openstreetmap.se/hydda/full/{z}/{x}/{y}.png",
"dataSource": "LayersCollection"
},
"type": "Feature"
}

View file

@ -0,0 +1,12 @@
{
"geometry": null,
"properties": {
"name": "4UMaps",
"maxZoom": 15,
"attribution": "Map data: &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, under ODbL | Tiles: &copy; <a href=\"http://www.4umaps.eu/\">4UMaps</a>",
"id": "1016",
"url": "http://4umaps.eu/{z}/{x}/{y}.png",
"dataSource": "LayersCollection"
},
"type": "Feature"
}

View file

@ -0,0 +1,14 @@
{
"geometry": null,
"properties": {
"name": "Osmapa.pl",
"maxZoom": 20,
"attribution": "Map data: &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, under ODbL | Tiles: &copy; <a href=\"http://osmapa.pl/\" target=\"_blank\">Osmapa.pl</a>",
"id": "1017",
"threed": "true",
"language": "pl",
"url": "http://{s}.tile.openstreetmap.pl/osmapa.pl/{z}/{x}/{y}.png",
"dataSource": "LayersCollection"
},
"type": "Feature"
}

View file

@ -0,0 +1,14 @@
{
"geometry": null,
"properties": {
"name": "Спутник",
"maxZoom": 19,
"attribution": "Map data: &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, under ODbL | Tiles: &copy; <a href=\"http://maps.sputnik.ru/\" target=\"_blank\">Спутник</a>",
"id": "1021",
"threed": "true",
"language": "ru",
"url": "http://{s}.tiles.maps.sputnik.ru/{z}/{x}/{y}.png",
"dataSource": "LayersCollection"
},
"type": "Feature"
}

View file

@ -0,0 +1,19 @@
{
"geometry": null,
"properties": {
"name": "Космоснимки",
"maxZoom": 18,
"attribution": "Map data: &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, under ODbL | Tiles: &copy; <a href=\"http://osm.kosmosnimki.ru/\" target=\"_blank\">ScanEx</a>",
"id": "1023",
"subdomains": [
"a",
"b",
"c",
"d"
],
"language": "ru",
"url": "http://{s}.tile.osm.kosmosnimki.ru/kosmo/{z}/{x}/{y}.png",
"dataSource": "LayersCollection"
},
"type": "Feature"
}

View file

@ -0,0 +1,12 @@
{
"geometry": null,
"properties": {
"name": "Thunderforest Outdoors",
"maxZoom": 22,
"attribution": "Map data: &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, under ODbL | Tiles: &copy; <a href=\"http://www.thunderforest.com/\" target=\"_blank\">Andy Allan</a>",
"id": "1061",
"url": "http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png",
"dataSource": "LayersCollection"
},
"type": "Feature"
}

View file

@ -0,0 +1,12 @@
{
"geometry": null,
"properties": {
"name": "Hike & Bike",
"maxZoom": 19,
"attribution": "Map data: &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, under ODbL | Tiles: &copy; <a href=\"http://hikebikemap.de/\" target=\"_blank\">Colin Marquardt</a>",
"id": "1065",
"url": "http://toolserver.org/tiles/hikebike/{z}/{x}/{y}.png",
"dataSource": "LayersCollection"
},
"type": "Feature"
}

View file

@ -0,0 +1,13 @@
{
"geometry": null,
"properties": {
"name": "Refuges.info hiking",
"maxZoom": 18,
"attribution": "Map data: &copy; <a href=\"http://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors, under ODbL | Tiles: &copy; <a href=\"http://maps.refuges.info/\" target=\"_blank\">sly</a>",
"id": "1069",
"old": "true",
"url": "http://maps.refuges.info/hiking/{z}/{x}/{y}.png",
"dataSource": "LayersCollection"
},
"type": "Feature"
}

View file

@ -0,0 +1,52 @@
const fs = require('fs');
const path = require('path');
const fetch = require('node-fetch');
const outDir = __dirname;
var includeList = [
"1016", // 4UMaps
"1065", // Hike & Bike Map
"1061", // Thunderforest Outdoors
"1021", // kosmosnimki.ru
"1017", // sputnik.ru
"1023", // Osmapa.pl - Mapa OpenStreetMap Polska
"1010", // OpenStreetMap.se (Hydda.Full)
"1069" // MRI (maps.refuges.info)
];
function extract(constantsJs) {
eval(constantsJs);
for (let i = 0; i < includeList.length; i++) {
let id = includeList[i];
let layer = getLayerDataByID(id);
if (!layer) {
console.warn('Layer not found: ' + id);
continue;
}
//console.log(`${layer.id}, ${layer.name}, ${layer.address}`);
layer.url = layer.address;
delete layer.address;
let geoJson = {
geometry: null,
properties: layer,
type: "Feature"
};
geoJson.properties.dataSource = 'LayersCollection';
const outFileName = path.join(outDir, layer.id + '.geojson');
const data = JSON.stringify(geoJson, null, 2);
fs.writeFileSync(outFileName, data);
}
}
// https://github.com/Edward17/LayersCollection/blob/gh-pages/constants.js
fetch('http://edward17.github.io/LayersCollection/constants.js')
.then(res => res.text())
.then(text => extract(text))
.catch(err => console.error(err));

View file

@ -0,0 +1,45 @@
{
"geometry": {
"coordinates": [
[
[
5.45,
45
],
[
17,
45
],
[
17,
56.27
],
[
5.45,
56.27
],
[
5.45,
45
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"html": "<a href=\"https://www.eea.europa.eu/data-and-maps/data/eu-dem\" target=\"_blank\" rel=\"noopener\">Produced using Copernicus data and information funded by the European Union - EU-DEM layers</a>, download from <a href=\"http://opendem.info/index.html\" target=\"_blank\">OpenDEM</a>, Data sources <a href=\"https://www2.jpl.nasa.gov/srtm/\" target=\"_blank\">SRTM</a>, <a href=\"https://asterweb.jpl.nasa.gov/gdem.asp\" target=\"_blank\">ASTER GDEM</a>, Tiles from <a href=\"http://www.historic.place/\" target=\"_blank\" rel=\"noopener\">Historic.Place</a>"
},
"country_code": "DACH",
"id": "historic-place-contours",
"min_zoom": 12,
"max_zoom": 15,
"name": "Contours DACH",
"overlay": true,
"type": "tms",
"url": "http://tiles.historic.place/ele/de/{zoom}/{x}/{y}.png",
"valid-georeference": true
},
"type": "Feature"
}

View file

@ -0,0 +1,412 @@
{
"geometry": {
"coordinates": [
[
[
15.9751041,
54.3709213
],
[
16.311164,
54.5561775
],
[
17.1391878,
54.7845723
],
[
18.3448458,
54.9022727
],
[
19.6613689,
54.4737213
],
[
20.2815206,
54.4213456
],
[
21.4663914,
54.3406369
],
[
22.7759855,
54.3769755
],
[
22.8625989,
54.4233613
],
[
23.2956657,
54.2678633
],
[
23.5347186,
54.0955258
],
[
23.5208604,
53.9775182
],
[
23.7183389,
53.4629603
],
[
23.9296755,
53.1856735
],
[
23.9296755,
52.6887269
],
[
23.732197,
52.6067497
],
[
23.5658994,
52.5878101
],
[
23.2090523,
52.3302642
],
[
23.1951942,
52.2370089
],
[
23.5035377,
52.1860596
],
[
23.6906226,
52.0030113
],
[
23.5970802,
51.739903
],
[
23.6629063,
51.3888562
],
[
23.9366046,
50.9827781
],
[
24.1687284,
50.8604752
],
[
24.0197534,
50.8035823
],
[
24.1098313,
50.6610467
],
[
24.0578633,
50.4188439
],
[
23.6178674,
50.3083403
],
[
22.6824431,
49.5163532
],
[
22.7378756,
49.2094935
],
[
22.9041733,
49.0780441
],
[
22.8625989,
48.9940062
],
[
22.6096878,
49.0371785
],
[
22.0761495,
49.2004392
],
[
21.8474902,
49.3721872
],
[
21.3763135,
49.4488281
],
[
21.1026153,
49.3721872
],
[
20.9120659,
49.3022043
],
[
20.6452967,
49.3902311
],
[
20.1845136,
49.3315641
],
[
20.1186875,
49.2004392
],
[
19.9419962,
49.1302123
],
[
19.765305,
49.2117568
],
[
19.7479823,
49.3992506
],
[
19.6024718,
49.4150307
],
[
19.5089294,
49.5815389
],
[
19.4292451,
49.5905232
],
[
19.2317666,
49.4150307
],
[
18.9961783,
49.387976
],
[
18.9338167,
49.4916048
],
[
18.8368097,
49.4938552
],
[
18.8021643,
49.6623381
],
[
18.6427958,
49.7094091
],
[
18.521537,
49.8994693
],
[
18.0815412,
50.0109209
],
[
17.8875272,
49.9886512
],
[
17.7385522,
50.0687739
],
[
17.6068999,
50.1709584
],
[
17.7454813,
50.2153184
],
[
17.710836,
50.3017019
],
[
17.4163505,
50.2640668
],
[
16.9486384,
50.4453265
],
[
16.8932058,
50.4033889
],
[
17.0006064,
50.3105529
],
[
17.017929,
50.2241854
],
[
16.8135215,
50.186489
],
[
16.6402948,
50.0976742
],
[
16.4324227,
50.2862087
],
[
16.1968344,
50.4276731
],
[
16.4220291,
50.5885165
],
[
16.3388803,
50.6632429
],
[
16.2280152,
50.6368824
],
[
16.0547884,
50.6127057
],
[
15.5732181,
50.7641544
],
[
15.2683391,
50.8976368
],
[
15.2440873,
50.980597
],
[
15.0292862,
51.0133036
],
[
15.0015699,
50.8582883
],
[
14.8110205,
50.8735944
],
[
14.956531,
51.0721176
],
[
15.0188926,
51.2914636
],
[
14.9392083,
51.4601459
],
[
14.7209426,
51.5571799
],
[
14.7521234,
51.6260562
],
[
14.5996839,
51.8427626
],
[
14.70362,
52.0733396
],
[
14.5581095,
52.2497371
],
[
14.5165351,
52.425436
],
[
14.6031485,
52.5878101
],
[
14.1146491,
52.8208272
],
[
14.152759,
52.9733951
],
[
14.3502374,
53.0734212
],
[
14.4229927,
53.2665624
],
[
14.1977979,
53.8734759
],
[
14.2220497,
53.9958517
],
[
15.9751041,
54.3709213
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"text": "Tiles © OSM Mapa Szlaków",
"url": "http://mapaszlakow.eu/"
},
"country_code": "PL",
"id": "mapaszlakow-bike",
"max_zoom": 16,
"min_zoom": 6,
"name": "Bicycle (Mapa Szlaków)",
"overlay": true,
"type": "tms",
"url": "http://mapaszlakow.eu/b{zoom}/{zoom}/{x}/{y}.png"
},
"type": "Feature"
}

View file

@ -0,0 +1,412 @@
{
"geometry": {
"coordinates": [
[
[
15.9751041,
54.3709213
],
[
16.311164,
54.5561775
],
[
17.1391878,
54.7845723
],
[
18.3448458,
54.9022727
],
[
19.6613689,
54.4737213
],
[
20.2815206,
54.4213456
],
[
21.4663914,
54.3406369
],
[
22.7759855,
54.3769755
],
[
22.8625989,
54.4233613
],
[
23.2956657,
54.2678633
],
[
23.5347186,
54.0955258
],
[
23.5208604,
53.9775182
],
[
23.7183389,
53.4629603
],
[
23.9296755,
53.1856735
],
[
23.9296755,
52.6887269
],
[
23.732197,
52.6067497
],
[
23.5658994,
52.5878101
],
[
23.2090523,
52.3302642
],
[
23.1951942,
52.2370089
],
[
23.5035377,
52.1860596
],
[
23.6906226,
52.0030113
],
[
23.5970802,
51.739903
],
[
23.6629063,
51.3888562
],
[
23.9366046,
50.9827781
],
[
24.1687284,
50.8604752
],
[
24.0197534,
50.8035823
],
[
24.1098313,
50.6610467
],
[
24.0578633,
50.4188439
],
[
23.6178674,
50.3083403
],
[
22.6824431,
49.5163532
],
[
22.7378756,
49.2094935
],
[
22.9041733,
49.0780441
],
[
22.8625989,
48.9940062
],
[
22.6096878,
49.0371785
],
[
22.0761495,
49.2004392
],
[
21.8474902,
49.3721872
],
[
21.3763135,
49.4488281
],
[
21.1026153,
49.3721872
],
[
20.9120659,
49.3022043
],
[
20.6452967,
49.3902311
],
[
20.1845136,
49.3315641
],
[
20.1186875,
49.2004392
],
[
19.9419962,
49.1302123
],
[
19.765305,
49.2117568
],
[
19.7479823,
49.3992506
],
[
19.6024718,
49.4150307
],
[
19.5089294,
49.5815389
],
[
19.4292451,
49.5905232
],
[
19.2317666,
49.4150307
],
[
18.9961783,
49.387976
],
[
18.9338167,
49.4916048
],
[
18.8368097,
49.4938552
],
[
18.8021643,
49.6623381
],
[
18.6427958,
49.7094091
],
[
18.521537,
49.8994693
],
[
18.0815412,
50.0109209
],
[
17.8875272,
49.9886512
],
[
17.7385522,
50.0687739
],
[
17.6068999,
50.1709584
],
[
17.7454813,
50.2153184
],
[
17.710836,
50.3017019
],
[
17.4163505,
50.2640668
],
[
16.9486384,
50.4453265
],
[
16.8932058,
50.4033889
],
[
17.0006064,
50.3105529
],
[
17.017929,
50.2241854
],
[
16.8135215,
50.186489
],
[
16.6402948,
50.0976742
],
[
16.4324227,
50.2862087
],
[
16.1968344,
50.4276731
],
[
16.4220291,
50.5885165
],
[
16.3388803,
50.6632429
],
[
16.2280152,
50.6368824
],
[
16.0547884,
50.6127057
],
[
15.5732181,
50.7641544
],
[
15.2683391,
50.8976368
],
[
15.2440873,
50.980597
],
[
15.0292862,
51.0133036
],
[
15.0015699,
50.8582883
],
[
14.8110205,
50.8735944
],
[
14.956531,
51.0721176
],
[
15.0188926,
51.2914636
],
[
14.9392083,
51.4601459
],
[
14.7209426,
51.5571799
],
[
14.7521234,
51.6260562
],
[
14.5996839,
51.8427626
],
[
14.70362,
52.0733396
],
[
14.5581095,
52.2497371
],
[
14.5165351,
52.425436
],
[
14.6031485,
52.5878101
],
[
14.1146491,
52.8208272
],
[
14.152759,
52.9733951
],
[
14.3502374,
53.0734212
],
[
14.4229927,
53.2665624
],
[
14.1977979,
53.8734759
],
[
14.2220497,
53.9958517
],
[
15.9751041,
54.3709213
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"text": "Tiles © OSM Mapa Szlaków",
"url": "http://mapaszlakow.eu/"
},
"country_code": "PL",
"id": "mapaszlakow-cycle",
"max_zoom": 16,
"min_zoom": 6,
"name": "Cycleways (Mapa Szlaków)",
"overlay": true,
"type": "tms",
"url": "http://mapaszlakow.eu/c{zoom}/{zoom}/{x}/{y}.png"
},
"type": "Feature"
}

View file

@ -0,0 +1,412 @@
{
"geometry": {
"coordinates": [
[
[
15.9751041,
54.3709213
],
[
16.311164,
54.5561775
],
[
17.1391878,
54.7845723
],
[
18.3448458,
54.9022727
],
[
19.6613689,
54.4737213
],
[
20.2815206,
54.4213456
],
[
21.4663914,
54.3406369
],
[
22.7759855,
54.3769755
],
[
22.8625989,
54.4233613
],
[
23.2956657,
54.2678633
],
[
23.5347186,
54.0955258
],
[
23.5208604,
53.9775182
],
[
23.7183389,
53.4629603
],
[
23.9296755,
53.1856735
],
[
23.9296755,
52.6887269
],
[
23.732197,
52.6067497
],
[
23.5658994,
52.5878101
],
[
23.2090523,
52.3302642
],
[
23.1951942,
52.2370089
],
[
23.5035377,
52.1860596
],
[
23.6906226,
52.0030113
],
[
23.5970802,
51.739903
],
[
23.6629063,
51.3888562
],
[
23.9366046,
50.9827781
],
[
24.1687284,
50.8604752
],
[
24.0197534,
50.8035823
],
[
24.1098313,
50.6610467
],
[
24.0578633,
50.4188439
],
[
23.6178674,
50.3083403
],
[
22.6824431,
49.5163532
],
[
22.7378756,
49.2094935
],
[
22.9041733,
49.0780441
],
[
22.8625989,
48.9940062
],
[
22.6096878,
49.0371785
],
[
22.0761495,
49.2004392
],
[
21.8474902,
49.3721872
],
[
21.3763135,
49.4488281
],
[
21.1026153,
49.3721872
],
[
20.9120659,
49.3022043
],
[
20.6452967,
49.3902311
],
[
20.1845136,
49.3315641
],
[
20.1186875,
49.2004392
],
[
19.9419962,
49.1302123
],
[
19.765305,
49.2117568
],
[
19.7479823,
49.3992506
],
[
19.6024718,
49.4150307
],
[
19.5089294,
49.5815389
],
[
19.4292451,
49.5905232
],
[
19.2317666,
49.4150307
],
[
18.9961783,
49.387976
],
[
18.9338167,
49.4916048
],
[
18.8368097,
49.4938552
],
[
18.8021643,
49.6623381
],
[
18.6427958,
49.7094091
],
[
18.521537,
49.8994693
],
[
18.0815412,
50.0109209
],
[
17.8875272,
49.9886512
],
[
17.7385522,
50.0687739
],
[
17.6068999,
50.1709584
],
[
17.7454813,
50.2153184
],
[
17.710836,
50.3017019
],
[
17.4163505,
50.2640668
],
[
16.9486384,
50.4453265
],
[
16.8932058,
50.4033889
],
[
17.0006064,
50.3105529
],
[
17.017929,
50.2241854
],
[
16.8135215,
50.186489
],
[
16.6402948,
50.0976742
],
[
16.4324227,
50.2862087
],
[
16.1968344,
50.4276731
],
[
16.4220291,
50.5885165
],
[
16.3388803,
50.6632429
],
[
16.2280152,
50.6368824
],
[
16.0547884,
50.6127057
],
[
15.5732181,
50.7641544
],
[
15.2683391,
50.8976368
],
[
15.2440873,
50.980597
],
[
15.0292862,
51.0133036
],
[
15.0015699,
50.8582883
],
[
14.8110205,
50.8735944
],
[
14.956531,
51.0721176
],
[
15.0188926,
51.2914636
],
[
14.9392083,
51.4601459
],
[
14.7209426,
51.5571799
],
[
14.7521234,
51.6260562
],
[
14.5996839,
51.8427626
],
[
14.70362,
52.0733396
],
[
14.5581095,
52.2497371
],
[
14.5165351,
52.425436
],
[
14.6031485,
52.5878101
],
[
14.1146491,
52.8208272
],
[
14.152759,
52.9733951
],
[
14.3502374,
53.0734212
],
[
14.4229927,
53.2665624
],
[
14.1977979,
53.8734759
],
[
14.2220497,
53.9958517
],
[
15.9751041,
54.3709213
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"text": "Tiles © OSM Mapa Szlaków",
"url": "http://mapaszlakow.eu/"
},
"country_code": "PL",
"id": "mapaszlakow-hike",
"max_zoom": 16,
"min_zoom": 6,
"name": "Hiking (Mapa Szlaków)",
"overlay": true,
"type": "tms",
"url": "http://mapaszlakow.eu/h{zoom}/{zoom}/{x}/{y}.png"
},
"type": "Feature"
}

View file

@ -0,0 +1,412 @@
{
"geometry": {
"coordinates": [
[
[
15.9751041,
54.3709213
],
[
16.311164,
54.5561775
],
[
17.1391878,
54.7845723
],
[
18.3448458,
54.9022727
],
[
19.6613689,
54.4737213
],
[
20.2815206,
54.4213456
],
[
21.4663914,
54.3406369
],
[
22.7759855,
54.3769755
],
[
22.8625989,
54.4233613
],
[
23.2956657,
54.2678633
],
[
23.5347186,
54.0955258
],
[
23.5208604,
53.9775182
],
[
23.7183389,
53.4629603
],
[
23.9296755,
53.1856735
],
[
23.9296755,
52.6887269
],
[
23.732197,
52.6067497
],
[
23.5658994,
52.5878101
],
[
23.2090523,
52.3302642
],
[
23.1951942,
52.2370089
],
[
23.5035377,
52.1860596
],
[
23.6906226,
52.0030113
],
[
23.5970802,
51.739903
],
[
23.6629063,
51.3888562
],
[
23.9366046,
50.9827781
],
[
24.1687284,
50.8604752
],
[
24.0197534,
50.8035823
],
[
24.1098313,
50.6610467
],
[
24.0578633,
50.4188439
],
[
23.6178674,
50.3083403
],
[
22.6824431,
49.5163532
],
[
22.7378756,
49.2094935
],
[
22.9041733,
49.0780441
],
[
22.8625989,
48.9940062
],
[
22.6096878,
49.0371785
],
[
22.0761495,
49.2004392
],
[
21.8474902,
49.3721872
],
[
21.3763135,
49.4488281
],
[
21.1026153,
49.3721872
],
[
20.9120659,
49.3022043
],
[
20.6452967,
49.3902311
],
[
20.1845136,
49.3315641
],
[
20.1186875,
49.2004392
],
[
19.9419962,
49.1302123
],
[
19.765305,
49.2117568
],
[
19.7479823,
49.3992506
],
[
19.6024718,
49.4150307
],
[
19.5089294,
49.5815389
],
[
19.4292451,
49.5905232
],
[
19.2317666,
49.4150307
],
[
18.9961783,
49.387976
],
[
18.9338167,
49.4916048
],
[
18.8368097,
49.4938552
],
[
18.8021643,
49.6623381
],
[
18.6427958,
49.7094091
],
[
18.521537,
49.8994693
],
[
18.0815412,
50.0109209
],
[
17.8875272,
49.9886512
],
[
17.7385522,
50.0687739
],
[
17.6068999,
50.1709584
],
[
17.7454813,
50.2153184
],
[
17.710836,
50.3017019
],
[
17.4163505,
50.2640668
],
[
16.9486384,
50.4453265
],
[
16.8932058,
50.4033889
],
[
17.0006064,
50.3105529
],
[
17.017929,
50.2241854
],
[
16.8135215,
50.186489
],
[
16.6402948,
50.0976742
],
[
16.4324227,
50.2862087
],
[
16.1968344,
50.4276731
],
[
16.4220291,
50.5885165
],
[
16.3388803,
50.6632429
],
[
16.2280152,
50.6368824
],
[
16.0547884,
50.6127057
],
[
15.5732181,
50.7641544
],
[
15.2683391,
50.8976368
],
[
15.2440873,
50.980597
],
[
15.0292862,
51.0133036
],
[
15.0015699,
50.8582883
],
[
14.8110205,
50.8735944
],
[
14.956531,
51.0721176
],
[
15.0188926,
51.2914636
],
[
14.9392083,
51.4601459
],
[
14.7209426,
51.5571799
],
[
14.7521234,
51.6260562
],
[
14.5996839,
51.8427626
],
[
14.70362,
52.0733396
],
[
14.5581095,
52.2497371
],
[
14.5165351,
52.425436
],
[
14.6031485,
52.5878101
],
[
14.1146491,
52.8208272
],
[
14.152759,
52.9733951
],
[
14.3502374,
53.0734212
],
[
14.4229927,
53.2665624
],
[
14.1977979,
53.8734759
],
[
14.2220497,
53.9958517
],
[
15.9751041,
54.3709213
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"text": "Tiles © OSM Mapa Szlaków",
"url": "http://mapaszlakow.eu/"
},
"country_code": "PL",
"id": "mapaszlakow-incline",
"max_zoom": 16,
"min_zoom": 14,
"name": "Incline (Mapa Szlaków)",
"overlay": true,
"type": "tms",
"url": "http://mapaszlakow.eu/incline{zoom}/{zoom}/{x}/{y}.png"
},
"type": "Feature"
}

View file

@ -0,0 +1,412 @@
{
"geometry": {
"coordinates": [
[
[
15.9751041,
54.3709213
],
[
16.311164,
54.5561775
],
[
17.1391878,
54.7845723
],
[
18.3448458,
54.9022727
],
[
19.6613689,
54.4737213
],
[
20.2815206,
54.4213456
],
[
21.4663914,
54.3406369
],
[
22.7759855,
54.3769755
],
[
22.8625989,
54.4233613
],
[
23.2956657,
54.2678633
],
[
23.5347186,
54.0955258
],
[
23.5208604,
53.9775182
],
[
23.7183389,
53.4629603
],
[
23.9296755,
53.1856735
],
[
23.9296755,
52.6887269
],
[
23.732197,
52.6067497
],
[
23.5658994,
52.5878101
],
[
23.2090523,
52.3302642
],
[
23.1951942,
52.2370089
],
[
23.5035377,
52.1860596
],
[
23.6906226,
52.0030113
],
[
23.5970802,
51.739903
],
[
23.6629063,
51.3888562
],
[
23.9366046,
50.9827781
],
[
24.1687284,
50.8604752
],
[
24.0197534,
50.8035823
],
[
24.1098313,
50.6610467
],
[
24.0578633,
50.4188439
],
[
23.6178674,
50.3083403
],
[
22.6824431,
49.5163532
],
[
22.7378756,
49.2094935
],
[
22.9041733,
49.0780441
],
[
22.8625989,
48.9940062
],
[
22.6096878,
49.0371785
],
[
22.0761495,
49.2004392
],
[
21.8474902,
49.3721872
],
[
21.3763135,
49.4488281
],
[
21.1026153,
49.3721872
],
[
20.9120659,
49.3022043
],
[
20.6452967,
49.3902311
],
[
20.1845136,
49.3315641
],
[
20.1186875,
49.2004392
],
[
19.9419962,
49.1302123
],
[
19.765305,
49.2117568
],
[
19.7479823,
49.3992506
],
[
19.6024718,
49.4150307
],
[
19.5089294,
49.5815389
],
[
19.4292451,
49.5905232
],
[
19.2317666,
49.4150307
],
[
18.9961783,
49.387976
],
[
18.9338167,
49.4916048
],
[
18.8368097,
49.4938552
],
[
18.8021643,
49.6623381
],
[
18.6427958,
49.7094091
],
[
18.521537,
49.8994693
],
[
18.0815412,
50.0109209
],
[
17.8875272,
49.9886512
],
[
17.7385522,
50.0687739
],
[
17.6068999,
50.1709584
],
[
17.7454813,
50.2153184
],
[
17.710836,
50.3017019
],
[
17.4163505,
50.2640668
],
[
16.9486384,
50.4453265
],
[
16.8932058,
50.4033889
],
[
17.0006064,
50.3105529
],
[
17.017929,
50.2241854
],
[
16.8135215,
50.186489
],
[
16.6402948,
50.0976742
],
[
16.4324227,
50.2862087
],
[
16.1968344,
50.4276731
],
[
16.4220291,
50.5885165
],
[
16.3388803,
50.6632429
],
[
16.2280152,
50.6368824
],
[
16.0547884,
50.6127057
],
[
15.5732181,
50.7641544
],
[
15.2683391,
50.8976368
],
[
15.2440873,
50.980597
],
[
15.0292862,
51.0133036
],
[
15.0015699,
50.8582883
],
[
14.8110205,
50.8735944
],
[
14.956531,
51.0721176
],
[
15.0188926,
51.2914636
],
[
14.9392083,
51.4601459
],
[
14.7209426,
51.5571799
],
[
14.7521234,
51.6260562
],
[
14.5996839,
51.8427626
],
[
14.70362,
52.0733396
],
[
14.5581095,
52.2497371
],
[
14.5165351,
52.425436
],
[
14.6031485,
52.5878101
],
[
14.1146491,
52.8208272
],
[
14.152759,
52.9733951
],
[
14.3502374,
53.0734212
],
[
14.4229927,
53.2665624
],
[
14.1977979,
53.8734759
],
[
14.2220497,
53.9958517
],
[
15.9751041,
54.3709213
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"text": "Tiles © OSM Mapa Szlaków",
"url": "http://mapaszlakow.eu/"
},
"country_code": "PL",
"id": "mapaszlakow-mtb",
"max_zoom": 16,
"min_zoom": 13,
"name": "MTB:scale (Mapa Szlaków)",
"overlay": true,
"type": "tms",
"url": "http://mapaszlakow.eu/mtb{zoom}/{zoom}/{x}/{y}.png"
},
"type": "Feature"
}

View file

@ -0,0 +1,17 @@
{
"geometry": null,
"properties": {
"attribution": {
"text": "Mapillary, CC BY",
"url": "https://www.mapillary.com"
},
"id": "mapillary-coverage-raster",
"max_zoom": 17,
"name": "Mapillary Coverage",
"overlay": true,
"type": "tms",
"url": "https://d6a1v2w10ny40.cloudfront.net/v0.1/{z}/{x}/{y}.png"
},
"type": "Feature"
}

View file

@ -0,0 +1,15 @@
{
"geometry": null,
"properties": {
"attribution": {
"html": "<a href=\"https://giscience.uni-hd.de\" target=\"_blank\" rel=\"noopener\">GIScience Research Group</a> @ University of Heidelberg (<a href=\"https://openrouteservice.org/\" target=\"_blank\" rel=\"noopener\">info</a>)"
},
"id": "openmapsurfer",
"max_zoom": 19,
"name": "OpenMapSurfer",
"type": "tms",
"url": "https://api.openrouteservice.org/mapsurfer/{zoom}/{x}/{y}.png?api_key={keys_openrouteservice}"
},
"type": "Feature"
}

View file

@ -0,0 +1,42 @@
{
"geometry": {
"coordinates": [
[
[
4.219,
46.317
],
[
16.875,
46.317
],
[
16.875,
55.776
],
[
4.219,
55.776
],
[
4.219,
46.317
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"html": "© <a href=\"http://www.bkg.bund.de\" target=\"_blank\" rel=\"noopener\">Bundesamt für Kartographie und Geodäsie</a> 2018, <a href=\"http://sg.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf\" target=\"_blank\" rel=\"noopener\">Datenquellen</a>"
},
"id": "topplus-open",
"name": "TopPlusOpen",
"type": "wms",
"url": "http://sgx.geodatenzentrum.de/wms_topplus_web_open",
"layers": "web",
"format": "image/png"
},
"type": "Feature"
}

View file

@ -0,0 +1,210 @@
{
"geometry": {
"coordinates": [
[
[
19.83682,
49.25529
],
[
19.80075,
49.42385
],
[
19.60437,
49.48058
],
[
19.49179,
49.63961
],
[
19.21831,
49.52604
],
[
19.16778,
49.42521
],
[
19.00308,
49.42236
],
[
18.97611,
49.5308
],
[
18.54685,
49.51425
],
[
18.31432,
49.33818
],
[
18.15913,
49.2961
],
[
18.05564,
49.11134
],
[
17.56396,
48.84938
],
[
17.17929,
48.88816
],
[
17.058,
48.81105
],
[
16.90426,
48.61947
],
[
16.79685,
48.38561
],
[
17.06762,
48.01116
],
[
17.32787,
47.97749
],
[
17.51699,
47.82535
],
[
17.74776,
47.73093
],
[
18.29515,
47.72075
],
[
18.67959,
47.75541
],
[
18.89755,
47.81203
],
[
18.79463,
47.88245
],
[
18.84318,
48.04046
],
[
19.46212,
48.05333
],
[
19.62064,
48.22938
],
[
19.89585,
48.09387
],
[
20.33766,
48.2643
],
[
20.55395,
48.52358
],
[
20.82335,
48.55714
],
[
21.10271,
48.47096
],
[
21.45863,
48.55513
],
[
21.74536,
48.31435
],
[
22.15293,
48.37179
],
[
22.61255,
49.08914
],
[
22.09997,
49.23814
],
[
21.9686,
49.36363
],
[
21.6244,
49.46989
],
[
21.06873,
49.46402
],
[
20.94336,
49.31088
],
[
20.73052,
49.44006
],
[
20.22804,
49.41714
],
[
20.05234,
49.23052
],
[
19.83682,
49.25529
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"logo-image": "https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png",
"required": true,
"text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."
},
"country_code": "SK",
"icon": "https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png",
"id": "Freemap.sk-Car",
"max_zoom": 16,
"min_zoom": 8,
"name": "Freemap.sk Car",
"type": "tms",
"url": "https://{switch:a,b,c,d}.freemap.sk/A/{zoom}/{x}/{y}.jpeg",
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,210 @@
{
"geometry": {
"coordinates": [
[
[
19.83682,
49.25529
],
[
19.80075,
49.42385
],
[
19.60437,
49.48058
],
[
19.49179,
49.63961
],
[
19.21831,
49.52604
],
[
19.16778,
49.42521
],
[
19.00308,
49.42236
],
[
18.97611,
49.5308
],
[
18.54685,
49.51425
],
[
18.31432,
49.33818
],
[
18.15913,
49.2961
],
[
18.05564,
49.11134
],
[
17.56396,
48.84938
],
[
17.17929,
48.88816
],
[
17.058,
48.81105
],
[
16.90426,
48.61947
],
[
16.79685,
48.38561
],
[
17.06762,
48.01116
],
[
17.32787,
47.97749
],
[
17.51699,
47.82535
],
[
17.74776,
47.73093
],
[
18.29515,
47.72075
],
[
18.67959,
47.75541
],
[
18.89755,
47.81203
],
[
18.79463,
47.88245
],
[
18.84318,
48.04046
],
[
19.46212,
48.05333
],
[
19.62064,
48.22938
],
[
19.89585,
48.09387
],
[
20.33766,
48.2643
],
[
20.55395,
48.52358
],
[
20.82335,
48.55714
],
[
21.10271,
48.47096
],
[
21.45863,
48.55513
],
[
21.74536,
48.31435
],
[
22.15293,
48.37179
],
[
22.61255,
49.08914
],
[
22.09997,
49.23814
],
[
21.9686,
49.36363
],
[
21.6244,
49.46989
],
[
21.06873,
49.46402
],
[
20.94336,
49.31088
],
[
20.73052,
49.44006
],
[
20.22804,
49.41714
],
[
20.05234,
49.23052
],
[
19.83682,
49.25529
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"logo-image": "https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png",
"required": true,
"text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."
},
"country_code": "SK",
"icon": "https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png",
"id": "Freemap.sk-Cyclo",
"max_zoom": 16,
"min_zoom": 8,
"name": "Freemap.sk Cyclo",
"type": "tms",
"url": "https://{switch:a,b,c,d}.freemap.sk/C/{zoom}/{x}/{y}.jpeg",
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,210 @@
{
"geometry": {
"coordinates": [
[
[
19.83682,
49.25529
],
[
19.80075,
49.42385
],
[
19.60437,
49.48058
],
[
19.49179,
49.63961
],
[
19.21831,
49.52604
],
[
19.16778,
49.42521
],
[
19.00308,
49.42236
],
[
18.97611,
49.5308
],
[
18.54685,
49.51425
],
[
18.31432,
49.33818
],
[
18.15913,
49.2961
],
[
18.05564,
49.11134
],
[
17.56396,
48.84938
],
[
17.17929,
48.88816
],
[
17.058,
48.81105
],
[
16.90426,
48.61947
],
[
16.79685,
48.38561
],
[
17.06762,
48.01116
],
[
17.32787,
47.97749
],
[
17.51699,
47.82535
],
[
17.74776,
47.73093
],
[
18.29515,
47.72075
],
[
18.67959,
47.75541
],
[
18.89755,
47.81203
],
[
18.79463,
47.88245
],
[
18.84318,
48.04046
],
[
19.46212,
48.05333
],
[
19.62064,
48.22938
],
[
19.89585,
48.09387
],
[
20.33766,
48.2643
],
[
20.55395,
48.52358
],
[
20.82335,
48.55714
],
[
21.10271,
48.47096
],
[
21.45863,
48.55513
],
[
21.74536,
48.31435
],
[
22.15293,
48.37179
],
[
22.61255,
49.08914
],
[
22.09997,
49.23814
],
[
21.9686,
49.36363
],
[
21.6244,
49.46989
],
[
21.06873,
49.46402
],
[
20.94336,
49.31088
],
[
20.73052,
49.44006
],
[
20.22804,
49.41714
],
[
20.05234,
49.23052
],
[
19.83682,
49.25529
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"logo-image": "https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png",
"required": true,
"text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."
},
"country_code": "SK",
"icon": "https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png",
"id": "Freemap.sk-Hiking",
"max_zoom": 16,
"min_zoom": 8,
"name": "Freemap.sk Hiking",
"type": "tms",
"url": "https://{switch:a,b,c,d}.freemap.sk/T/{zoom}/{x}/{y}.jpeg",
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,19 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"text": "© OpenStreetMap contributors, tiles courtesy of Humanitarian OpenStreetMap Team",
"url": "https://www.hotosm.org/"
},
"icon": "https://wiki.openstreetmap.org/w/images/thumb/c/c9/Hot_logo.svg/300px-Hot_logo.svg.png",
"id": "HDM_HOT",
"max_zoom": 20,
"name": "HDM (Humanitarian OpenStreetMap Team)",
"type": "tms",
"url": "https://{switch:a,b,c}.tile.openstreetmap.fr/hot/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,187 @@
{
"geometry": {
"coordinates": [
[
[
34.64563,
32.92073
],
[
34.98374,
33.13352
],
[
35.15662,
33.09994
],
[
35.31781,
33.11463
],
[
35.36541,
33.06285
],
[
35.46229,
33.09994
],
[
35.51741,
33.12652
],
[
35.5266,
33.21531
],
[
35.53893,
33.25442
],
[
35.56446,
33.2969
],
[
35.61264,
33.27918
],
[
35.67429,
33.30627
],
[
35.70785,
33.34269
],
[
35.75363,
33.35091
],
[
35.81509,
33.3392
],
[
35.91531,
32.9406
],
[
35.80834,
32.772
],
[
35.77835,
32.72446
],
[
35.59491,
32.62828
],
[
35.5729,
32.36541
],
[
35.59461,
32.21856
],
[
35.55452,
32.02901
],
[
35.57225,
31.75415
],
[
35.48771,
31.41951
],
[
35.4209,
31.25116
],
[
35.47936,
31.1783
],
[
35.42771,
30.95172
],
[
35.3321,
30.77107
],
[
35.20709,
30.53307
],
[
35.17202,
30.11204
],
[
35.07514,
29.83713
],
[
35.02336,
29.64569
],
[
34.93992,
29.39946
],
[
34.89517,
29.37711
],
[
34.84785,
29.59084
],
[
34.69667,
30.10714
],
[
34.52423,
30.40912
],
[
34.48879,
30.64515
],
[
34.07929,
31.52265
],
[
34.64563,
32.92073
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"text": "Tiles © IsraelHiking, CC BY-SA-NC 3.0. Data by OpenStreetMap under ODbL.",
"url": "https://israelhiking.osm.org.il/"
},
"country_code": "IL",
"description": "Israel Hiking map",
"icon": "https://israelhiking.osm.org.il/content/favicons/favicon.ico",
"id": "Israel_Hiking",
"max_zoom": 16,
"min_zoom": 7,
"name": "Israel Hiking",
"type": "tms",
"url": "https://israelhiking.osm.org.il/Tiles/{zoom}/{x}/{y}.png",
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,187 @@
{
"geometry": {
"coordinates": [
[
[
34.64563,
32.92073
],
[
34.98374,
33.13352
],
[
35.15662,
33.09994
],
[
35.31781,
33.11463
],
[
35.36541,
33.06285
],
[
35.46229,
33.09994
],
[
35.51741,
33.12652
],
[
35.5266,
33.21531
],
[
35.53893,
33.25442
],
[
35.56446,
33.2969
],
[
35.61264,
33.27918
],
[
35.67429,
33.30627
],
[
35.70785,
33.34269
],
[
35.75363,
33.35091
],
[
35.81509,
33.3392
],
[
35.91531,
32.9406
],
[
35.80834,
32.772
],
[
35.77835,
32.72446
],
[
35.59491,
32.62828
],
[
35.5729,
32.36541
],
[
35.59461,
32.21856
],
[
35.55452,
32.02901
],
[
35.57225,
31.75415
],
[
35.48771,
31.41951
],
[
35.4209,
31.25116
],
[
35.47936,
31.1783
],
[
35.42771,
30.95172
],
[
35.3321,
30.77107
],
[
35.20709,
30.53307
],
[
35.17202,
30.11204
],
[
35.07514,
29.83713
],
[
35.02336,
29.64569
],
[
34.93992,
29.39946
],
[
34.89517,
29.37711
],
[
34.84785,
29.59084
],
[
34.69667,
30.10714
],
[
34.52423,
30.40912
],
[
34.48879,
30.64515
],
[
34.07929,
31.52265
],
[
34.64563,
32.92073
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"text": "Tiles © IsraelHiking, CC BY-SA-NC 3.0. Data by OpenStreetMap under ODbL.",
"url": "https://israelhiking.osm.org.il/"
},
"country_code": "IL",
"description": "Israel MTB map",
"icon": "https://israelhiking.osm.org.il/content/favicons/favicon.ico",
"id": "Israel_MTB",
"max_zoom": 16,
"min_zoom": 7,
"name": "Israel MTB",
"type": "tms",
"url": "https://israelhiking.osm.org.il/MTBTiles/{zoom}/{x}/{y}.png",
"dataSource": "JOSM"
},
"type": "Feature"
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,20 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0",
"url": "https://cycling.waymarkedtrails.org/en/help/legal"
},
"icon": "https://static.waymarkedtrails.org/img/map_cycling.png",
"id": "Waymarked_Trails-Cycling",
"max_zoom": 17,
"name": "Waymarked Trails: Cycling",
"overlay": true,
"type": "tms",
"url": "https://tile.waymarkedtrails.org/cycling/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,20 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0",
"url": "https://hiking.waymarkedtrails.org/en/help/legal"
},
"icon": "https://static.waymarkedtrails.org/img/map_hiking.png",
"id": "Waymarked_Trails-Hiking",
"max_zoom": 17,
"name": "Waymarked Trails: Hiking",
"overlay": true,
"type": "tms",
"url": "https://tile.waymarkedtrails.org/hiking/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,20 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"text": "© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0",
"url": "https://mtb.waymarkedtrails.org/en/help/legal"
},
"icon": "https://static.waymarkedtrails.org/img/map_mtb.png",
"id": "Waymarked_Trails-MTB",
"max_zoom": 17,
"name": "Waymarked Trails: MTB",
"overlay": true,
"type": "tms",
"url": "https://tile.waymarkedtrails.org/mtb/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

62
layers/josm/extract.js Normal file
View file

@ -0,0 +1,62 @@
const fs = require('fs');
const path = require('path');
const fetch = require('node-fetch');
const outDir = __dirname;
const includeList = [
"osmbe",
"osmbe-fr",
"osmbe-nl",
"osmfr-basque",
"osmfr-breton",
"osmfr-occitan",
"OpenStreetMap-turistautak",
"hu-hillshade",
"Israel_Hiking",
"Israel_MTB",
"mtbmap-no",
"Freemap.sk-Car",
"Freemap.sk-Hiking",
"Freemap.sk-Cyclo",
"opencylemap",
"standard",
"HDM_HOT",
"osmfr",
"osm-mapnik-german_style",
"OpenTopoMap",
"osm-cambodia_laos_thailand_vietnam-bilingual",
"Waymarked_Trails-Hiking",
"Waymarked_Trails-Cycling",
"Waymarked_Trails-MTB",
"wikimedia-map"
];
function extract(layersJosm) {
for (let i = 0; i < layersJosm.features.length; i++) {
let layer = layersJosm.features[i];
let props = layer.properties;
let id = props.id;
if (includeList.includes(id)) {
//console.log(`${id}, ${props.name}, ${props.url}`);
props.dataSource = 'JOSM';
const outFileName = path.join(outDir, id + '.geojson');
const data = JSON.stringify(layer, null, 2);
fs.writeFileSync(outFileName, data);
includeList.splice(includeList.indexOf(id), 1);
}
}
if (includeList.length > 0) {
console.warn('Layers not found: ', includeList);
}
}
fetch('https://josm.openstreetmap.de/maps?format=geojson')
.then(res => res.json())
.then(json => extract(json))
.catch(err => console.error(err));

View file

@ -0,0 +1,46 @@
{
"geometry": {
"coordinates": [
[
[
15,
45
],
[
24,
45
],
[
24,
49
],
[
15,
49
],
[
15,
45
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"text": "SRTM"
},
"country_code": "HU",
"id": "hu-hillshade",
"max_zoom": 18,
"min_zoom": 0,
"name": "Hillshade Hungary",
"overlay": true,
"type": "tms",
"url": "https://{switch:a,b,c}.map.turistautak.hu/tiles/shading/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,134 @@
{
"geometry": {
"coordinates": [
[
[
31.904253,
70.4368136
],
[
28.4765186,
71.3289643
],
[
23.6865015,
71.2514263
],
[
16.8090601,
70.0730823
],
[
11.1620655,
67.5253903
],
[
9.975542,
64.811576
],
[
4.2187061,
62.1449966
],
[
4.3725367,
59.1871966
],
[
6.1743055,
57.8915032
],
[
7.932118,
57.7393554
],
[
10.777577,
58.8649103
],
[
11.7224012,
58.762509
],
[
12.722157,
60.1141506
],
[
13.0517469,
61.3493518
],
[
12.5243921,
63.6169922
],
[
14.2382593,
63.9856094
],
[
15.1171656,
65.9016624
],
[
18.6987085,
68.3749083
],
[
20.0610132,
68.2612583
],
[
21.0058375,
68.7841518
],
[
25.2465601,
68.3506025
],
[
26.9384546,
69.8472011
],
[
28.7621851,
69.6112133
],
[
28.5864039,
68.8556004
],
[
31.069314,
69.5191547
],
[
31.904253,
70.4368136
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"text": "© MTBmap.no",
"url": "https://www.mtbmap.no/"
},
"country_code": "NO",
"description": "Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)",
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAyVBMVEUAAAAAAAAAAAAAAABHcEwAAAAAAAAAAAAAAAAAAAAAAAAGBgYAAAAAAAD///8DAwMKCgrX19d3d3fe3t4fHx/4+PikpKQGBgbb29vIyMizs7MlJSXExMQQEBA2NjYNDQ2pqam6urr+/v4UFBS8vLzg4OCMjIxvb297e3vLy8taWlqXl5fs7Oz7+/vn5+c7OzvQ0NDT09MxMTFFRUWTk5O/v7/k5OReXl6urq5iYmJLS0uGhoZOTk7y8vJpaWmcnJyDg4N/f3+bm5thW7HyAAAADXRSTlM9D3VaADJrd4BEKIEG/oGXoQAAAP1JREFUKM9tkIdywyAMhmmb0WVhjLcd2/HK3jvdff+HKjQ1kNr/HYdOH5J+hG463QbdtdCtJtXDImyje5nP5oaIkQLiKcwCxzH+A30PAAXpg30NdPJmMcLPWAXxINLwMAUuy7yewfT6YtgWJJ6ugmPoXDxH2BxiCTKAd1GJzQo4+bS/7ClN/wAeARB1WAV8loelXwczKHAZ+rgGtim4Zq1VSSkZr+Ar21Ga6xJsw1hbz9fwSdj6DCJBwR+d2O5CnhgtKvBE+R2sUv+DB/ZAVFA+dTLZRC7/kBsIcN6fFt8u65d4m7OXKK6CY1j+mjns8oO029Ea9Yie0UOD2q0frM8mZOHCEDcAAAAASUVORK5CYII=",
"id": "mtbmap-no",
"max_zoom": 14,
"min_zoom": 3,
"name": "MTBmap.no",
"tile-size": "512",
"tile_size": 512,
"type": "tms",
"url": "https://mtbmap.no/tiles/osm/mtbmap/{zoom}/{x}/{y}.jpg",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,21 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"terms-of-use-text": "Maps © Thunderforest",
"terms-of-use-url": "https://thunderforest.com/terms/",
"text": "Data © OpenStreetMap contributors",
"url": "https://www.openstreetmap.org/copyright/"
},
"icon": "data:image/png;base64,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",
"id": "opencylemap",
"max_zoom": 22,
"name": "OpenCycleMap",
"type": "tms",
"url": "https://{switch:a,b,c}.tile.thunderforest.com/cycle/{zoom}/{x}/{y}.png?apikey=7bd5ed2197cf4da29fa26de0ba6530cc",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,168 @@
{
"geometry": {
"coordinates": [
[
[
92.1023798,
20.8135629
],
[
93.5690546,
24.0975527
],
[
94.1733026,
23.9269484
],
[
95.1950312,
26.707274
],
[
96.7550898,
27.5286657
],
[
97.5845575,
28.5805966
],
[
98.738122,
27.514051
],
[
98.7436151,
25.8799151
],
[
97.6779413,
24.7577376
],
[
97.9635858,
24.042382
],
[
98.8205194,
24.1627239
],
[
99.5236444,
22.9593356
],
[
100.3695917,
21.5051376
],
[
101.7923212,
22.4830518
],
[
105.3628778,
23.3331079
],
[
106.8185663,
22.8480137
],
[
108.1973505,
21.3619661
],
[
107.4389505,
18.8539792
],
[
117.1453714,
7.4656173
],
[
119.6172953,
5.2875389
],
[
118.1231546,
4.0502277
],
[
117.2552347,
4.3624942
],
[
115.8654642,
4.3460623
],
[
115.5084085,
3.0249771
],
[
114.552598,
1.5100953
],
[
113.5418558,
1.2574836
],
[
112.9650736,
1.5704982
],
[
112.2454691,
1.5100953
],
[
111.67418,
1.0158321
],
[
110.4546976,
0.9004918
],
[
109.4988871,
1.9218969
],
[
103.2256937,
1.1256762
],
[
100.4626322,
3.2388904
],
[
97.6721048,
8.0588831
],
[
93.892808,
15.9398659
],
[
92.1023798,
20.8135629
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"text": "© osm-tools.org & OpenStreetMap contributors, CC-BY-SA",
"url": "https://www.osm-tools.org/"
},
"id": "osm-cambodia_laos_thailand_vietnam-bilingual",
"max_zoom": 20,
"name": "Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual",
"type": "tms",
"url": "https://{switch:a,b,c,d}.tile.osm-tools.org/osm/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,20 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"text": "© OpenStreetMap contributors, CC-BY-SA",
"url": "https://www.openstreetmap.org/"
},
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAGb0lEQVR4Xq3MS2xcVx3H8e855z7m3vH1jMdjO43zshIrtpM0SZ3WFEcRVFFKoRWPBYtAHwgWCFUsQN100QeCsqAhCESrirRASdWWIkoUqgKFJm3UZ5o2oW2akrR5uXbi2ON4PPfOfZ17iERW2bCAz1/f3V8/cfDC02UEj4OxKHjdFMUfmUzOlAeXZFZuuVIKN8zi1dPh7Hcn5091G2EOB5b//NplA28/9tAT4bq111jD64ZKHR2VQWPEbULI0aHqZz7NZeLNmSeVMOJu4AfGgNEGLsR/95YuetcRzprcFJvaaVxrpm2mmqfp8FxKSYk8ck+0pt1nykFp0A/k9Tnt/lq3T2dHEOmi2DxSu+EdAAFwcPqp640xe42h26Qa2hqnXsFVHs04pNFuYgvbtOWCmD3aMj2VNaLi1+jwyxgpCKOQRCdMN6ZMd5Bmw1cPfG+5O/7LeX0ECyBppx9Zrn0c6BbNHJNr4qhFYWtsJCWpSFUm3ntxips2bxe+p1BKIJQECpRbkCQ2wu0XzbnIeemvhzYCVNR6JMDm5bdNF9qcwhiKbpvMg2KujZDmUgX1jgqT719gy+iX6QxsPM9F2YqclHbRRpUEXmCRZTGFlZGKxSMbR6+uA0gu863OzLc7cVUZN6jgKI8kicl0ykzjAiW5lGrVAWUwokApSa3UTY/XR2B3UlDgVy1sB8od7tgt2++4AcACOHL+uRW2bW8QQiCxcUoS6XssyBbnF6Y5+8kci8vjlJwqjnQwWpDlgtRYZDpHmxJzWUyk26gOYXxK0g+8G4bXX/snC0DZcmVh9EoQ5DpDSIVJYmIiGvkCurAQpkLU9kkTEEJeCjxbURSCZgTkfVjOApoM6Qtc3109Nj7uWO9M70EbPQT4YMhNjrWQEdHmTPs8SgfUisUgDLoAgcGyEjJtEaeaVlKQ5gVSGYwBhETaEmVJcemQaZ44aRpvyLIEnedGoNHNkNTTeI5DT2kRljeJziVhnKNlE1GaJFfnuRi3SXMDxmA7IUqCI20qdifkxfED+/dlanzb1cYL3BFhsTXPU4Ep0FGKUVALegCb1oLN7FlNpd5HIUNQLYxIsO0EKcByWljuAmXbp7fcIwgVb7xyaNeep3YfUnt272PLjaP1em/lZqmEk4cJQoMKfBxVIcwjlAp47okX6ap3XaoP221CIREyx7La2E6O7/h0eTXK+Bw+8uHrP7znvocXLe6flwCHXj06kab5hJAS6dhQFOgiJ2qXsKLVuHqAgdVD7HrwXibPTKJzFyMMAgECHGXTJTqxE4t3T5xMD7y29+mFRjgpLSUlYJ793T9ORWF0Lk1StCzQNqTTAle30flbzJ/bx6n3Xsa2Fb9/5Eccfu19wnlNFBniWJA3JecbDfa/8y5nJg7bW7ZeuyYKZwyF0QIAkC988Ogzfof6SppapHGZqgNTExPsfngfgaXpqyWk9QF6lwWk7YJlK1fQaTysqk8sE6LwIq4OEMql1DH3/O03PnBHUCk3JMCeA7/q6u1a0ltiNZ1eL719cPrcWR752d+Yn2lx/HSDY40qY2Pb2PapjYxv3YBX1syZ88weP3bp90Omw3PMOxNUe9FTn9gn5uemQqfk5BbAisHBlVo7g7PFx9TdgDMnZvjtzheI51qkWY5xYWxTLxXfJ5IVevIZ6gMDxCYnPjWDXZ0nSiOkEmYqO5l8cGT6FSD6+NhRJMCF1sWV88VkX6f3n/FHd+xl9uwsrTDEOIbPfWEj120eorw0JEzLhGWfop3ixxKrP0CTIQSAEVmhw5/f94uXAANg3b/r+1YrnV1T86ucPDzBrp3PcvHcHGmaUekL+OKtm9m0ailOUEe4FrXyWaKFblM4HmUvElNzF4jTxFiOhRRSJO34JHCOy6RU0i60uepfx07nO+593FycapAkCbX+Kl+/cxvXfXYIU3GjN/Yf2vPPg2/9JVxoNYNqQ+hcilznlKWDcpSwlCWiZrtx/O3Tf+AKClj88I9v/9aD99/aHBkaLlYNDTXuvPubH/3kN3e9vP3bn78HGAP6gSXA6K3fufnOXz+/888vHH3i9O4XH3j1roe+8dDo1pGvAeuAClfa/+aTQH35Yztuenz7l4aPLB9c81O/3H3L5VHFlUACZaAH6AQc/pv1o9cEiwbWbRlev+mrazeOblg3usnj/6nWV2fVyFp71fCa0sDgkOKyq5av4H/xb0Ky8po5hQEuAAAAAElFTkSuQmCC",
"id": "osm-mapnik-german_style",
"max_zoom": 18,
"mod-tile-features": true,
"name": "OpenStreetMap (German Style)",
"type": "tms",
"url": "https://{switch:a,b,c,d}.tile.openstreetmap.de/tiles/osmde/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

2023
layers/josm/osmbe-fr.geojson Normal file

File diff suppressed because it is too large Load diff

2023
layers/josm/osmbe-nl.geojson Normal file

File diff suppressed because it is too large Load diff

2023
layers/josm/osmbe.geojson Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,46 @@
{
"geometry": {
"coordinates": [
[
[
16.2075922,
62.7408449
],
[
16.2900797,
33.8453727
],
[
-10.7364447,
33.8043768
],
[
-10.8189321,
62.7182339
],
[
16.2075922,
62.7408449
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"text": "Tiles © OpenStreetMap France, data © OpenStreetMap contributors, ODbL",
"url": "https://www.openstreetmap.org/"
},
"icon": "data:image/png;base64,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",
"id": "osmfr-basque",
"max_zoom": 20,
"mod-tile-features": true,
"name": "OpenStreetMap (Basque Style)",
"type": "tms",
"url": "https://tile.openstreetmap.bzh/eu/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,46 @@
{
"geometry": {
"coordinates": [
[
[
16.2075922,
62.7408449
],
[
16.2900797,
33.8453727
],
[
-10.7364447,
33.8043768
],
[
-10.8189321,
62.7182339
],
[
16.2075922,
62.7408449
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"text": "Tiles © OpenStreetMap France, data © OpenStreetMap contributors, ODbL",
"url": "https://www.openstreetmap.org/"
},
"icon": "data:image/png;base64,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",
"id": "osmfr-breton",
"max_zoom": 20,
"mod-tile-features": true,
"name": "OpenStreetMap (Breton Style)",
"type": "tms",
"url": "https://tile.openstreetmap.bzh/br/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,46 @@
{
"geometry": {
"coordinates": [
[
[
16.2075922,
62.7408449
],
[
16.2900797,
33.8453727
],
[
-10.7364447,
33.8043768
],
[
-10.8189321,
62.7182339
],
[
16.2075922,
62.7408449
]
]
],
"type": "Polygon"
},
"properties": {
"attribution": {
"required": true,
"text": "Tiles © OpenStreetMap France, data © OpenStreetMap contributors, ODbL",
"url": "https://www.openstreetmap.org/"
},
"icon": "data:image/png;base64,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",
"id": "osmfr-occitan",
"max_zoom": 20,
"mod-tile-features": true,
"name": "OpenStreetMap (Occitan Style)",
"type": "tms",
"url": "https://tile.openstreetmap.bzh/oc/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

20
layers/josm/osmfr.geojson Normal file
View file

@ -0,0 +1,20 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"text": "Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL",
"url": "https://www.openstreetmap.org/"
},
"icon": "data:image/png;base64,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",
"id": "osmfr",
"max_zoom": 20,
"mod-tile-features": true,
"name": "OpenStreetMap (French Style)",
"type": "tms",
"url": "https://{switch:a,b,c}.tile.openstreetmap.fr/osmfr/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,21 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"text": "© OpenStreetMap contributors, CC-BY-SA",
"url": "https://www.openstreetmap.org/"
},
"default": true,
"icon": "data:image/png;base64,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",
"id": "standard",
"max_zoom": 19,
"mod-tile-features": true,
"name": "OpenStreetMap Carto (Standard)",
"type": "tms",
"url": "https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -0,0 +1,18 @@
{
"geometry": null,
"properties": {
"attribution": {
"required": true,
"text": "© OpenStreetMap contributors, CC-BY-SA",
"url": "https://www.openstreetmap.org/"
},
"id": "wikimedia-map",
"max_zoom": 18,
"name": "Wikimedia Map",
"type": "tms",
"url": "https://maps.wikimedia.org/osm-intl/{zoom}/{x}/{y}.png",
"valid-georeference": true,
"dataSource": "JOSM"
},
"type": "Feature"
}

View file

@ -74,6 +74,7 @@
"delete-route": "Delete route?",
"draw-route-start": "Draw route (D key)",
"draw-route-stop": "Stop drawing route (ESC key)",
"hikebike-hillshading": "Hillshading",
"hiking": "Hiking",
"layer": {
"bing": "Bing Aerial",
@ -81,10 +82,12 @@
"cycling": "Cycling (Waymarked Trails)",
"digitalglobe": "DigitalGlobe Recent Imagery",
"esri": "Esri World Imagery",
"hikebike-hillshading": "Hillshading (Hike & Bike Map)",
"hiking": "Hiking (Waymarked Trails)",
"osm": "OpenStreetMap",
"osmde": "OpenStreetMap.de",
"outdoors": "Outdoors (Thunderforest)",
"stamen-terrain": "Terrain (Stamen)",
"strava-segments": "Strava segments",
"topo": "OpenTopoMap"
},
@ -157,8 +160,12 @@
"title": "Itinerary"
},
"layers": {
"collapse": "Collapse all",
"custom-layers": "Custom layers",
"customize": "Add or remove custom layers",
"expand": "Expand all",
"optional": "Add or remove optional layers",
"optional-layers": "More",
"table": {
"URL": "URL",
"empty": "No custom layer configured yet.",

View file

@ -7,6 +7,7 @@
"build": "gulp",
"transifex-push": "gulp i18next && tx push --source",
"transifex-pull": "tx pull --all --minimum-perc 1 --force && (git add locales/*.json && git commit locales/*.json -m 'Update translations' || true)",
"layers": "node layers/josm/extract.js && node layers/collection/extract.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
@ -31,12 +32,14 @@
"i18next-xhr-backend": "^2.0.1",
"jquery": "3.3.1",
"jquery-i18next": "^1.2.1",
"jstree": "^3.3.7",
"leaflet": "~1.3.0",
"leaflet-control-geocoder": "~1.5.8",
"leaflet-easybutton": "*",
"leaflet-editable": "^1.1.0",
"leaflet-elevation": "MrMufflon/Leaflet.Elevation#master",
"leaflet-plugins": "~3.0.0",
"leaflet-providers": "^1.5.0",
"leaflet-routing": "nrenner/leaflet-routing#dev",
"leaflet-sidebar-v2": "nrenner/leaflet-sidebar-v2#dev",
"leaflet-triangle-marker": "^1.0.1",
@ -62,16 +65,18 @@
"gulp-github-release": "^1.2.1",
"gulp-if": "^2.0.0",
"gulp-inject": "^1.2.0",
"gulp-json-concat": "^0.1.1",
"gulp-modify-css-urls": "^2.0.0",
"gulp-postcss": "^7.0.1",
"gulp-remember": "^0.3.0",
"gulp-rename": "^1.2.0",
"gulp-rename": "^1.4.0",
"gulp-replace": "^0.5.4",
"gulp-sourcemaps": "^1.5.1",
"gulp-uglify": "^1.1.0",
"gulp-util": "^3.0.7",
"gulp-zip": "^4.0.0",
"i18next-scanner": "^2.9.1",
"node-fetch": "^2.3.0",
"npmfiles": "^0.1.1"
},
"overrides": {
@ -198,6 +203,13 @@
"main": [
"dist/umd/jquery-i18next.js"
]
},
"jstree": {
"main": [
"dist/jstree.js",
"dist/themes/default/style.css",
"dist/themes/default/*.png"
]
}
}
}

View file

@ -1194,6 +1194,11 @@
"@turf/invariant" "^5.1.5"
d3-voronoi "1.1.2"
JSV@^4.0.x:
version "4.0.2"
resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57"
integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=
acorn-bigint@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/acorn-bigint/-/acorn-bigint-0.3.1.tgz#edb40a414dcaf5a09c2933db6bed79454b3ff46a"
@ -1331,6 +1336,11 @@ ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
ansi-styles@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=
ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
@ -1683,6 +1693,15 @@ chalk@^2.4.1:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=
dependencies:
ansi-styles "~1.0.0"
has-color "~0.1.0"
strip-ansi "~0.1.0"
class-utils@^0.3.5:
version "0.3.6"
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
@ -2727,6 +2746,15 @@ gulp-inject@^1.2.0:
event-stream "^3.1.0"
gulp-util "^3.0.0"
gulp-json-concat@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/gulp-json-concat/-/gulp-json-concat-0.1.1.tgz#b66cda73fbb8cfc3d23de601a3e72fc52432ec5d"
integrity sha512-6E9HBFUIvdFYrqmO8j2+e0DcJ2uuY7qxQcrxZ4eFNvhYy+M34+vKjv272OuA7NSnt0G2EPITBazmjv8hszJpgQ==
dependencies:
gulp-util "^3.0.8"
jsonlint "^1.6.2"
through "^2.3.8"
gulp-match@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.0.3.tgz#91c7c0d7f29becd6606d57d80a7f8776a87aba8e"
@ -2766,7 +2794,7 @@ gulp-remember@^0.3.0:
gulp-util "^3.0.1"
through2 "^0.5.0"
gulp-rename@^1.2.0:
gulp-rename@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd"
integrity sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==
@ -2818,7 +2846,7 @@ gulp-uglify@^1.1.0:
uglify-save-license "^0.4.1"
vinyl-sourcemaps-apply "^0.2.0"
gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.7:
gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.7, gulp-util@^3.0.8:
version "3.0.8"
resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
integrity sha1-AFTh50RQLifATBh8PsxQXdVLu08=
@ -2899,6 +2927,11 @@ has-ansi@^2.0.0:
dependencies:
ansi-regex "^2.0.0"
has-color@~0.1.0:
version "0.1.7"
resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@ -3314,7 +3347,7 @@ jquery-i18next@^1.2.1:
resolved "https://registry.yarnpkg.com/jquery-i18next/-/jquery-i18next-1.2.1.tgz#3e4ac5e46632fac21640529f1aa7b68e54f227e8"
integrity sha512-UNcw3rgxoKjGEg4w23FEn2h3OlPJU7rPzsgDuXDBZktIzeiVbJohs9Cv9hj8oP8KNfBRKOoErL/OVxg2FaAR4g==
"jquery@1.9.1 - 3", jquery@3.3.1, jquery@>=1.7, jquery@>=1.8:
"jquery@1.9.1 - 3", jquery@3.3.1, jquery@>=1.7, jquery@>=1.8, jquery@>=1.9.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca"
integrity sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==
@ -3352,6 +3385,14 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
jsonlint@^1.6.2:
version "1.6.3"
resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.3.tgz#cb5e31efc0b78291d0d862fbef05900adf212988"
integrity sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==
dependencies:
JSV "^4.0.x"
nomnom "^1.5.x"
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@ -3362,6 +3403,13 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
jstree@^3.3.7:
version "3.3.7"
resolved "https://registry.yarnpkg.com/jstree/-/jstree-3.3.7.tgz#41df485d66148836ac389603a3e12f4574b06251"
integrity sha512-yzzalO1TbZ4HdPezO43LesGI4Wv2sB0Nl+4GfwO0YYvehGws5qtTAhlBISxfur9phMLwCtf9GjHlRx2ZLXyRnw==
dependencies:
jquery ">=1.9.1"
kind-of@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44"
@ -3441,6 +3489,11 @@ leaflet-plugins@~3.0.0:
resolved "https://registry.yarnpkg.com/leaflet-plugins/-/leaflet-plugins-3.0.3.tgz#7c727ac79a37636b245dd1adc64e10c61b425864"
integrity sha512-J2dfJxrq7ETmciGq01syYmB0zG1Ogzy5FioIFJjJB82jFqxHZJDFUMiPFGJn+gfJnWhv/LobbPQYqHdaJSxR9w==
leaflet-providers@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/leaflet-providers/-/leaflet-providers-1.5.0.tgz#06d598231ef36f8d0566c219cedf18cef2ff80f5"
integrity sha512-btncloSyOHrgYNexoz2dRpCl+U9iDQME91RsOWQWNAD9jQUPAkq9mxuTvL/O9VOwrqcEtzhvuHBHIOacJAZDxQ==
leaflet-routing@nrenner/leaflet-routing#dev:
version "0.1.1"
resolved "https://codeload.github.com/nrenner/leaflet-routing/tar.gz/bbe5df8af500948251337a7e6c09d14f9fad6d8d"
@ -3856,6 +3909,19 @@ natives@^1.1.0:
resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb"
integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==
node-fetch@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
nomnom@^1.5.x:
version "1.8.1"
resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7"
integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=
dependencies:
chalk "~0.4.0"
underscore "~1.6.0"
normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@ -4927,6 +4993,11 @@ strip-ansi@^3.0.0:
dependencies:
ansi-regex "^2.0.0"
strip-ansi@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=
strip-bom-buf@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572"
@ -5185,6 +5256,11 @@ unc-path-regex@^0.1.2:
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
underscore@~1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
integrity sha1-izixDKze9jM3uLJOT/htRa6lKag=
union-value@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"