summaryrefslogtreecommitdiffstats
path: root/media/jslib/CaveView/lib/BingProvider.js
diff options
context:
space:
mode:
Diffstat (limited to 'media/jslib/CaveView/lib/BingProvider.js')
-rw-r--r--media/jslib/CaveView/lib/BingProvider.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/media/jslib/CaveView/lib/BingProvider.js b/media/jslib/CaveView/lib/BingProvider.js
new file mode 100644
index 0000000..f74fbf6
--- /dev/null
+++ b/media/jslib/CaveView/lib/BingProvider.js
@@ -0,0 +1,129 @@
+
+/*
+* BingProvider.js (c) Angus Sawyer, 2017.
+*/
+
+
+function BingProvider ( imagerySet ) {
+
+ this.urlTemplate = null;
+ this.subdomains = [];
+ this.subdomainIndex = 0;
+ this.subdomainCount = 0;
+
+ this.minZoom = null;
+ this.maxZoom = null;
+
+ var self = this;
+
+ var metadata;
+
+ var uriScheme = window.location.protocol.replace( ':' , '' );
+
+ var key = 'Ap8PRYAyAVcyoSPio8EaFtDEpYJVNwEA70GqYj31EXa6jkT_SduFHMKeHnvyS4D_';
+ var metaUrlTemplate = uriScheme + '://dev.virtualearth.net/REST/v1/Imagery/Metadata/{imagerySet}?include=imageryProviders&uriScheme={uriScheme}&key={key}';
+
+ var metaUrl = metaUrlTemplate.replace( '{key}', key ).replace( '{imagerySet}', imagerySet ).replace( '{uriScheme}', uriScheme );
+
+ var req = new XMLHttpRequest();
+
+ req.open( 'GET', metaUrl );
+
+ req.responseType = 'text';
+
+ req.addEventListener( 'load', _getTemplate );
+
+ req.send();
+
+ return;
+
+ function _getTemplate () {
+
+ metadata = JSON.parse( req.response );
+
+ var rss = metadata.resourceSets;
+
+ for ( var i = 0; i < rss.length; i++ ) {
+
+ var rs = rss[ i ].resources;
+
+ for ( var j = 0; j < rs.length; j++ ) {
+
+ var r = rs[ j ];
+
+ self.subdomains = r.imageUrlSubdomains;
+ self.urlTemplate = r.imageUrl;
+
+ self.minZoom = r.zoomMin;
+ self.maxZoom = r.zoomMax;
+
+ self.subdomainCount = self.subdomains.length;
+
+ return;
+
+ }
+
+ }
+
+ }
+
+}
+
+
+BingProvider.quadkey = function ( x, y, z ) {
+
+ var quadKey = [];
+
+ for ( var i = z; i > 0; i-- ) {
+
+ var digit = '0';
+ var mask = 1 << ( i - 1 );
+
+ if ( ( x & mask ) != 0 ) {
+
+ digit++;
+
+ }
+
+ if ( ( y & mask ) != 0 ) {
+
+ digit++;
+ digit++;
+
+ }
+
+ quadKey.push( digit );
+
+ }
+
+ return quadKey.join( '' );
+
+}
+
+BingProvider.prototype.getAttribution = function () {
+
+ var img = document.createElement( 'img' );
+
+ img.src = 'https://www.microsoft.com/maps/images/branding/bing_maps_logo_white_125px_27px.png';
+ img.classList.add( 'overlay-branding' );
+
+ return img;
+
+};
+
+BingProvider.prototype.getUrl = function ( x, y, z ) {
+
+ var urlTemplate = this.urlTemplate;
+
+ if ( urlTemplate === null ) return null;
+
+ var qk = BingProvider.quadkey( x, y, z );
+
+ thissubdomainIndex = ++this.ubdomainIndex % this.subdomainCount;
+
+ var url = urlTemplate.replace( '{subdomain}', this.subdomains[ this.subdomainIndex ] ).replace( '{quadkey}', qk );
+
+ return url;
+
+};
+