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.

207 righe
7.1 KiB

2 anni fa
/**
MIT License http://www.opensource.org/licenses/mit-license.php
Author Igor Vladyka <igor.vladyka@gmail.com> (https://github.com/Igor-Vladyka/leaflet.browser.print)
**/
L.Control.BrowserPrint.Utils = {
_ignoreArray: [],
_cloneFactoryArray: [],
_cloneRendererArray: [],
_knownRenderers: {},
cloneOptions: function(options) {
var utils = this;
var retOptions = {};
for (var name in options) {
var item = options[name];
if (item && item.clone) {
retOptions[name] = item.clone();
} else if (item && item.onAdd) {
retOptions[name] = utils.cloneLayer(item);
} else {
retOptions[name] = item;
}
}
return retOptions;
},
cloneBasicOptionsWithoutLayers: function(options) {
var retOptions = {};
var optionNames = Object.getOwnPropertyNames(options);
if (optionNames.length) {
for (var i = 0; i < optionNames.length; i++) {
var optName = optionNames[i];
if (optName && optName != "layers") {
retOptions[optName] = options[optName];
}
}
return this.cloneOptions(retOptions);
}
return retOptions;
},
cloneInnerLayers: function (layer) {
var utils = this;
var layers = [];
layer.eachLayer(function (inner) {
var l = utils.cloneLayer(inner);
if (l) {
layers.push(l);
}
});
return layers;
},
initialize: function () {
this._knownRenderers = {};
// Renderers
this.registerRenderer(L.SVG, 'L.SVG');
this.registerRenderer(L.Canvas, 'L.Canvas');
this.registerLayer(L.TileLayer.WMS, 'L.TileLayer.WMS', function(layer, utils) { return L.tileLayer.wms(layer._url, utils.cloneOptions(layer.options)); });
this.registerLayer(L.TileLayer, 'L.TileLayer', function(layer, utils) { return L.tileLayer(layer._url, utils.cloneOptions(layer.options)); });
this.registerLayer(L.GridLayer, 'L.GridLayer', function(layer, utils) { return L.gridLayer(utils.cloneOptions(layer.options)); });
this.registerLayer(L.ImageOverlay, 'L.ImageOverlay', function(layer, utils) { return L.imageOverlay(layer._url, layer._bounds, utils.cloneOptions(layer.options)); });
this.registerLayer(L.Marker, 'L.Marker', function(layer, utils) { return L.marker(layer.getLatLng(), utils.cloneOptions(layer.options)); });
this.registerLayer(L.Popup, 'L.Popup', function(layer, utils) { return L.popup(utils.cloneOptions(layer.options)).setLatLng(layer.getLatLng()).setContent(layer.getContent()); });
this.registerLayer(L.Circle, 'L.Circle', function(layer, utils) { return L.circle(layer.getLatLng(), layer.getRadius(), utils.cloneOptions(layer.options)); });
this.registerLayer(L.CircleMarker, 'L.CircleMarker', function(layer, utils) { return L.circleMarker(layer.getLatLng(), utils.cloneOptions(layer.options)); });
this.registerLayer(L.Rectangle, 'L.Rectangle', function(layer, utils) { return L.rectangle(layer.getBounds(), utils.cloneOptions(layer.options)); });
this.registerLayer(L.Polygon, 'L.Polygon', function(layer, utils) { return L.polygon(layer.getLatLngs(), utils.cloneOptions(layer.options)); });
// MultiPolyline is removed in leaflet 1.0.0
this.registerLayer(L.MultiPolyline, 'L.MultiPolyline', function(layer, utils) { return L.polyline(layer.getLatLngs(), utils.cloneOptions(layer.options)); });
// MultiPolygon is removed in leaflet 1.0.0
this.registerLayer(L.MultiPolygon, 'L.MultiPolygon', function(layer, utils) { return L.multiPolygon(layer.getLatLngs(), utils.cloneOptions(layer.options)); });
this.registerLayer(L.Polyline, 'L.Polyline', function(layer, utils) { return L.polyline(layer.getLatLngs(), utils.cloneOptions(layer.options)); });
this.registerLayer(L.GeoJSON, 'L.GeoJSON', function(layer, utils) { return L.geoJson(layer.toGeoJSON(), utils.cloneOptions(layer.options)); });
this.registerIgnoreLayer(L.FeatureGroup, 'L.FeatureGroup');
this.registerIgnoreLayer(L.LayerGroup, 'L.LayerGroup');
// There is no point to clone tooltips here; L.tooltip(options);
this.registerLayer(L.Tooltip, 'L.Tooltip', function(){ return null; });
},
_register: function(array, type, identifier, builderFunction) {
if (type &&
!array.filter(function(l){ return l.identifier === identifier; }).length) {
array.push({
type: type,
identifier: identifier,
builder: builderFunction || function (layer) { return new type(layer.options); }
});
}
},
registerLayer: function(type, identifier, builderFunction) {
this._register(this._cloneFactoryArray, type, identifier, builderFunction);
},
registerRenderer: function(type, identifier, builderFunction) {
this._register(this._cloneRendererArray, type, identifier, builderFunction);
},
registerIgnoreLayer: function(type, identifier) {
this._register(this._ignoreArray, type, identifier);
},
cloneLayer: function(layer) {
if (!layer) return null;
// First we check if this layer is actual renderer
var renderer = this.__getRenderer(layer);
if (renderer) {
return renderer;
}
var factoryObject;
if (layer._group) { // Exceptional check for L.MarkerClusterGroup
factoryObject = this.__getFactoryObject(layer._group, true);
} else {
factoryObject = this.__getFactoryObject(layer);
}
// We clone and recreate layer if it's simple overlay
if (factoryObject) {
factoryObject = factoryObject.builder(layer, this);
}
return factoryObject;
},
getType: function(layer) {
if (!layer) return null;
var factoryObject = this.__getFactoryObject(layer);
if (factoryObject) {
factoryObject = factoryObject.identifier;
}
return factoryObject;
},
__getRenderer: function(oldRenderer) {
var renderer = this._knownRenderers[oldRenderer._leaflet_id];
if (!renderer) {
for (var i = 0; i < this._cloneRendererArray.length; i++) {
var factoryObject = this._cloneRendererArray[i];
if (oldRenderer instanceof factoryObject.type) {
this._knownRenderers[oldRenderer._leaflet_id] = factoryObject.builder(oldRenderer.options);
break;
}
}
renderer = this._knownRenderers[oldRenderer._leaflet_id];
}
return renderer;
},
__getFactoryObject: function (layer, skipIgnore) {
if (!skipIgnore) {
for (var i = 0; i < this._ignoreArray.length; i++) {
var ignoreObject = this._ignoreArray[i];
if (ignoreObject.type && layer instanceof ignoreObject.type) {
return null;
}
}
}
for (var i = 0; i < this._cloneFactoryArray.length; i++) {
var factoryObject = this._cloneFactoryArray[i];
if (factoryObject.type && layer instanceof factoryObject.type) {
return factoryObject;
}
}
for (var i = 0; i < this._cloneRendererArray.length; i++) {
var factoryObject = this._cloneRendererArray[i];
if (factoryObject.type && layer instanceof factoryObject.type) {
return null;
}
}
this.__unknownLayer__();
return null;
},
__unknownLayer__: function(){
console.warn('Unknown layer, cannot clone this layer. Leaflet version: ' + L.version);
console.info('For additional information please refer to documentation on: https://github.com/Igor-Vladyka/leaflet.browser.print.');
console.info('-------------------------------------------------------------------------------------------------------------------');
}
};