diff --git a/servers/php/javascript/bing.js b/servers/php/javascript/bing.js deleted file mode 100644 index 9411f75..0000000 --- a/servers/php/javascript/bing.js +++ /dev/null @@ -1,124 +0,0 @@ -L.BingLayer = L.TileLayer.extend({ - options: { - subdomains: [0, 1, 2, 3], - type: 'Road', - 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) { - if (window.console) console.log("Leaflet Bing Plugin Error - Got metadata: " + meta.errorDetails); - return; - } - _this.initMetadata(); - }; - var url = document.location.protocol + "//dev.virtualearth.net/REST/v1/Imagery/Metadata/" + this.options.type + "?include=ImageryProviders&jsonp=" + cbid + - "&key=" + this._key + "&UriScheme=" + document.location.protocol.slice(0, -1); - 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 = []; - if (r.imageryProviders) { - 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) - this._map.attributionControl.addAttribution(p.attrib); - p.active = true; - } else { - if (p.active && this._map.attributionControl) - 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) { - this._map.attributionControl.removeAttribution(p.attrib); - p.active = false; - } - } - L.TileLayer.prototype.onRemove.apply(this, [map]); - } -}); - -L.bingLayer = function (key, options) { - return new L.BingLayer(key, options); -}; \ No newline at end of file diff --git a/servers/php/javascript/google.js b/servers/php/javascript/google.js deleted file mode 100644 index 7ed47d1..0000000 --- a/servers/php/javascript/google.js +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Google layer using Google Maps API - * https://github.com/shramov/leaflet-plugins - */ -//(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 || 'ROADMAP'; - }, - - 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('zoomanim', this._handleZoomAnim, this); - - //20px instead of 1em to avoid a slight overlap with google's attribution - map._controlCorners['bottomright'].style.marginBottom = "20px"; - - 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); - - this._map.off('zoomanim', this._handleZoomAnim, 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"; - } - - 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, - styles: this.options.mapOptions.styles, - backgroundColor: this.options.mapOptions.backgroundColor - }); - - var _this = this; - this._reposition = google.maps.event.addListenerOnce(map, "center_changed", - function() { _this.onReposition(); }); - this._google = map; - - google.maps.event.addListenerOnce(map, "idle", - function() { _this._checkZoomLevels(); }); - }, - - _checkZoomLevels: function() { - //setting the zoom level on the Google map may result in a different zoom level than the one requested - //(it won't go beyond the level for which they have data). - // verify and make sure the zoom levels on both Leaflet and Google maps are consistent - if (this._google.getZoom() !== this._map.getZoom()) { - //zoom levels are out of sync. Set the leaflet zoom level to match the google one - this._map.setZoom( this._google.getZoom() ); - } - }, - - _resetCallback: function(e) { - this._reset(e.hard); - }, - - _reset: function(clearOldContainer) { - this._initContainer(); - }, - - _update: function(e) { - if (!this._google) return; - this._resize(); - - var center = e && e.latlng ? e.latlng : this._map.getCenter(); - var _center = new google.maps.LatLng(center.lat, center.lng); - - this._google.setCenter(_center); - this._google.setZoom(this._map.getZoom()); - - this._checkZoomLevels(); - //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(); - }, - - - _handleZoomAnim: function (e) { - var center = e.center; - var _center = new google.maps.LatLng(center.lat, center.lng); - - this._google.setCenter(_center); - this._google.setZoom(e.zoom); - }, - - - 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) diff --git a/servers/php/javascript/leaflet-plugins/LICENSE b/servers/php/javascript/leaflet-plugins/LICENSE new file mode 100644 index 0000000..f371b7d --- /dev/null +++ b/servers/php/javascript/leaflet-plugins/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2011-2012, Pavel Shramov +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/servers/php/javascript/leaflet-plugins/bing.js b/servers/php/javascript/leaflet-plugins/bing.js new file mode 100644 index 0000000..9411f75 --- /dev/null +++ b/servers/php/javascript/leaflet-plugins/bing.js @@ -0,0 +1,124 @@ +L.BingLayer = L.TileLayer.extend({ + options: { + subdomains: [0, 1, 2, 3], + type: 'Road', + 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) { + if (window.console) console.log("Leaflet Bing Plugin Error - Got metadata: " + meta.errorDetails); + return; + } + _this.initMetadata(); + }; + var url = document.location.protocol + "//dev.virtualearth.net/REST/v1/Imagery/Metadata/" + this.options.type + "?include=ImageryProviders&jsonp=" + cbid + + "&key=" + this._key + "&UriScheme=" + document.location.protocol.slice(0, -1); + 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 = []; + if (r.imageryProviders) { + 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) + this._map.attributionControl.addAttribution(p.attrib); + p.active = true; + } else { + if (p.active && this._map.attributionControl) + 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) { + this._map.attributionControl.removeAttribution(p.attrib); + p.active = false; + } + } + L.TileLayer.prototype.onRemove.apply(this, [map]); + } +}); + +L.bingLayer = function (key, options) { + return new L.BingLayer(key, options); +}; \ No newline at end of file diff --git a/servers/php/javascript/leaflet-plugins/google.js b/servers/php/javascript/leaflet-plugins/google.js new file mode 100644 index 0000000..7ed47d1 --- /dev/null +++ b/servers/php/javascript/leaflet-plugins/google.js @@ -0,0 +1,198 @@ +/* + * Google layer using Google Maps API + * https://github.com/shramov/leaflet-plugins + */ +//(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 || 'ROADMAP'; + }, + + 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('zoomanim', this._handleZoomAnim, this); + + //20px instead of 1em to avoid a slight overlap with google's attribution + map._controlCorners['bottomright'].style.marginBottom = "20px"; + + 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); + + this._map.off('zoomanim', this._handleZoomAnim, 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"; + } + + 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, + styles: this.options.mapOptions.styles, + backgroundColor: this.options.mapOptions.backgroundColor + }); + + var _this = this; + this._reposition = google.maps.event.addListenerOnce(map, "center_changed", + function() { _this.onReposition(); }); + this._google = map; + + google.maps.event.addListenerOnce(map, "idle", + function() { _this._checkZoomLevels(); }); + }, + + _checkZoomLevels: function() { + //setting the zoom level on the Google map may result in a different zoom level than the one requested + //(it won't go beyond the level for which they have data). + // verify and make sure the zoom levels on both Leaflet and Google maps are consistent + if (this._google.getZoom() !== this._map.getZoom()) { + //zoom levels are out of sync. Set the leaflet zoom level to match the google one + this._map.setZoom( this._google.getZoom() ); + } + }, + + _resetCallback: function(e) { + this._reset(e.hard); + }, + + _reset: function(clearOldContainer) { + this._initContainer(); + }, + + _update: function(e) { + if (!this._google) return; + this._resize(); + + var center = e && e.latlng ? e.latlng : this._map.getCenter(); + var _center = new google.maps.LatLng(center.lat, center.lng); + + this._google.setCenter(_center); + this._google.setZoom(this._map.getZoom()); + + this._checkZoomLevels(); + //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(); + }, + + + _handleZoomAnim: function (e) { + var center = e.center; + var _center = new google.maps.LatLng(center.lat, center.lng); + + this._google.setCenter(_center); + this._google.setZoom(e.zoom); + }, + + + 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)