/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for * full list of contributors). Published under the Clear BSD license. * See http://svn.openlayers.org/trunk/openlayers/license.txt for the * full text of the license. */ /** * @requires OpenLayers/Layer/Grid.js * @requires OpenLayers/Layer/KaMap.js */ /** * Class: OpenLayers.Layer.KaMapCache * * This class is designed to talk directly to a web-accessible ka-Map * cache generated by the precache2.php script. * * To create a a new KaMapCache layer, you must indicate also the "i" parameter * (that will be used to calculate the file extension), and another special * parameter, object names "metaTileSize", with "h" (height) and "w" (width) * properties. * * // Create a new kaMapCache layer. * var kamap_base = new OpenLayers.Layer.KaMapCache( * "Satellite", * "http://www.example.org/web/acessible/cache", * {g: "satellite", map: "world", i: 'png24', metaTileSize: {w: 5, h: 5} } * ); * * // Create an kaMapCache overlay layer (using "isBaseLayer: false"). * // Forces the output to be a "gif", using the "i" parameter. * var kamap_overlay = new OpenLayers.Layer.KaMapCache( * "Streets", * "http://www.example.org/web/acessible/cache", * {g: "streets", map: "world", i: "gif", metaTileSize: {w: 5, h: 5} }, * {isBaseLayer: false} * ); * * The cache URLs must look like: * var/cache/World/50000/Group_Name/def/t-440320/l20480 * * This means that the cache generated via tile.php will *not* work with * this class, and should instead use the KaMap layer. * * More information is available in Ticket #1518. * * Inherits from: * - * - */ OpenLayers.Layer.KaMapCache = OpenLayers.Class(OpenLayers.Layer.KaMap, { /** * Constant: IMAGE_EXTENSIONS * {Object} Simple hash map to convert format to extension. */ IMAGE_EXTENSIONS: { 'jpeg': 'jpg', 'gif' : 'gif', 'png' : 'png', 'png8' : 'png', 'png24' : 'png', 'dithered' : 'png' }, /** * Constant: DEFAULT_FORMAT * {Object} Simple hash map to convert format to extension. */ DEFAULT_FORMAT: 'jpeg', /** * Constructor: OpenLayers.Layer.KaMapCache * * Parameters: * name - {String} * url - {String} * params - {Object} Parameters to be sent to the HTTP server in the * query string for the tile. The format can be set via the 'i' * parameter (defaults to jpg) , and the map should be set via * the 'map' parameter. It has been reported that ka-Map may behave * inconsistently if your format parameter does not match the format * parameter configured in your config.php. (See ticket #327 for more * information.) * options - {Object} Additional options for the layer. Any of the * APIProperties listed on this layer, and any layer types it * extends, can be overridden through the options parameter. */ initialize: function(name, url, params, options) { OpenLayers.Layer.KaMap.prototype.initialize.apply(this, arguments); this.extension = this.IMAGE_EXTENSIONS[this.params.i.toLowerCase() || DEFAULT_FORMAT]; }, /** * 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) { bounds = this.adjustBounds(bounds); var mapRes = this.map.getResolution(); var scale = Math.round((this.map.getScale() * 10000)) / 10000; var pX = Math.round(bounds.left / mapRes); var pY = -Math.round(bounds.top / mapRes); var metaX = Math.floor(pX / this.tileSize.w / this.params.metaTileSize.w) * this.tileSize.w * this.params.metaTileSize.w; var metaY = Math.floor(pY / this.tileSize.h / this.params.metaTileSize.h) * this.tileSize.h * this.params.metaTileSize.h; // if url is not a string, it should be an array of strings, // in which case we will deterministically select one of them in // order to evenly distribute requests to different urls. // var url = this.url; if (url instanceof Array) { url = this.selectUrl(paramsString, url); } var components = [ url, "/", this.params.map, "/", scale, "/", this.params.g.replace(/\s/g, '_'), "/def/t", metaY, "/l", metaX, "/t", pY, "l", pX, ".", this.extension ]; return components.join(""); }, CLASS_NAME: "OpenLayers.Layer.KaMapCache" });