| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /* Copyright (c) 2006-2011 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.KaMap>
- * - <OpenLayers.Layer.Grid>
- */
- 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 - {<OpenLayers.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 (OpenLayers.Util.isArray(url)) {
- 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"
- });
|