Source: BKGWebMap/Layer/WebAtlasDE.js

/*
 * Copyright (c) 2013 Bundesamt by Kartographie und Geodäsie.
 * See license.txt in the BKG WebMap distribution or repository for the
 * full text of the license.
 *
 * Author: Dirk Thalheim
 */

/**
 * @requires OpenLayers/Util.js
 * @requires BKGWebMap/Layer.js
 */

/**
 * @namespace BKGWebMap.Layer.WebAtlasDE
 */
BKGWebMap.Layer.WebAtlasDE = BKGWebMap.Layer.WebAtlasDE || {};

/**
 * Standard Zoomstufen für WMTS des WebAtlasDE
 * @type {Array}
 * @constant
 */
BKGWebMap.Layer.WebAtlasDE.RESOLUTIONS = [
    4891.96981025128, // AdV-Level 0 (1:17471320.7508974)
    2445.98490512564, // AdV-Level 1 (1:8735660.37544872)
    1222.99245256282, // AdV-Level 2 (1:4367830.18772436)
    611.49622628141, // AdV-Level 3 (1:2183915.09386218)
    305.748113140705, // AdV-Level 4 (1:1091957.54693109)
    152.874056570353, // AdV-Level 5 (1:545978.773465545)
    76.4370282851763, // AdV-Level 6 (1:272989,386732772)
    38.2185141425881, // AdV-Level 7 (1:136494,693366386)
    19.1092570712941, // AdV-Level 8 (1:68247,3466831931)
    9.55462853564703,  // AdV-Level 9 (1:34123,6733415966)
    4.77731426782352, // AdV-Level 10 (1:17061,8366707983)
    2.38865713391176, // AdV-Level 11 (1:8530,91833539914)
    1.19432856695588, // AdV-Level 12 (1:4265,45916769957)
    0.59716428347794 // AdV-Level 13 (1:2132,72958384978)
];

/**
 * Standartparameter für den WMS
 */
BKGWebMap.Layer.WebAtlasDE.WMS_DEFAULTS = {
    attribution: BKGWebMap.Layer.COPYRIGHT,
    isBaseLayer: true,
    params: { format: 'image/png', transparent: false }
};

/**
 * WMTS Ursprungskoordinaten.
 */
BKGWebMap.Layer.WebAtlasDE.WMTS_ORIGIN = {
    'EPSG:25832': new OpenLayers.LonLat(-46133.17, 6301219.54),
    'EPSG:3857': new OpenLayers.LonLat(-20037508.3428, 20037508.3428)
};

/**
 * WMTS TileMatrixSets
 */
BKGWebMap.Layer.WebAtlasDE.WMTS_MATRIX_SET = {
    'EPSG:25832': 'DE_EPSG_25832',
    'EPSG:3857': 'DE_EPSG_3857'
};

/**
 * Standartparameter für den WMTS
 */
BKGWebMap.Layer.WebAtlasDE.WMTS_DEFAULTS = {
    attribution: BKGWebMap.Layer.COPYRIGHT,
    isBaseLayer: true,
    transitionEffect: 'resize',
    style: 'default',
    format: 'image/png',
    requestEncoding: 'REST',
    tileSize: new OpenLayers.Size(256,256),
    serverResolutions: BKGWebMap.Layer.WebAtlasDE.RESOLUTIONS
};


// == basemap.de =======================================================================================================

/**
 * Factory-Funktion für WMS basemap.de Web Raster Farbe
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 */
BKGWebMap.Layer.FACTORIES['WMS.BASEMAPDE.FARBE'] = function(config, projection) {
    var defaults = OpenLayers.Util.extend(null, BKGWebMap.Layer.WebAtlasDE.WMS_DEFAULTS);
    defaults.name = 'basemap.de Web Raster Farbe';
    defaults.url = BKGWebMap.Util.getServiceUrl( 'wms_basemapde' );
    defaults.params.layers = 'de_basemapde_web_raster_farbe';

    return BKGWebMap.Layer.FACTORIES['WMS'](config, projection, defaults);
};

