/** * Namespace: Util.OSM */ OpenLayers.Util.OSM = {}; /** * Constant: MISSING_TILE_URL * {String} URL of image to display for missing tiles */ OpenLayers.Util.OSM.MISSING_TILE_URL = "http://openstreetmap.org/openlayers/img/404.png"; /** * Property: originalOnImageLoadError * {Function} Original onImageLoadError function. */ OpenLayers.Util.OSM.originalOnImageLoadError = OpenLayers.Util.onImageLoadError; /** * Function: onImageLoadError */ OpenLayers.Util.onImageLoadError = function() { if (this.src.match(/^http:\/\/[abc]\.[a-z]+\.openstreetmap\.org\//)) { this.src = OpenLayers.Util.OSM.MISSING_TILE_URL; } else if (this.src.match(/^http:\/\/[def]\.tah\.openstreetmap\.org\//)) { // do nothing - this layer is transparent } else { OpenLayers.Util.OSM.originalOnImageLoadError; } }; /** * @requires OpenLayers/Layer/TMS.js * * Class: OpenLayers.Layer.OSM * * Inherits from: * - */ OpenLayers.Layer.OSM = OpenLayers.Class(OpenLayers.Layer.TMS, { /** * Constructor: OpenLayers.Layer.OSM * * Parameters: * name - {String} * url - {String} * options - {Object} Hashtable of extra options to tag onto the layer */ initialize: function(name, url, options) { options = OpenLayers.Util.extend({ attribution: "Data by OpenStreetMap", maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34), maxResolution: 156543.0339, units: "m", projection: "EPSG:900913", transitionEffect: "resize" }, options); var newArguments = [name, url, options]; OpenLayers.Layer.TMS.prototype.initialize.apply(this, newArguments); }, /** * Method: getUrl * * Parameters: * bounds - {} * * Returns: * {String} A string with the layer's url and parameters and also the * passed-in bounds and appropriate tile size specified as * parameters */ getURL: function (bounds) { var res = this.map.getResolution(); var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w)); var y = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h)); var z = this.map.getZoom(); var limit = Math.pow(2, z); if (y < 0 || y >= limit) { return OpenLayers.Util.OSM.MISSING_TILE_URL; } else { x = ((x % limit) + limit) % limit; var url = this.url; var path = z + "/" + x + "/" + y + ".png"; if (url instanceof Array) { url = this.selectUrl(path, url); } return url + path; } }, CLASS_NAME: "OpenLayers.Layer.OSM" }); /** * Class: OpenLayers.Layer.OSM.Mapnik * * Inherits from: * - */ OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, { /** * Constructor: OpenLayers.Layer.OSM.Mapnik * * Parameters: * name - {String} * options - {Object} Hashtable of extra options to tag onto the layer */ initialize: function(name, options) { var url = [ "http://a.tile.openstreetmap.org/", "http://b.tile.openstreetmap.org/", "http://c.tile.openstreetmap.org/" ]; options = OpenLayers.Util.extend({ numZoomLevels: 19 }, options); var newArguments = [name, url, options]; OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); }, CLASS_NAME: "OpenLayers.Layer.OSM.Mapnik" }); /** * Class: OpenLayers.Layer.OSM.Osmarender * * Inherits from: * - */ OpenLayers.Layer.OSM.Osmarender = OpenLayers.Class(OpenLayers.Layer.OSM, { /** * Constructor: OpenLayers.Layer.OSM.Osmarender * * Parameters: * name - {String} * options - {Object} Hashtable of extra options to tag onto the layer */ initialize: function(name, options) { var url = [ "http://a.tah.openstreetmap.org/Tiles/tile/", "http://b.tah.openstreetmap.org/Tiles/tile/", "http://c.tah.openstreetmap.org/Tiles/tile/" ]; options = OpenLayers.Util.extend({ numZoomLevels: 18 }, options); var newArguments = [name, url, options]; OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); }, CLASS_NAME: "OpenLayers.Layer.OSM.Osmarender" }); /** * Class: OpenLayers.Layer.OSM.CycleMap * * Inherits from: * - */ OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, { /** * Constructor: OpenLayers.Layer.OSM.CycleMap * * Parameters: * name - {String} * options - {Object} Hashtable of extra options to tag onto the layer */ initialize: function(name, options) { var url = [ "http://a.andy.sandbox.cloudmade.com/tiles/cycle/", "http://b.andy.sandbox.cloudmade.com/tiles/cycle/", "http://c.andy.sandbox.cloudmade.com/tiles/cycle/" ]; options = OpenLayers.Util.extend({ numZoomLevels: 18 }, options); var newArguments = [name, url, options]; OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); }, CLASS_NAME: "OpenLayers.Layer.OSM.CycleMap" }); /** * Class: OpenLayers.Layer.OSM.Maplint * * Inherits from: * - */ OpenLayers.Layer.OSM.Maplint = OpenLayers.Class(OpenLayers.Layer.OSM, { /** * Constructor: OpenLayers.Layer.OSM.Maplint * * Parameters: * name - {String} * options - {Object} Hashtable of extra options to tag onto the layer */ initialize: function(name, options) { var url = [ "http://d.tah.openstreetmap.org/Tiles/maplint/", "http://e.tah.openstreetmap.org/Tiles/maplint/", "http://f.tah.openstreetmap.org/Tiles/maplint/" ]; options = OpenLayers.Util.extend({ numZoomLevels: 18, isBaseLayer: false, visibility: false }, options); var newArguments = [name, url, options]; OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments); }, CLASS_NAME: "OpenLayers.Layer.OSM.Maplint" });