/* * 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; };