/**
 * Factory-Funktion für WMS basemap.de Web Raster Grau
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 */
BKGWebMap.Layer.FACTORIES['WMS.BASEMAPDE.GRAU'] = function(config, projection) {
    var defaults = OpenLayers.Util.extend(null, BKGWebMap.Layer.WebAtlasDE.WMS_DEFAULTS);
    defaults.name = 'basemap.de Web Raster Grau';
    defaults.url = BKGWebMap.Util.getServiceUrl( 'wms_basemapde' );
    defaults.params.layers = 'de_basemapde_web_raster_grau';

    return BKGWebMap.Layer.FACTORIES['WMS'](config, projection, defaults);
};

/**
 * Factory-Funktion für WMTS basemap.de Web Raster Farbe
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 */
BKGWebMap.Layer.FACTORIES['WMTS.BASEMAPDE.FARBE'] = function(config, projection) {
    var defaults = OpenLayers.Util.extend(null, BKGWebMap.Layer.WebAtlasDE.WMTS_DEFAULTS);
    defaults = OpenLayers.Util.extend(defaults, {
        name: 'basemap.de Web Raster Farbe',
        url: BKGWebMap.Util.getServiceUrl( 'wmts_basemapde', 'tile' ),
        layer: 'de_basemapde_web_raster_farbe',
        tileOrigin: BKGWebMap.Layer.WebAtlasDE.WMTS_ORIGIN[projection],
        matrixSet: BKGWebMap.Layer.WebAtlasDE.WMTS_MATRIX_SET[projection] + '_ADV',
        maxExtent: BKGWebMap.Util.getMaxExtent(projection, BKGWebMap.EXTENTS),
        legendURL: BKGWebMap.Util.getServiceUrl( 'wms_basemapde', '?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&&FORMAT=image/png&LAYER=de_basemapde_web_raster_farbe', true )
    });

    if(projection == 'EPSG:3857')
        defaults.serverResolutions= BKGWebMap.Layer.WebAtlasDE.RESOLUTIONS.slice(0,13);

    var wmtsConfig = OpenLayers.Util.extend(defaults, config);
    return BKGWebMap.Layer.FACTORIES['WMTS'](wmtsConfig, projection);
};

/**
 * Factory-Funktion für WMTS basemap.de Web Raster Grau
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 */
BKGWebMap.Layer.FACTORIES['WMTS.BASEMAPDE.GRAU'] = function(config, projection) {
    var defaults = OpenLayers.Util.extend(null, BKGWebMap.Layer.WebAtlasDE.WMTS_DEFAULTS);
    defaults = OpenLayers.Util.extend(defaults, {
        name: 'basemap.de Web Raster Grau',
        url: BKGWebMap.Util.getServiceUrl( 'wmts_basemapde', 'tile' ),
        layer: 'de_basemapde_web_raster_grau',
        tileOrigin: BKGWebMap.Layer.WebAtlasDE.WMTS_ORIGIN[projection],
        matrixSet: BKGWebMap.Layer.WebAtlasDE.WMTS_MATRIX_SET[projection] + '_ADV',
        maxExtent: BKGWebMap.Util.getMaxExtent(projection, BKGWebMap.EXTENTS),
        legendURL: BKGWebMap.Util.getServiceUrl( 'wms_basemapde', '?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&&FORMAT=image/png&LAYER=de_basemapde_web_raster_grau', true )
    });

    if(projection == 'EPSG:3857')
        defaults.serverResolutions= BKGWebMap.Layer.WebAtlasDE.RESOLUTIONS.slice(0,13);

    var wmtsConfig = OpenLayers.Util.extend(defaults, config);
    return BKGWebMap.Layer.FACTORIES['WMTS'](wmtsConfig, projection);
};


