added option for Bing Layers (you still have to provide your own API
key, though!)
This commit is contained in:
parent
a53a34a261
commit
6186f3f27e
@ -10,3 +10,4 @@ Jean-Frederic
|
|||||||
Zbigniew Czernik
|
Zbigniew Czernik
|
||||||
Jonas Häggqvist
|
Jonas Häggqvist
|
||||||
Sabas
|
Sabas
|
||||||
|
Paul Spencer
|
@ -72,6 +72,18 @@ OSRM.DEFAULTS = {
|
|||||||
url:'http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png',
|
url:'http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/997/256/{z}/{x}/{y}.png',
|
||||||
attribution:'Map data © 2011 OpenStreetMap contributors, Imagery © 2011 CloudMade',
|
attribution:'Map data © 2011 OpenStreetMap contributors, Imagery © 2011 CloudMade',
|
||||||
options:{maxZoom: 18}
|
options:{maxZoom: 18}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
display_name: 'Bing Road',
|
||||||
|
apikey:'Ag_G9YGvTnWtqqSsQ5S4s44ddrRS7GmC7WO94Vo-NoL_p1TiWdwsYcIDirB3_5q-',
|
||||||
|
type:"Road",
|
||||||
|
bing:true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
display_name: 'Bing Aerial',
|
||||||
|
apikey:'Ag_G9YGvTnWtqqSsQ5S4s44ddrRS7GmC7WO94Vo-NoL_p1TiWdwsYcIDirB3_5q-',
|
||||||
|
type:"Aerial",
|
||||||
|
bing:true,
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
@ -36,9 +36,13 @@ init: function() {
|
|||||||
var tile_servers = OSRM.DEFAULTS.TILE_SERVERS;
|
var tile_servers = OSRM.DEFAULTS.TILE_SERVERS;
|
||||||
var base_maps = {};
|
var base_maps = {};
|
||||||
for(var i=0, size=tile_servers.length; i<size; i++) {
|
for(var i=0, size=tile_servers.length; i<size; i++) {
|
||||||
|
if( tile_servers[i].bing == true ) {
|
||||||
|
base_maps[ tile_servers[i].display_name ] = new L.TileLayer.Bing( tile_servers[i].apikey, tile_servers[i].type );
|
||||||
|
} else {
|
||||||
tile_servers[i].options.attribution = tile_servers[i].attribution;
|
tile_servers[i].options.attribution = tile_servers[i].attribution;
|
||||||
base_maps[ tile_servers[i].display_name ] = new L.TileLayer( tile_servers[i].url, tile_servers[i].options );
|
base_maps[ tile_servers[i].display_name ] = new L.TileLayer( tile_servers[i].url, tile_servers[i].options );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// setup map
|
// setup map
|
||||||
OSRM.G.map = new OSRM.MapView('map', {
|
OSRM.G.map = new OSRM.MapView('map', {
|
||||||
|
183
WebContent/leaflet/TileLayer.Bing.js
Normal file
183
WebContent/leaflet/TileLayer.Bing.js
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
/*
|
||||||
|
* Portions of this code and logic copied from OpenLayers and
|
||||||
|
* redistributed under the original Clear BSD license terms:
|
||||||
|
*
|
||||||
|
* http://trac.osgeo.org/openlayers/browser/license.txt
|
||||||
|
*
|
||||||
|
* Copyright 2005-2010 OpenLayers Contributors, released under
|
||||||
|
* the Clear BSD license. See authors.txt for a list of contributors.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* --
|
||||||
|
*
|
||||||
|
* Leaflet-specific modifications are released under the following
|
||||||
|
* terms:
|
||||||
|
*
|
||||||
|
* This program is free software. It comes without any warranty, to
|
||||||
|
* the extent permitted by applicable law. You can redistribute it
|
||||||
|
* and/or modify it under the terms of the Do What The Fuck You Want
|
||||||
|
* To Public License, Version 2, as published by Sam Hocevar. See
|
||||||
|
* http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
L.TileLayer.Bing = L.TileLayer.extend({
|
||||||
|
|
||||||
|
supportedTypes: ['Road', 'Aerial', 'AerialWithLabels'],
|
||||||
|
|
||||||
|
attributionTemplate: '<span style="display:inline-block">' +
|
||||||
|
'<a target="_blank" href="http://www.bing.com/maps/">' +
|
||||||
|
//'<img src="{logo}" /></a><br><span>{copyrights}' +
|
||||||
|
'</a><span>{copyrights}' +
|
||||||
|
'<a style="white-space: nowrap" target="_blank" '+
|
||||||
|
'href="http://www.microsoft.com/maps/product/terms.html">' +
|
||||||
|
'Terms of Use</a></span></span>',
|
||||||
|
|
||||||
|
initialize: function(/*String*/ apiKey, /*String*/ mapType, /*Object*/ options) {
|
||||||
|
|
||||||
|
this._apiKey = apiKey;
|
||||||
|
this._mapType = mapType;
|
||||||
|
|
||||||
|
this._loadMetadata();
|
||||||
|
|
||||||
|
L.Util.setOptions(this, options);
|
||||||
|
},
|
||||||
|
|
||||||
|
_loadMetadata: function() {
|
||||||
|
this._callbackId = "_l_tilelayer_bing_" + (L.TileLayer.Bing._callbackId++);
|
||||||
|
var that = this;
|
||||||
|
window[this._callbackId] = function() {
|
||||||
|
L.TileLayer.Bing.processMetadata.apply(that, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
var params = {
|
||||||
|
key: this._apiKey,
|
||||||
|
jsonp: this._callbackId,
|
||||||
|
include: 'ImageryProviders'
|
||||||
|
},
|
||||||
|
url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/" +
|
||||||
|
this._mapType + L.Util.getParamString(params),
|
||||||
|
script = document.createElement("script");
|
||||||
|
|
||||||
|
script.type = "text/javascript";
|
||||||
|
script.src = url;
|
||||||
|
script.id = this._callbackId;
|
||||||
|
document.getElementsByTagName("head")[0].appendChild(script);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onMetadataLoaded: function() {},
|
||||||
|
|
||||||
|
onAdd: function(map, insertAtTheBottom) {
|
||||||
|
if (!this.metadata) {
|
||||||
|
this._onMetadataLoaded = L.Util.bind(function() {
|
||||||
|
L.TileLayer.prototype.onAdd.call(this, map, insertAtTheBottom);
|
||||||
|
map.on('moveend', this._updateAttribution, this);
|
||||||
|
this._updateAttribution();
|
||||||
|
}, this);
|
||||||
|
} else {
|
||||||
|
L.TileLayer.prototype.onAdd.call(this, map, insertAtTheBottom);
|
||||||
|
map.on('moveend', this._updateAttribution, this);
|
||||||
|
this._updateAttribution();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
onRemove: function(map) {
|
||||||
|
if (this._map.attributionControl) {
|
||||||
|
this._map.attributionControl.removeAttribution(this.attribution);
|
||||||
|
}
|
||||||
|
this._map.off('moveend', this._updateAttribution, this);
|
||||||
|
L.TileLayer.prototype.onRemove.call(this, map);
|
||||||
|
},
|
||||||
|
|
||||||
|
getTileUrl: function(xy, z) {
|
||||||
|
var subdomains = this.options.subdomains,
|
||||||
|
quadDigits = [],
|
||||||
|
i = z,
|
||||||
|
digit,
|
||||||
|
mask,
|
||||||
|
quadKey;
|
||||||
|
// borrowed directly from OpenLayers
|
||||||
|
for (; i > 0; --i) {
|
||||||
|
digit = '0';
|
||||||
|
mask = 1 << (i - 1);
|
||||||
|
if ((xy.x & mask) != 0) {
|
||||||
|
digit++;
|
||||||
|
}
|
||||||
|
if ((xy.y & mask) != 0) {
|
||||||
|
digit++;
|
||||||
|
digit++;
|
||||||
|
}
|
||||||
|
quadDigits.push(digit);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._url
|
||||||
|
.replace('{subdomain}', subdomains[(xy.x + xy.y) % subdomains.length])
|
||||||
|
.replace('{quadkey}', quadDigits.join(""));
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateAttribution: function() {
|
||||||
|
if (this._map.attributionControl) {
|
||||||
|
var metadata = this.metadata;
|
||||||
|
var res = metadata.resourceSets[0].resources[0];
|
||||||
|
var bounds = this._map.getBounds();
|
||||||
|
var providers = res.imageryProviders, zoom = this._map.getZoom() + 1,
|
||||||
|
copyrights = "", provider, i, ii, j, jj, bbox, coverage;
|
||||||
|
for (i=0,ii=providers.length; i<ii; ++i) {
|
||||||
|
provider = providers[i];
|
||||||
|
for (j=0,jj=provider.coverageAreas.length; j<jj; ++j) {
|
||||||
|
coverage = provider.coverageAreas[j];
|
||||||
|
if (zoom <= coverage.zoomMax && zoom >= coverage.zoomMin && coverage.bbox.intersects(bounds)) {
|
||||||
|
copyrights += provider.attribution + " ";
|
||||||
|
j = jj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._map.attributionControl.removeAttribution(this.attribution);
|
||||||
|
this._map.attributionControl._attributions = {};
|
||||||
|
this._map.attributionControl._update();
|
||||||
|
this.attribution = this.attributionTemplate
|
||||||
|
.replace('{logo}', metadata.brandLogoUri)
|
||||||
|
.replace('{copyrights}', copyrights);
|
||||||
|
this._map.attributionControl.addAttribution(this.attribution);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
L.TileLayer.Bing._callbackId = 0;
|
||||||
|
|
||||||
|
L.TileLayer.Bing.processMetadata = function(metadata) {
|
||||||
|
if (metadata.authenticationResultCode != 'ValidCredentials') {
|
||||||
|
throw "Invalid Bing Maps API Key"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!metadata.resourceSets.length || !metadata.resourceSets[0].resources.length) {
|
||||||
|
throw "No resources returned, perhaps " + this._mapType + " is an invalid map type?";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (metadata.statusCode != 200) {
|
||||||
|
throw "Bing Maps API request failed with status code " + metadata.statusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.metadata = metadata;
|
||||||
|
var res = metadata.resourceSets[0].resources[0],
|
||||||
|
providers = res.imageryProviders,
|
||||||
|
i = 0,
|
||||||
|
j,
|
||||||
|
provider,
|
||||||
|
bbox,
|
||||||
|
script = document.getElementById(this._callbackId);
|
||||||
|
|
||||||
|
for (; i<providers.length; i++) {
|
||||||
|
provider = providers[i];
|
||||||
|
for (j=0; j<provider.coverageAreas.length; j++) {
|
||||||
|
bbox = provider.coverageAreas[j].bbox;
|
||||||
|
provider.coverageAreas[j].bbox = new L.LatLngBounds(new L.LatLng(bbox[0],bbox[1],true),new L.LatLng(bbox[2],bbox[3], true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this._url = res.imageUrl.replace('{culture}','en-US');
|
||||||
|
this.options.subdomains = [].concat(res.imageUrlSubdomains);
|
||||||
|
script.parentNode.removeChild(script);
|
||||||
|
window[this._callbackId] = undefined; // cannot delete from window in IE
|
||||||
|
delete this._callbackId;
|
||||||
|
this._onMetadataLoaded();
|
||||||
|
}
|
@ -36,6 +36,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
|
|
||||||
<!-- scripts -->
|
<!-- scripts -->
|
||||||
<script src="leaflet/leaflet-src.js" type="text/javascript"></script>
|
<script src="leaflet/leaflet-src.js" type="text/javascript"></script>
|
||||||
|
<script src="leaflet/TileLayer.Bing.js" type="text/javascript"></script>
|
||||||
<script src="base/leaflet/L.Bugfixes.js" type="text/javascript"></script>
|
<script src="base/leaflet/L.Bugfixes.js" type="text/javascript"></script>
|
||||||
<script src="base/leaflet/L.Control.QueryableLayers.js" type="text/javascript"></script>
|
<script src="base/leaflet/L.Control.QueryableLayers.js" type="text/javascript"></script>
|
||||||
<script src="base/leaflet/L.DashedPolyline.js" type="text/javascript"></script>
|
<script src="base/leaflet/L.DashedPolyline.js" type="text/javascript"></script>
|
||||||
|
@ -38,6 +38,7 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
|||||||
<!-- scripts -->
|
<!-- scripts -->
|
||||||
<script src="printing.js" type="text/javascript"></script>
|
<script src="printing.js" type="text/javascript"></script>
|
||||||
<script src="../leaflet/leaflet-src.js" type="text/javascript"></script>
|
<script src="../leaflet/leaflet-src.js" type="text/javascript"></script>
|
||||||
|
<script src="../leaflet/TileLayer.Bing.js" type="text/javascript"></script>
|
||||||
<script src="../base/leaflet/L.DashedPolyline.js" type="text/javascript"></script>
|
<script src="../base/leaflet/L.DashedPolyline.js" type="text/javascript"></script>
|
||||||
<script src="../base/leaflet/L.MouseMarker.js" type="text/javascript"></script>
|
<script src="../base/leaflet/L.MouseMarker.js" type="text/javascript"></script>
|
||||||
<script src="../base/leaflet/L.SwitchableIcon.js" type="text/javascript"></script>
|
<script src="../base/leaflet/L.SwitchableIcon.js" type="text/javascript"></script>
|
||||||
|
@ -53,7 +53,9 @@ OSRM.prefetchIcons = function(images_list) {
|
|||||||
// function to initialize a map in the new window
|
// function to initialize a map in the new window
|
||||||
OSRM.drawMap = function(tile_server, bounds) {
|
OSRM.drawMap = function(tile_server, bounds) {
|
||||||
// setup map
|
// setup map
|
||||||
var tile_layer = new L.TileLayer(tile_server.url, tile_server.options);
|
var tile_layer;
|
||||||
|
if( tile_server.bing ) tile_layer = new L.TileLayer.Bing(tile_server.apikey, tile_server.type);
|
||||||
|
else tile_layer = new L.TileLayer(tile_server.url, tile_server.options);
|
||||||
OSRM.G.map = new OSRM.MapView("overview-map", {
|
OSRM.G.map = new OSRM.MapView("overview-map", {
|
||||||
center: new L.LatLng(48.84, 10.10),
|
center: new L.LatLng(48.84, 10.10),
|
||||||
zoom: 13,
|
zoom: 13,
|
||||||
|
Loading…
Reference in New Issue
Block a user