1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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;
};
|