[OpenLayers-Dev] MapQuest Open map class
Martin Saturka
martin.saturka at sourcefabric.org
Wed Mar 16 07:34:17 EDT 2011
Hi,
could we have a class for MapQuest Open based maps, please? We use
them, having the class below, just that may be it could be at the OL
themselves.
OpenLayers.Layer.MapQuest = OpenLayers.Class(OpenLayers.Layer.OSMMod, {
name: "MapQuest",
attribution: "Data CC-By-SA by <a href='http://openstreetmap.org/'
target='_blank'>OpenStreetMap</a>. Rendered by <a
href='http://open.mapquest.co.uk/' target='_blank'>MapQuest</a>.",
sphericalMercator: true,
url: [
'http://otile1.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png',
'http://otile2.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png',
'http://otile3.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png',
'http://otile4.mqcdn.com/tiles/1.0.0/osm/${z}/${x}/${y}.png'
],
CLASS_NAME: "OpenLayers.Layer.MapQuest"
});
It can have a missed tile when an image is rendered too long by them
(OL tries to load that immediately after a fail event, without
possibility to wait for a while). We handle it with server
randomization then (it looks it helps), and going back to an OSM tile
when a problem. This way we can use the OSM tiles without making a
load on the OSM servers.
OpenLayers.Util.originalOnImageLoadError = OpenLayers.Util.onImageLoadError;
OpenLayers.Util.onImageLoadError = function() {
if (this.src.match(/^http:\/\/otile[1-4]\.mqcdn\.com\//)) {
if (!this._attempts) {this._attempts = 0;}
var mq_start = "http://otile" + Math.floor(1 + (4 *
Math.random())) + ".mqcdn.com/tiles/1.0.0/osm/";
if ((2 + this._attempts) > OpenLayers.IMAGE_RELOAD_ATTEMPTS)
{
var osm_start = "http://tile.openstreetmap.org/";
this.src = osm_start + this.src.substr(mq_start.length);
}
else
{
this.src = mq_start + this.src.substr(mq_start.length);
}
}
OpenLayers.Util.originalOnImageLoadError();
};
M.
--
Martin Saturka
Software Engineer, Sourcefabric
www.sourcefabric.org
More information about the Dev
mailing list