basemap cleanups

- updated Google, Bing and Yandex externals from https://github.com/shramov/leaflet-plugins
- also renamed Google file, removed internal hacks for INGRESS map type
- used external included file for Bing maps, instead of embedded in the plugin
- used Google map tile API to set the options for the INGRESS and 'Google Grey' map layers
This commit is contained in:
Jon Atkins
2013-11-22 20:46:03 +00:00
parent 34115cb04e
commit 85255f476b
7 changed files with 372 additions and 293 deletions

View File

@ -1,9 +1,8 @@
// ==UserScript==
// ==UserScript==
// @id iitc-plugin-bing-maps
// @name IITC plugin: Bing maps
// @category Map Tiles
// @version 0.1.0.@@DATETIMEVERSION@@
// @version 0.1.1.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
@ -22,127 +21,7 @@
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]);
}
});
//---------------------------------------------------------------------
@@INCLUDERAW:external/Bing.js@@
}

View File

@ -2,7 +2,7 @@
// @id iitc-plugin-basemap-gmaps-gray@jacob1123
// @name IITC plugin: Gray Google Roads
// @category Map Tiles
// @version 0.1.0.@@DATETIMEVERSION@@
// @version 0.1.1.@@DATETIMEVERSION@@
// @namespace https://github.com/jonatkins/ingress-intel-total-conversion
// @updateURL @@UPDATEURL@@
// @downloadURL @@DOWNLOADURL@@
@ -21,14 +21,29 @@
// use own namespace for plugin
window.plugin.grayGMaps = function() {};
window.plugin.grayGMaps.addLayer = function() {
var grayGMaps = new L.Google('ROADMAPS',{maxZoom:20});
grayGMaps._styles = [{featureType:"landscape.natural",stylers:[{visibility:"simplified"},{saturation:-100},{lightness:-80},{gamma:2.44}]},{featureType:"road",stylers:[{visibility:"simplified"},{color:"#bebebe"},{weight:.6}]},{featureType:"poi",stylers:[{saturation:-100},{visibility:"on"},{gamma:.14}]},{featureType:"water",stylers:[{color:"#32324f"}]},{featureType:"transit",stylers:[{visibility:"off"}]},{featureType:"road",elementType:"labels",stylers:[{visibility:"off"}]},{featureType:"poi",elementType:"labels",stylers:[{visibility:"off"}]},{featureType:"poi"},{featureType:"landscape.man_made",stylers:[{saturation:-100},{gamma:.13}]},{featureType:"water",elementType:"labels",stylers:[{visibility:"off"}]}]
var grayGMapsOptions = {
backgroundColor: '#0e3d4e', //or #dddddd ? - that's the Google tile layer default
styles: [
{featureType:"landscape.natural",stylers:[{visibility:"simplified"},{saturation:-100},{lightness:-80},{gamma:2.44}]},
{featureType:"road",stylers:[{visibility:"simplified"},{color:"#bebebe"},{weight:.6}]},
{featureType:"poi",stylers:[{saturation:-100},{visibility:"on"},{gamma:.14}]},
{featureType:"water",stylers:[{color:"#32324f"}]},
{featureType:"transit",stylers:[{visibility:"off"}]},
{featureType:"road",elementType:"labels",stylers:[{visibility:"off"}]},
{featureType:"poi",elementType:"labels",stylers:[{visibility:"off"}]},
{featureType:"poi"},
{featureType:"landscape.man_made",stylers:[{saturation:-100},{gamma:.13}]},
{featureType:"water",elementType:"labels",stylers:[{visibility:"off"}]}
]
};
layerChooser.addBaseLayer(grayGMaps, "Google Gray");
var grayGMaps = new L.Google('ROA#DMAP',{maxZoom:20, mapOptions: grayGMapsOptions});
layerChooser.addBaseLayer(grayGMaps, "Google Gray");
};
var setup = window.plugin.grayGMaps.addLayer;
// PLUGIN END //////////////////////////////////////////////////////////
@@PLUGINEND@@
@@PLUGINEND@@