Obvody/www/js/mapove-podklady.js

102 lines
3.3 KiB
JavaScript

// Sdílené podkladové mapy. Výchozí je OpenStreetMap, volbu drží cookie mapovyPodklad.
(function (global) {
var COOKIE = 'mapovyPodklad';
var VYCHOZI = 'osm';
var API_KEY = 'Uw8gm6JPZpnT3GfNnh8adARpQI-WBGy6QaY9g6VhD74';
function ctiCookie(jmeno) {
var shoda = document.cookie.match(new RegExp('(?:^|; )' + jmeno + '=([^;]*)'));
if (!shoda) {
return '';
}
try {
return decodeURIComponent(shoda[1]);
} catch (e) {
return shoda[1];
}
}
function klic() {
var hodnota = ctiCookie(COOKIE);
if (hodnota === 'mapycz' || hodnota === 'mapycz-letecka') {
return hodnota;
}
return VYCHOZI;
}
function vytvor() {
return {
osm: L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
}),
mapycz: L.tileLayer('https://api.mapy.cz/v1/maptiles/basic/256/{z}/{x}/{y}?apikey=' + API_KEY, {
minZoom: 0,
maxZoom: 19,
attribution: '<a href="https://api.mapy.cz/copyright" target="_blank">&copy; Seznam.cz a.s. a další</a>',
}),
'mapycz-letecka': L.tileLayer('https://api.mapy.cz/v1/maptiles/aerial/256/{z}/{x}/{y}?apikey=' + API_KEY, {
minZoom: 0,
maxZoom: 19,
attribution: '<a href="https://api.mapy.cz/copyright" target="_blank">&copy; Seznam.cz a.s. a další</a>',
}),
};
}
function vychozi(vrstvy) {
return vrstvy[klic()] || vrstvy[VYCHOZI];
}
function popisky(vrstvy) {
return {
'Mapy.cz': vrstvy.mapycz,
'Mapy.cz (letecká)': vrstvy['mapycz-letecka'],
'OpenStreetMap': vrstvy.osm,
};
}
function jeMapyCz(vrstva, vrstvy) {
return vrstva === vrstvy.mapycz || vrstva === vrstvy['mapycz-letecka'];
}
function logo(map, vrstvy) {
var control = new (L.Control.extend({
options: { position: 'bottomleft' },
onAdd: function () {
var container = L.DomUtil.create('div');
var link = L.DomUtil.create('a', '', container);
link.setAttribute('href', 'http://mapy.cz/');
link.setAttribute('target', '_blank');
link.innerHTML = '<img src="https://api.mapy.cz/img/api/logo.svg" alt="Mapy.cz" />';
L.DomEvent.disableClickPropagation(link);
return container;
},
}))();
function obnov() {
var aktivni = false;
map.eachLayer(function (layer) {
if (jeMapyCz(layer, vrstvy)) {
aktivni = true;
}
});
if (aktivni && !control._map) {
control.addTo(map);
} else if (!aktivni && control._map) {
control.remove();
}
}
map.on('baselayerchange', obnov);
obnov();
}
global.MapovePodklady = {
klic: klic,
vytvor: vytvor,
vychozi: vychozi,
popisky: popisky,
logo: logo,
};
})(window);