/**
 * Factory-Funktion für basemap.de Web Raster Farbe
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 */
BKGWebMap.Layer.FACTORIES['BASEMAPDE.FARBE'] = function(config, projection) {
    var isWMTS = projection === 'EPSG:25832' || projection === 'EPSG:3857';
    var factory = isWMTS ? 'WMTS.BASEMAPDE.FARBE' : 'WMS.BASEMAPDE.FARBE';
    return BKGWebMap.Layer.FACTORIES[factory](config, projection);
};

/**
 * Factory-Funktion für basemap.de Web Raster Grau
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 */
BKGWebMap.Layer.FACTORIES['BASEMAPDE.GRAU'] = function(config, projection) {
    var isWMTS = projection === 'EPSG:25832' || projection === 'EPSG:3857';
    var factory = isWMTS ? 'WMTS.BASEMAPDE.GRAU' : 'WMS.BASEMAPDE.GRAU';
    return BKGWebMap.Layer.FACTORIES[factory](config, projection);
};

// == WebAtlasDE (depreciated) =========================================================================================

/**
 * Factory-Funktion für WebAtlasDE
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WMS.WEBATLASDE.FARBE'] = BKGWebMap.Layer.FACTORIES['WMS.BASEMAPDE.FARBE'];

/**
 * Factory-Funktion für WebAtlasDE Graustufen
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WMS.WEBATLASDE.GRAU'] = BKGWebMap.Layer.FACTORIES['WMS.BASEMAPDE.GRAU'];

/**
 * Factory-Funktion für WebAtlasDE.light
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WMS.WEBATLASDE.LIGHT.FARBE']  = BKGWebMap.Layer.FACTORIES['WMS.BASEMAPDE.FARBE'];

/**
 * Factory-Funktion für WebAtlasDE.light Graustufen
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WMS.WEBATLASDE.LIGHT.GRAU'] = BKGWebMap.Layer.FACTORIES['WMS.BASEMAPDE.GRAU'];

/**
 * Factory-Funktion für WebAtlasDE
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WMTS.WEBATLASDE.FARBE'] = BKGWebMap.Layer.FACTORIES['WMTS.BASEMAPDE.FARBE'];

/**
 * Factory-Funktion für WebAtlasDE Graustufen
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WMTS.WEBATLASDE.GRAU'] = BKGWebMap.Layer.FACTORIES['WMTS.BASEMAPDE.GRAU'];

/**
 * Factory-Funktion für WebAtlasDE.light
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WMTS.WEBATLASDE.LIGHT.FARBE'] = BKGWebMap.Layer.FACTORIES['WMTS.BASEMAPDE.FARBE'];

/**
 * Factory-Funktion für WebAtlasDE.light Graustufen
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WMTS.WEBATLASDE.LIGHT.GRAU'] = BKGWebMap.Layer.FACTORIES['WMTS.BASEMAPDE.FARBE'];


/**
 * Factory-Funktion für WebAtlasDE
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WEBATLASDE.FARBE'] = BKGWebMap.Layer.FACTORIES['BASEMAPDE.FARBE'];

/**
 * Factory-Funktion für WebAtlasDE Graustufen
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WEBATLASDE.GRAU'] = BKGWebMap.Layer.FACTORIES['BASEMAPDE.GRAU'];

/**
 * Factory-Funktion für WebAtlasDE Light
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WEBATLASDE.LIGHT.FARBE'] = BKGWebMap.Layer.FACTORIES['BASEMAPDE.FARBE'];

/**
 * Factory-Funktion für WebAtlasDE Light Graustufen
 *
 * @param config
 * @param projection
 * @returns {OpenLayers.Layer.WMS}
 * @deprecated
 */
BKGWebMap.Layer.FACTORIES['WEBATLASDE.LIGHT.GRAU'] = BKGWebMap.Layer.FACTORIES['BASEMAPDE.GRAU'];