Subversion Repositories eFlore/Applications.moissonnage

Compare Revisions

Ignore whitespace Rev 4 → Rev 5

/trunk/widget/modules/carto/squelettes/scripts/layer/tile/Yandex.js
New file
0,0 → 1,157
/*
* L.TileLayer is used for standard xyz-numbered tile layers.
*/
//(function (ymaps, L) {
 
L.Yandex = L.Class.extend({
includes: L.Mixin.Events,
 
options: {
minZoom: 0,
maxZoom: 18,
attribution: '',
opacity: 1,
traffic: false
},
 
// Possible types: map, satellite, hybrid, publicMap, publicMapHybrid
initialize: function(type, options) {
L.Util.setOptions(this, options);
 
this._type = "yandex#" + (type || 'map');
},
 
onAdd: function(map, insertAtTheBottom) {
this._map = map;
this._insertAtTheBottom = insertAtTheBottom;
 
// create a container div for tiles
this._initContainer();
this._initMapObject();
 
// set up events
map.on('viewreset', this._resetCallback, this);
 
this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
map.on('move', this._update, this);
 
map._controlCorners['bottomright'].style.marginBottom = "3em";
 
this._reset();
this._update(true);
},
 
onRemove: function(map) {
this._map._container.removeChild(this._container);
 
this._map.off('viewreset', this._resetCallback, this);
 
this._map.off('move', this._update, this);
 
map._controlCorners['bottomright'].style.marginBottom = "0em";
},
 
getAttribution: function() {
return this.options.attribution;
},
 
setOpacity: function(opacity) {
this.options.opacity = opacity;
if (opacity < 1) {
L.DomUtil.setOpacity(this._container, opacity);
}
},
 
setElementSize: function(e, size) {
e.style.width = size.x + "px";
e.style.height = size.y + "px";
},
 
_initContainer: function() {
var tilePane = this._map._container,
first = tilePane.firstChild;
 
if (!this._container) {
this._container = L.DomUtil.create('div', 'leaflet-yandex-layer leaflet-top leaflet-left');
this._container.id = "_YMapContainer_" + L.Util.stamp(this);
this._container.style.zIndex = "auto";
}
 
if (this.options.overlay) {
first = this._map._container.getElementsByClassName('leaflet-map-pane')[0];
first = first.nextSibling;
// XXX: Bug with layer order
if (L.Browser.opera)
this._container.className += " leaflet-objects-pane";
}
tilePane.insertBefore(this._container, first);
 
this.setOpacity(this.options.opacity);
this.setElementSize(this._container, this._map.getSize());
},
 
_initMapObject: function() {
if (this._yandex) return;
 
// Check that ymaps.Map is ready
if (ymaps.Map === undefined) {
console.debug("L.Yandex: Waiting on ymaps.load('package.map')");
return ymaps.load(["package.map"], this._initMapObject, this);
}
 
// If traffic layer is requested check if control.TrafficControl is ready
if (this.options.traffic)
if (ymaps.control === undefined ||
ymaps.control.TrafficControl === undefined) {
console.debug("L.Yandex: loading traffic and controls");
return ymaps.load(["package.traffic", "package.controls"],
this._initMapObject, this);
}
 
var map = new ymaps.Map(this._container, {center: [0,0], zoom: 0, behaviors: []});
 
if (this.options.traffic)
map.controls.add(new ymaps.control.TrafficControl({shown: true}));
 
if (this._type == "yandex#null") {
this._type = new ymaps.MapType("null", []);
map.container.getElement().style.background = "transparent";
}
map.setType(this._type)
 
this._yandex = map;
this._update(true);
},
 
_resetCallback: function(e) {
this._reset(e.hard);
},
 
_reset: function(clearOldContainer) {
this._initContainer();
},
 
_update: function(force) {
if (!this._yandex) return;
this._resize(force);
 
var center = this._map.getCenter();
var _center = [center.lat, center.lng];
var zoom = this._map.getZoom();
 
if (force || this._yandex.getZoom() != zoom)
this._yandex.setZoom(zoom);
this._yandex.panTo(_center, {duration: 0, delay: 0});
},
 
_resize: function(force) {
var size = this._map.getSize(), style = this._container.style;
if (style.width == size.x + "px" &&
style.height == size.y + "px")
if (force != true) return;
this.setElementSize(this._container, size);
var b = this._map.getBounds(), sw = b.getSouthWest(), ne = b.getNorthEast();
this._yandex.container.fitToViewport();
}
});
//})(ymaps, L)
/trunk/widget/modules/carto/squelettes/scripts/layer/tile/Google.js
New file
0,0 → 1,176
/*
* Google layer using Google Maps API
*/
//(function (google, L) {
 
