From 371542fb1eafb721fe44fe9fbed3f37f2aeafe5e Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Fri, 2 Apr 2021 19:02:10 +0100 Subject: Caveview enabled - local copy 3MB --- media/jslib/CaveView/lib/BingProvider.js | 129 +++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 media/jslib/CaveView/lib/BingProvider.js (limited to 'media/jslib/CaveView/lib/BingProvider.js') 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; + +}; + -- cgit v1.2.3