mappe per georeferenziazione
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

155 righe
4.9 KiB

2 anni fa
/*
* Simple navigation control that allows back and forward navigation through map's view history
*/
(function() {
L.Control.NavBar = L.Control.extend({
options: {
position: 'topleft',
//center:,
//zoom :,
//bbox:, //Alternative to center/zoom for home button, takes precedence if included
forwardTitle: 'Go forward in map view history',
backTitle: 'Go back in map view history',
homeTitle: 'Go to home map view'
},
onAdd: function(map) {
// Set options
if (!this.options.center) {
this.options.center = map.getCenter();
}
if (!this.options.zoom) {
this.options.zoom = map.getZoom();
}
options = this.options;
// Create toolbar
var controlName = 'leaflet-control-navbar',
container = L.DomUtil.create('div', controlName + ' leaflet-bar');
// Add toolbar buttons
this._homeButton = this._createButton(options.homeTitle, controlName + '-home', container, this._goHome);
this._fwdButton = this._createButton(options.forwardTitle, controlName + '-fwd', container, this._goFwd);
this._backButton = this._createButton(options.backTitle, controlName + '-back', container, this._goBack);
// Initialize view history and index
this._viewHistory = [{center: this.options.center, zoom: this.options.zoom}];
this._curIndx = 0;
this._updateDisabled();
map.once('moveend', function() {this._map.on('moveend', this._updateHistory, this);}, this);
// Set intial view to home
map.setView(options.center, options.zoom);
return container;
},
onRemove: function(map) {
map.off('moveend', this._updateHistory, this);
},
_goHome: function() {
if (this.options.bbox){
try {
this._map.fitBounds(this.options.bbox);
} catch(err){
this._map.setView(this.options.center, this.options.zoom); //Use default if invalid bbox input.
}
}
this._map.setView(this.options.center, this.options.zoom);
},
_goBack: function() {
if (this._curIndx !== 0) {
this._map.off('moveend', this._updateHistory, this);
this._map.once('moveend', function() {this._map.on('moveend', this._updateHistory, this);}, this);
this._curIndx--;
this._updateDisabled();
var view = this._viewHistory[this._curIndx];
this._map.setView(view.center, view.zoom);
}
},
_goFwd: function() {
if (this._curIndx != this._viewHistory.length - 1) {
this._map.off('moveend', this._updateHistory, this);
this._map.once('moveend', function() {this._map.on('moveend', this._updateHistory, this);}, this);
this._curIndx++;
this._updateDisabled();
var view = this._viewHistory[this._curIndx];
this._map.setView(view.center, view.zoom);
}
},
_createButton: function(title, className, container, fn) {
// Modified from Leaflet zoom control
var link = L.DomUtil.create('a', className, container);
link.href = '#';
link.title = title;
L.DomEvent
.on(link, 'mousedown dblclick', L.DomEvent.stopPropagation)
.on(link, 'click', L.DomEvent.stop)
.on(link, 'click', fn, this)
.on(link, 'click', this._refocusOnMap, this);
return link;
},
_updateHistory: function() {
var newView = {center: this._map.getCenter(), zoom: this._map.getZoom()};
var insertIndx = this._curIndx + 1;
this._viewHistory.splice(insertIndx, this._viewHistory.length - insertIndx, newView);
this._curIndx++;
// Update disabled state of toolbar buttons
this._updateDisabled();
},
_setFwdEnabled: function(enabled) {
var leafletDisabled = 'leaflet-disabled';
var fwdDisabled = 'leaflet-control-navbar-fwd-disabled';
if (enabled === true) {
L.DomUtil.removeClass(this._fwdButton, fwdDisabled);
L.DomUtil.removeClass(this._fwdButton, leafletDisabled);
}else {
L.DomUtil.addClass(this._fwdButton, fwdDisabled);
L.DomUtil.addClass(this._fwdButton, leafletDisabled);
}
},
_setBackEnabled: function(enabled) {
var leafletDisabled = 'leaflet-disabled';
var backDisabled = 'leaflet-control-navbar-back-disabled';
if (enabled === true) {
L.DomUtil.removeClass(this._backButton, backDisabled);
L.DomUtil.removeClass(this._backButton, leafletDisabled);
}else {
L.DomUtil.addClass(this._backButton, backDisabled);
L.DomUtil.addClass(this._backButton, leafletDisabled);
}
},
_updateDisabled: function() {
if (this._curIndx == (this._viewHistory.length - 1)) {
this._setFwdEnabled(false);
}else {
this._setFwdEnabled(true);
}
if (this._curIndx <= 0) {
this._setBackEnabled(false);
}else {
this._setBackEnabled(true);
}
}
});
L.control.navbar = function(options) {
return new L.Control.NavBar(options);
};
})();