L.Google = L.Class.extend({
includes: L.Mixin.Events,
 
options: {
minZoom: 0,
maxZoom: 18,
tileSize: 256,
subdomains: 'abc',
errorTileUrl: '',
attribution: '',
opacity: 1,
continuousWorld: false,
noWrap: false
},
 
// Possible types: SATELLITE, ROADMAP, HYBRID, TERRAIN
initialize: function(type, options) {
L.Util.setOptions(this, options);
 
this._ready = google.maps.Map != undefined;
if (!this._ready) L.Google.asyncWait.push(this);
 
this._type = type || 'SATELLITE';
},
 
onAdd: function(map, insertAtTheBottom) {
this._map = map;
this._insertAtTheBottom = insertAtTheBottom;
 
// create a container div for tiles
this._initContainer();
this._initMapObject();
 
// set up events
map.on('viewreset', this._resetCallback, this);
 
this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
map.on('move', this._update, this);
//map.on('moveend', this._update, this);
 
map._controlCorners['bottomright'].style.marginBottom = "1em";
 
this._reset();
this._update();
},
 
onRemove: function(map) {
this._map._container.removeChild(this._container);
//this._container = null;
 
this._map.off('viewreset', this._resetCallback, this);
 
this._map.off('move', this._update, this);
map._controlCorners['bottomright'].style.marginBottom = "0em";
//this._map.off('moveend', this._update, this);
},
 
getAttribution: function() {
return this.options.attribution;
},
 
setOpacity: function(opacity) {
this.options.opacity = opacity;
if (opacity < 1) {
L.DomUtil.setOpacity(this._container, opacity);
}
},
 
setElementSize: function(e, size) {
e.style.width = size.x + "px";
e.style.height = size.y + "px";
},
 
_initContainer: function() {
var tilePane = this._map._container,
first = tilePane.firstChild;
 
if (!this._container) {
this._container = L.DomUtil.create('div', 'leaflet-google-layer leaflet-top leaflet-left');
this._container.id = "_GMapContainer_" + L.Util.stamp(this);
this._container.style.zIndex = "auto";
}
 
if (true) {
tilePane.insertBefore(this._container, first);
 
this.setOpacity(this.options.opacity);
this.setElementSize(this._container, this._map.getSize());
}
},
 
_initMapObject: function() {
if (!this._ready) return;
this._google_center = new google.maps.LatLng(0, 0);
var map = new google.maps.Map(this._container, {
center: this._google_center,
zoom: 0,
tilt: 0,
mapTypeId: google.maps.MapTypeId[this._type],
disableDefaultUI: true,
keyboardShortcuts: false,
draggable: false,
disableDoubleClickZoom: true,
scrollwheel: false,
streetViewControl: false
});
 
var _this = this;
this._reposition = google.maps.event.addListenerOnce(map, "center_changed",
function() { _this.onReposition(); });
 
map.backgroundColor = '#ff0000';
this._google = map;
},
 
_resetCallback: function(e) {
this._reset(e.hard);
},
 
_reset: function(clearOldContainer) {
this._initContainer();
},
 
_update: function() {
if (!this._google) return;
this._resize();
 
var bounds = this._map.getBounds();
var ne = bounds.getNorthEast();
var sw = bounds.getSouthWest();
var google_bounds = new google.maps.LatLngBounds(
new google.maps.LatLng(sw.lat, sw.lng),
new google.maps.LatLng(ne.lat, ne.lng)
);
var center = this._map.getCenter();
var _center = new google.maps.LatLng(center.lat, center.lng);
 
this._google.setCenter(_center);
this._google.setZoom(this._map.getZoom());
//this._google.fitBounds(google_bounds);
},
 
_resize: function() {
var size = this._map.getSize();
if (this._container.style.width == size.x &&
this._container.style.height == size.y)
return;
this.setElementSize(this._container, size);
this.onReposition();
},
 
onReposition: function() {
if (!this._google) return;
google.maps.event.trigger(this._google, "resize");
}
});
 
