Project

General

Profile

Download (6.2 KB) Statistics
| Branch: | Tag: | Revision:
1
/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for
2
 * full list of contributors). Published under the 2-clause BSD license.
3
 * See license.txt in the OpenLayers distribution or repository for the
4
 * full text of the license. */
5

    
6
/**
7
 * @requires OpenLayers/Format/XML.js
8
 * @requires OpenLayers/Format/Context.js
9
 */
10

    
11
/**
12
 * Class: OpenLayers.Format.WMC
13
 * Read and write Web Map Context documents.
14
 *
15
 * Inherits from:
16
 *  - <OpenLayers.Format.Context>
17
 */
18
OpenLayers.Format.WMC = OpenLayers.Class(OpenLayers.Format.Context, {
19
    
20
    /**
21
     * APIProperty: defaultVersion
22
     * {String} Version number to assume if none found.  Default is "1.1.0".
23
     */
24
    defaultVersion: "1.1.0",
25

    
26
    /**
27
     * Constructor: OpenLayers.Format.WMC
28
     * Create a new parser for Web Map Context documents.
29
     *
30
     * Parameters:
31
     * options - {Object} An optional object whose properties will be set on
32
     *     this instance.
33
     */
34
    
35
    /**
36
     * Method: layerToContext
37
     * Create a layer context object given a wms layer object.
38
     *
39
     * Parameters:
40
     * layer - {<OpenLayers.Layer.WMS>} The layer.
41
     *
42
     * Returns:
43
     * {Object} A layer context object.
44
     */
45
    layerToContext: function(layer) {
46
        var parser = this.getParser();
47
        var layerContext = {
48
            queryable: layer.queryable,
49
            visibility: layer.visibility,
50
            name: layer.params["LAYERS"],
51
            title: layer.name,
52
            "abstract": layer.metadata["abstract"],
53
            dataURL: layer.metadata.dataURL,
54
            metadataURL: layer.metadataURL,
55
            server: {
56
            version: layer.params["VERSION"],
57
                url: layer.url
58
            },
59
            maxExtent: layer.maxExtent,
60
            transparent: layer.params["TRANSPARENT"],
61
            numZoomLevels: layer.numZoomLevels,
62
            units: layer.units,
63
            isBaseLayer: layer.isBaseLayer,
64
            opacity: layer.opacity == 1 ? undefined : layer.opacity,
65
            displayInLayerSwitcher: layer.displayInLayerSwitcher,
66
            singleTile: layer.singleTile,
67
            tileSize: (layer.singleTile || !layer.tileSize) ? 
68
                undefined : {width: layer.tileSize.w, height: layer.tileSize.h},
69
            minScale : (layer.options.resolutions ||
70
                        layer.options.scales || 
71
                        layer.options.maxResolution || 
72
                        layer.options.minScale) ? 
73
                        layer.minScale : undefined,
74
            maxScale : (layer.options.resolutions ||
75
                        layer.options.scales || 
76
                        layer.options.minResolution || 
77
                        layer.options.maxScale) ? 
78
                        layer.maxScale : undefined,
79
            formats: [],
80
            styles: [],
81
            srs: layer.srs,
82
            dimensions: layer.dimensions
83
        };
84

    
85

    
86
        if (layer.metadata.servertitle) {
87
            layerContext.server.title = layer.metadata.servertitle;
88
        }
89

    
90
        if (layer.metadata.formats && layer.metadata.formats.length > 0) {
91
            for (var i=0, len=layer.metadata.formats.length; i<len; i++) {
92
                var format = layer.metadata.formats[i];
93
                layerContext.formats.push({
94
                    value: format.value,
95
                    current: (format.value == layer.params["FORMAT"])
96
                });
97
            }
98
        } else {
99
            layerContext.formats.push({
100
                value: layer.params["FORMAT"],
101
                current: true
102
            });
103
        }
104

    
105
        if (layer.metadata.styles && layer.metadata.styles.length > 0) {
106
            for (var i=0, len=layer.metadata.styles.length; i<len; i++) {
107
                var style = layer.metadata.styles[i];
108
                if ((style.href == layer.params["SLD"]) ||
109
                    (style.body == layer.params["SLD_BODY"]) ||
110
                    (style.name == layer.params["STYLES"])) {
111
                    style.current = true;
112
                } else {
113
                    style.current = false;
114
                }
115
                layerContext.styles.push(style);
116
            }
117
        } else {
118
            layerContext.styles.push({
119
                href: layer.params["SLD"],
120
                body: layer.params["SLD_BODY"],
121
                name: layer.params["STYLES"] || parser.defaultStyleName,
122
                title: parser.defaultStyleTitle,
123
                current: true
124
            });
125
        }
126

    
127
        return layerContext;
128
    },
129
    
130
    /**
131
     * Method: toContext
132
     * Create a context object free from layer given a map or a
133
     * context object.
134
     *
135
     * Parameters:
136
     * obj - {<OpenLayers.Map> | Object} The map or context.
137
     *
138
     * Returns:
139
     * {Object} A context object.
140
     */
141
    toContext: function(obj) {
142
        var context = {};
143
        var layers = obj.layers;
144
        if (obj.CLASS_NAME == "OpenLayers.Map") {
145
            var metadata = obj.metadata || {};
146
            context.size = obj.getSize();
147
            context.bounds = obj.getExtent();
148
            context.projection = obj.projection;
149
            context.title = obj.title;
150
            context.keywords = metadata.keywords;
151
            context["abstract"] = metadata["abstract"];
152
            context.logo = metadata.logo;
153
            context.descriptionURL = metadata.descriptionURL;
154
            context.contactInformation = metadata.contactInformation;
155
            context.maxExtent = obj.maxExtent;
156
        } else {
157
            // copy all obj properties except the "layers" property
158
            OpenLayers.Util.applyDefaults(context, obj);
159
            if (context.layers != undefined) {
160
                delete(context.layers);
161
            }
162
        }
163

    
164
        if (context.layersContext == undefined) {
165
            context.layersContext = [];
166
        }
167

    
168
        // let's convert layers into layersContext object (if any)
169
        if (layers != undefined && OpenLayers.Util.isArray(layers)) {
170
            for (var i=0, len=layers.length; i<len; i++) {
171
                var layer = layers[i];
172
                if (layer instanceof OpenLayers.Layer.WMS) {
173
                    context.layersContext.push(this.layerToContext(layer));
174
                }
175
            }
176
        }
177
        return context;
178
    },
179

    
180
    CLASS_NAME: "OpenLayers.Format.WMC" 
181

    
182
});
(32-32/41)