Allow to add an overlay tilelayer

cf #71 #976
This commit is contained in:
Yohan Boniface 2023-02-28 14:08:34 +01:00
parent 1c3fe61aa4
commit 169f7e954c

View file

@ -1,6 +1,5 @@
L.Map.mergeOptions({ L.Map.mergeOptions({
base_layers: null, overlay: null,
overlay_layers: null,
datalayers: [], datalayers: [],
center: [4, 50], center: [4, 50],
zoom: 6, zoom: 6,
@ -507,6 +506,7 @@ L.U.Map.include({
// Users can put tilelayer URLs by hand, and if they add wrong {variable}, // Users can put tilelayer URLs by hand, and if they add wrong {variable},
// Leaflet throw an error, and then the map is no more editable // Leaflet throw an error, and then the map is no more editable
} }
this.setOverlay()
}, },
eachTileLayer: function (method, context) { eachTileLayer: function (method, context) {
@ -522,6 +522,20 @@ L.U.Map.include({
} }
}, },
setOverlay: function () {
if (!this.options.overlay || !this.options.overlay.url_template) return;
var overlay = this.createTileLayer(this.options.overlay);
try {
this.addLayer(overlay);
if (this.overlay) this.removeLayer(this.overlay);
this.overlay = overlay;
} catch (e) {
this.removeLayer(overlay);
console.error(e);
this.ui.alert({content: L._('Error in the overlay URL') + ': ' + overlay._url, level: 'error'});
}
},
initCenter: function () { initCenter: function () {
if (this.options.hash && this._hash.parseHash(location.hash)) { if (this.options.hash && this._hash.parseHash(location.hash)) {
// FIXME An invalid hash will cause the load to fail // FIXME An invalid hash will cause the load to fail
@ -1059,6 +1073,7 @@ L.U.Map.include({
'description', 'description',
'licence', 'licence',
'tilelayer', 'tilelayer',
'overlay',
'limitBounds', 'limitBounds',
'color', 'color',
'iconClass', 'iconClass',
@ -1334,6 +1349,26 @@ L.U.Map.include({
customTilelayer.appendChild(builder.build()); customTilelayer.appendChild(builder.build());
}, },
_editOverlay: function (container) {
if (!L.Util.isObject(this.options.overlay)) {
this.options.overlay = {};
}
var overlayFields = [
['options.overlay.url_template', {handler: 'BlurInput', helpText: L._('Supported scheme') + ': http://{s}.domain.com/{z}/{x}/{y}.png', placeholder: 'url', helpText: L._('Background overlay url')}],
['options.overlay.maxZoom', {handler: 'BlurIntInput', placeholder: L._('max zoom')}],
['options.overlay.minZoom', {handler: 'BlurIntInput', placeholder: L._('min zoom')}],
['options.overlay.attribution', {handler: 'BlurInput', placeholder: L._('attribution')}],
['options.overlay.opacity', {handler: 'Range', min: 0, max: 1, step: 'any', placeholder: L._('opacity')}],
['options.overlay.tms', {handler: 'Switch', label: L._('TMS format')}]
];
var overlay = L.DomUtil.createFieldset(container, L._('Custom overlay'));
builder = new L.U.FormBuilder(this, overlayFields, {
callback: this.initTileLayers,
callbackContext: this
});
overlay.appendChild(builder.build());
},
_editBounds: function (container) { _editBounds: function (container) {
if (!L.Util.isObject(this.options.limitBounds)) { if (!L.Util.isObject(this.options.limitBounds)) {
this.options.limitBounds = {}; this.options.limitBounds = {};
@ -1460,6 +1495,7 @@ L.U.Map.include({
this._editDefaultProperties(container); this._editDefaultProperties(container);
this._editInteractionsProperties(container); this._editInteractionsProperties(container);
this._editTilelayer(container); this._editTilelayer(container);
this._editOverlay(container);
this._editBounds(container); this._editBounds(container);
this._editSlideshow(container); this._editSlideshow(container);
this._editCredits(container); this._editCredits(container);