forked from expo/troggle
130 lines
2.4 KiB
JavaScript
130 lines
2.4 KiB
JavaScript
|
|
||
|
/*
|
||
|
* 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;
|
||
|
|
||
|
};
|
||
|
|