[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