bing.com base map layers
This commit is contained in:
parent
6ea2e82637
commit
24581e5893
174
plugins/basemap-bing.user.js
Normal file
174
plugins/basemap-bing.user.js
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// ==UserScript==
|
||||||
|
// @id iitc-plugin-bing-maps
|
||||||
|
// @name IITC plugin: Bing maps
|
||||||
|
// @category Map Tiles
|
||||||
|
// @version 0.1.0.@@DATETIMEVERSION@@
|
||||||
|
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
|
||||||
|
// @updateURL @@UPDATEURL@@
|
||||||
|
// @downloadURL @@DOWNLOADURL@@
|
||||||
|
// @description [@@BUILDNAME@@-@@BUILDDATE@@] Add the maps.bing.com map layers (
|
||||||
|
// @include https://www.ingress.com/intel*
|
||||||
|
// @include http://www.ingress.com/intel*
|
||||||
|
// @match https://www.ingress.com/intel*
|
||||||
|
// @match http://www.ingress.com/intel*
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
@@PLUGINSTART@@
|
||||||
|
|
||||||
|
// PLUGIN START ////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
window.plugin.mapBing = function() {};
|
||||||
|
|
||||||
|
window.plugin.mapBing.setupBingLeaflet = function() {
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
// https://github.com/shramov/leaflet-plugins/blob/master/layer/tile/Bing.js
|
||||||
|
L.BingLayer = L.TileLayer.extend({
|
||||||
|
options: {
|
||||||
|
subdomains: [0, 1, 2, 3],
|
||||||
|
type: 'Aerial',
|
||||||
|
attribution: 'Bing',
|
||||||
|
culture: ''
|
||||||
|
},
|
||||||
|
|
||||||
|
initialize: function(key, options) {
|
||||||
|
L.Util.setOptions(this, options);
|
||||||
|
|
||||||
|
this._key = key;
|
||||||
|
this._url = null;
|
||||||
|
this.meta = {};
|
||||||
|
this.loadMetadata();
|
||||||
|
},
|
||||||
|
|
||||||
|
tile2quad: function(x, y, z) {
|
||||||
|
var quad = '';
|
||||||
|
for (var i = z; i > 0; i--) {
|
||||||
|
var digit = 0;
|
||||||
|
var mask = 1 << (i - 1);
|
||||||
|
if ((x & mask) != 0) digit += 1;
|
||||||
|
if ((y & mask) != 0) digit += 2;
|
||||||
|
quad = quad + digit;
|
||||||
|
}
|
||||||
|
return quad;
|
||||||
|
},
|
||||||
|
|
||||||
|
getTileUrl: function(p, z) {
|
||||||
|
var z = this._getZoomForUrl();
|
||||||
|
var subdomains = this.options.subdomains,
|
||||||
|
s = this.options.subdomains[Math.abs((p.x + p.y) % subdomains.length)];
|
||||||
|
return this._url.replace('{subdomain}', s)
|
||||||
|
.replace('{quadkey}', this.tile2quad(p.x, p.y, z))
|
||||||
|
.replace('{culture}', this.options.culture);
|
||||||
|
},
|
||||||
|
|
||||||
|
loadMetadata: function() {
|
||||||
|
// TODO? modify this to cache the metadata in - say - sessionStorage? localStorage?
|
||||||
|
var _this = this;
|
||||||
|
var cbid = '_bing_metadata_' + L.Util.stamp(this);
|
||||||
|
window[cbid] = function (meta) {
|
||||||
|
_this.meta = meta;
|
||||||
|
window[cbid] = undefined;
|
||||||
|
var e = document.getElementById(cbid);
|
||||||
|
e.parentNode.removeChild(e);
|
||||||
|
if (meta.errorDetails) {
|
||||||
|
alert("Got metadata" + meta.errorDetails);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_this.initMetadata();
|
||||||
|
};
|
||||||
|
var url = "//dev.virtualearth.net/REST/v1/Imagery/Metadata/" + this.options.type + "?include=ImageryProviders&jsonp=" + cbid + "&key=" + this._key;
|
||||||
|
var script = document.createElement("script");
|
||||||
|
script.type = "text/javascript";
|
||||||
|
script.src = url;
|
||||||
|
script.id = cbid;
|
||||||
|
document.getElementsByTagName("head")[0].appendChild(script);
|
||||||
|
},
|
||||||
|
|
||||||
|
initMetadata: function() {
|
||||||
|
var r = this.meta.resourceSets[0].resources[0];
|
||||||
|
this.options.subdomains = r.imageUrlSubdomains;
|
||||||
|
this._url = r.imageUrl;
|
||||||
|
this._providers = [];
|
||||||
|
for (var i = 0; i < r.imageryProviders.length; i++) {
|
||||||
|
var p = r.imageryProviders[i];
|
||||||
|
for (var j = 0; j < p.coverageAreas.length; j++) {
|
||||||
|
var c = p.coverageAreas[j];
|
||||||
|
var coverage = {zoomMin: c.zoomMin, zoomMax: c.zoomMax, active: false};
|
||||||
|
var bounds = new L.LatLngBounds(
|
||||||
|
new L.LatLng(c.bbox[0]+0.01, c.bbox[1]+0.01),
|
||||||
|
new L.LatLng(c.bbox[2]-0.01, c.bbox[3]-0.01)
|
||||||
|
);
|
||||||
|
coverage.bounds = bounds;
|
||||||
|
coverage.attrib = p.attribution;
|
||||||
|
this._providers.push(coverage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._update();
|
||||||
|
},
|
||||||
|
|
||||||
|
_update: function() {
|
||||||
|
if (this._url == null || !this._map) return;
|
||||||
|
this._update_attribution();
|
||||||
|
L.TileLayer.prototype._update.apply(this, []);
|
||||||
|
},
|
||||||
|
|
||||||
|
_update_attribution: function() {
|
||||||
|
var bounds = this._map.getBounds();
|
||||||
|
var zoom = this._map.getZoom();
|
||||||
|
for (var i = 0; i < this._providers.length; i++) {
|
||||||
|
var p = this._providers[i];
|
||||||
|
if ((zoom <= p.zoomMax && zoom >= p.zoomMin) &&
|
||||||
|
bounds.intersects(p.bounds)) {
|
||||||
|
if (!p.active)
|
||||||
|
this._map.attributionControl.addAttribution(p.attrib);
|
||||||
|
p.active = true;
|
||||||
|
} else {
|
||||||
|
if (p.active)
|
||||||
|
this._map.attributionControl.removeAttribution(p.attrib);
|
||||||
|
p.active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
onRemove: function(map) {
|
||||||
|
for (var i = 0; i < this._providers.length; i++) {
|
||||||
|
var p = this._providers[i];
|
||||||
|
if (p.active) {
|
||||||
|
this._map.attributionControl.removeAttribution(p.attrib);
|
||||||
|
p.active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
L.TileLayer.prototype.onRemove.apply(this, [map]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
window.plugin.mapBing.setup = function() {
|
||||||
|
window.plugin.mapBing.setupBingLeaflet();
|
||||||
|
|
||||||
|
//set this to your API key
|
||||||
|
var bingApiKey = 'ArR2hTa2C9cRQZT-RmgrDkfvh3PwEVRl0gB34OO4wJI7vQNElg3DDWvbo5lfUs3p';
|
||||||
|
|
||||||
|
var bingTypes = {
|
||||||
|
'Road': "Road",
|
||||||
|
'Aerial': "Aerial",
|
||||||
|
'AerialWithLabels': "Aerial with labels",
|
||||||
|
};
|
||||||
|
|
||||||
|
for (type in bingTypes) {
|
||||||
|
var name = bingTypes[type];
|
||||||
|
var bingMap = new L.BingLayer(bingApiKey, {type: type, maxZoom:20});
|
||||||
|
layerChooser.addBaseLayer(bingMap, 'Bing '+name);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
var setup = window.plugin.mapBing.setup;
|
||||||
|
|
||||||
|
// PLUGIN END //////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
@@PLUGINEND@@
|
Loading…
x
Reference in New Issue
Block a user