/*
* List of public-use layers.
*/
window._tempLL = window.layerList;
window.layerList = {
// some entries in this list were adapted from the https://github.com/leaflet-extras/leaflet-providers list (it has BSD 2-clause license)
list: {
"OpenStreetMap": "L.tileLayer('http://tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map © OpenStreetMap', minZoom: 0, maxZoom: 19 })",
"OpenStreetMap DE": "L.tileLayer('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', { attribution: 'Map © OpenStreetMap', minZoom: 0, maxZoom: 18 })",
"OpenStreetMap FR": "L.tileLayer('http://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', { subdomains: 'abc', attribution: 'Map © OpenStreetMap | Tiles © OSM France', minZoom: 0, maxZoom: 20 })",
"Hike & Bike": "L.layerGroup([ L.tileLayer('http://toolserver.org/tiles/hikebike/{z}/{x}/{y}.png', { attribution: 'Map © OSM | Tiles © Colin Marquardt' } ), L.tileLayer('http://toolserver.org/~cmarqu/hill/{z}/{x}/{y}.png', { minZoom: 0, maxZoom: 17 }) ])",
"CycleMap": "L.tileLayer('http://{s}.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png', { attribution: 'Map © OSM | Tiles © Andy Allan', minZoom: 0, maxZoom: 18 })",
"Humanitarian": "L.tileLayer('http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', { attribution: 'Map © OpenStreetMap | Tiles © Humanitarian OSM Team', minZoom: 0, maxZoom: 19 })",
"Transport": "L.tileLayer('http://{s}.tile2.opencyclemap.org/transport/{z}/{x}/{y}.png', { attribution: 'Map © OSM | Tiles © Andy Allan', minZoom: 0, maxZoom: 18 })",
"Landscape": "L.tileLayer('http://{s}.tile3.opencyclemap.org/landscape/{z}/{x}/{y}.png', { attribution: 'Map © OSM | Tiles © Andy Allan', minZoom: 0, maxZoom: 18 })",
"Outdoors": "L.tileLayer('http://{s}.tile.thunderforest.com/outdoors/{z}/{x}/{y}.png', { attribution: 'Map © OSM | Tiles © Andy Allan', minZoom: 0, maxZoom: 18 })",
"Stamen Toner": "L.tileLayer('http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png', { attribution: 'Map © OSM | Tiles © Stamen Design', minZoom: 0, maxZoom: 20 })",
"Stamen Toner Lite": "L.tileLayer('http://{s}.tile.stamen.com/toner-lite/{z}/{x}/{y}.png', { attribution: 'Map © OSM | Tiles © Stamen Design', minZoom: 0, maxZoom: 20 })",
"Stamen Watercolor": "L.tileLayer('http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.png', { attribution: 'Map © OSM | Tiles © Stamen Design', minZoom: 3, maxZoom: 16 })",
"MapBox": "L.tileLayer('http://{s}.tiles.mapbox.com/v3/{key:https://www.mapbox.com/#signup}/{z}/{x}/{y}.png', { subdomains: 'abcd', attribution: 'Map © OpenStreetMap' })"
},
getSortedKeys: function() {
var result = [], k;
for( k in this.list )
if( this.list.hasOwnProperty(k) )
result.push(k);
result.sort();
return result;
},
requiresKey: function( layer ) {
var reKeyC = /{key(?::[^}]+)?}/,
l = this.list[layer];
return l && reKeyC.test(l);
},
getKeyLink: function( layer ) {
var reKeyC = /{key:([^}]+)}/,
l = this.list[layer],
m = l && l.match(reKeyC);
return m && m.length > 1 && m[1] ? m[1] : '';
},
getLayerName: function( layer ) {
if( typeof layer !== 'string' )
return '';
var p1 = layer.indexOf(':'),
p2 = layer.indexOf('|'),
p = p1 > p2 && p2 > 0 ? p2 : p1;
return p > 0 ? layer.substring(0, p) : layer;
},
getLeafletLayer: function( layerId, LL ) {
/* jshint unused: false */
var L = LL || window.L,
reKeyC = /{key(?::[^}]+)?}/,
m = layerId.match(/^(.+?\|)?(.+?)(?::([^'"]+))?$/);
var idx = m && m.length > 2 && m[2] ? m[2] : '',
title = m && m.length > 1 && m[1] && m[1].length > 0 ? m[1] : idx,
keys = m && m.length > 3 && m[3] ? m[3].split(':') : [];
if( this.list[idx] ) {
var layer = this.list[idx], keyPos = 0;
while( reKeyC.test(layer) && keyPos < keys.length ) {
layer = layer.replace(reKeyC, keys[keyPos++]);
}
if( !reKeyC.test(layer) ) {
try {
var done = eval(layer);
if( done ) {
if( !done.options )
done.options = {};
done.options.name = title;
return done;
}
} catch(e) {}
}
}
return null;
},
getLeafletLayers: function( layers, LL ) {
var l = typeof layers === 'string' ? layers.split(',') : layers,
result = [], i, osmidx = -1;
for( i = 0; i < l.length; i++ ) {
var layer = this.getLeafletLayer(l[i], LL);
if( layer ) {
result.push(layer);
if( osmidx < 0 && this.isOpenStreetMapLayer(layer) )
osmidx = result.length - 1;
}
}
if( osmidx > 0 ) {
var tmp = result[osmidx];
result[osmidx] = result[0];
result[0] = tmp;
} else if( osmidx < 0 && result.length > 0 ) {
result.unshift(this.getLeafletLayer('OpenStreetMap', LL));
}
return result;
},
isOpenStreetMapLayer: function( layer ) {
if( typeof layer === 'string' || layer.substring )
return layer.indexOf('openstreetmap.org') > 0;
var l = layer.options && layer._url ? layer : (layer.getLayers ? layer.getLayers()[0] : {});
if( l.options && l._url )
return (l.options.attribution && l.options.attribution.indexOf('openstreetmap.org') > 0) || l._url.indexOf('tile.openstreetmap.') > 0 || l._url.indexOf('opencyclemap.org') > 0 || l._url.indexOf('stamen.com') > 0 || l._url.indexOf('server.arcgisonline.com') > 0;
return false;
}
};
// merge layerList entries that were added before this script was loaded
if( window._tempLL ) {
if( window._tempLL.list ) {
var i;
for( i in window._tempLL.list ) {
if( window._tempLL.list.hasOwnProperty(i) )
window.layerList.list[i] = window._tempLL.list[i];
}
}
delete window._tempLL;
}