L.Google.asyncWait = [];
L.Google.asyncInitialize = function() {
var i;
for (i = 0; i < L.Google.asyncWait.length; i++) {
var o = L.Google.asyncWait[i];
o._ready = true;
if (o._container) {
o._initMapObject();
o._update();
}
}
L.Google.asyncWait = [];
}
//})(window.google, L)
/trunk/widget/modules/carto/squelettes/scripts/layer/tile/Bing.js
New file
0,0 → 1,117
L.BingLayer = L.TileLayer.extend({
options: {
subdomains: [0, 1, 2, 3],
type: 'Aerial',
attribution: 'Bing',
culture: ''
},
 
initialize: function(key, options) {
L.Util.setOptions(this, options);
 
this._key = key;
this._url = null;
this.meta = {};
this.loadMetadata();
},
 
tile2quad: function(x, y, z) {
var quad = '';
for (var i = z; i > 0; i--) {
var digit = 0;
var mask = 1 << (i - 1);
if ((x & mask) != 0) digit += 1;
if ((y & mask) != 0) digit += 2;
quad = quad + digit;
}
return quad;
},
 
getTileUrl: function(p, z) {
var z = this._getZoomForUrl();
var subdomains = this.options.subdomains,
s = this.options.subdomains[Math.abs((p.x + p.y) % subdomains.length)];
return this._url.replace('{subdomain}', s)
.replace('{quadkey}', this.tile2quad(p.x, p.y, z))
.replace('{culture}', this.options.culture);
},
 
loadMetadata: function() {
var _this = this;
var cbid = '_bing_metadata_' + L.Util.stamp(this);
window[cbid] = function (meta) {
_this.meta = meta;
window[cbid] = undefined;
var e = document.getElementById(cbid);
e.parentNode.removeChild(e);
if (meta.errorDetails) {
alert("Got metadata" + meta.errorDetails);
return;
}
_this.initMetadata();
};
var url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/" + this.options.type + "?include=ImageryProviders&jsonp=" + cbid + "&key=" + this._key;
var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
script.id = cbid;
document.getElementsByTagName("head")[0].appendChild(script);
},
 
initMetadata: function() {
var r = this.meta.resourceSets[0].resources[0];
this.options.subdomains = r.imageUrlSubdomains;
this._url = r.imageUrl;
this._providers = [];
for (var i = 0; i < r.imageryProviders.length; i++) {
var p = r.imageryProviders[i];
for (var j = 0; j < p.coverageAreas.length; j++) {
var c = p.coverageAreas[j];
var coverage = {zoomMin: c.zoomMin, zoomMax: c.zoomMax, active: false};
var bounds = new L.LatLngBounds(
new L.LatLng(c.bbox[0]+0.01, c.bbox[1]+0.01),
new L.LatLng(c.bbox[2]-0.01, c.bbox[3]-0.01)
);
coverage.bounds = bounds;
coverage.attrib = p.attribution;
this._providers.push(coverage);
}
}
this._update();
},
 
_update: function() {
if (this._url == null || !this._map) return;
this._update_attribution();
L.TileLayer.prototype._update.apply(this, []);
},
 
_update_attribution: function() {
var bounds = this._map.getBounds();
var zoom = this._map.getZoom();
for (var i = 0; i < this._providers.length; i++) {
var p = this._providers[i];
if ((zoom <= p.zoomMax && zoom >= p.zoomMin) &&
bounds.intersects(p.bounds)) {
if (!p.active)
this._map.attributionControl.addAttribution(p.attrib);
p.active = true;
} else {
if (p.active)
this._map.attributionControl.removeAttribution(p.attrib);
p.active = false;
}
}
},
 
onRemove: function(map) {
for (var i = 0; i < this._providers.length; i++) {
var p = this._providers[i];
if (p.active) {
this._map.attributionControl.removeAttribution(p.attrib);
p.active = false;
}
}
L.TileLayer.prototype.onRemove.apply(this, [map]);
}
});