Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.remoteclient / src / main / java / org / gvsig / remoteclient / wcs / WCSCoverage.java @ 40559

History | View | Annotate | Download (9.64 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
/**
25
 *
26
 */
27
package org.gvsig.remoteclient.wcs;
28

    
29
import java.io.IOException;
30
import java.util.ArrayList;
31
import java.util.Hashtable;
32

    
33
import org.kxml2.io.KXmlParser;
34
import org.xmlpull.v1.XmlPullParserException;
35

    
36
import org.gvsig.remoteclient.ILayer;
37
import org.gvsig.remoteclient.utils.BoundaryBox;
38
import org.gvsig.remoteclient.utils.CapabilitiesTags;
39

    
40
/**
41
 * Describes a coverage in a WCS server.
42
 *
43
 * @author jaume dominguez faus - jaume.domingue@iver.es
44
 *
45
 */
46
public abstract class WCSCoverage implements ILayer{
47
        public static final String SEPARATOR = " +"; // separator used to split list of values, usually is just a space
48
    private        String                        name;
49
    private String                        title;
50
    private String                        _abstract;
51
    private Hashtable                bBoxes = new Hashtable();
52
        private BoundaryBox                lonLatBbox;
53
        public  RectifiedGrid        rg;
54
        private ArrayList                 timePositions = new ArrayList();
55
        public  String                         timePeriod;
56
        private String                         rangeSetName;
57
        private String                         rangeSetLabel;
58
        public  Hashtable                 axisPool = new Hashtable();
59
        private String                         nativeSRS;
60
        private ArrayList                 supportedSRSs = new ArrayList();
61
        private ArrayList                interpolationMethods;
62
        private String                         nativeFormat;
63
        private ArrayList                 formats = new ArrayList();
64

    
65
        public ArrayList getTimePositions() {
66
                return timePositions;
67
        }
68

    
69
        public void addTimePosition(String timeExpr) {
70
                if (timePositions == null)
71
                        timePositions = new ArrayList();
72
                timePositions.add(timeExpr);
73
        }
74

    
75
        public ArrayList getFormats() {
76
                return formats;
77
        }
78

    
79
        public void addFormat(String format) {
80
                formats.add(format);
81
        }
82

    
83
    public void setNativeFormat(String nativeFormat) {
84
            this.nativeFormat = nativeFormat;
85
    }
86

    
87
    public String getNativeFormat() {
88
            return nativeFormat;
89
    }
90

    
91
        public String getNativeSRS() {
92
                return nativeSRS;
93
        }
94

    
95
        public void setNativeSRS(String nativeSRS) {
96
                this.nativeSRS = nativeSRS;
97
        }
98

    
99
        public ArrayList getSRSs() {
100
                return supportedSRSs;
101
        }
102

    
103
        public void addSRSs(String srs) {
104
                supportedSRSs.add(srs);
105
        }
106

    
107
        public String getRangeSetLabel() {
108
                return rangeSetLabel;
109
        }
110

    
111
        public void setRangeSetLabel(String rangeSetLabel) {
112
                this.rangeSetLabel = rangeSetLabel;
113
        }
114

    
115
        public String getRangeSetName() {
116
                return rangeSetName;
117
        }
118

    
119
        public void setRangeSetName(String rangeSetName) {
120
                this.rangeSetName = rangeSetName;
121
        }
122

    
123
        /* (non-Javadoc)
124
     * @see org.gvsig.remoteClient.ILayer#getName()
125
     */
126
    public String getName() {
127
        return name;
128
    }
129

    
130
    /* (non-Javadoc)
131
     * @see org.gvsig.remoteClient.ILayer#setName(java.lang.String)
132
     */
133
    public void setName(String _name) {
134
        name = _name;
135
    }
136

    
137
    /* (non-Javadoc)
138
     * @see org.gvsig.remoteClient.ILayer#setTitle(java.lang.String)
139
     */
140
    public void setTitle(String _title) {
141
        title = _title;
142
    }
143

    
144
    /* (non-Javadoc)
145
     * @see org.gvsig.remoteClient.ILayer#getTitle()
146
     */
147
    public String getTitle() {
148
        return title;
149
    }
150

    
151
    /* (non-Javadoc)
152
     * @see org.gvsig.remoteClient.ILayer#getAbstract()
153
     */
154
    public String getAbstract() {
155
        return _abstract;
156
    }
157

    
158
    /* (non-Javadoc)
159
     * @see org.gvsig.remoteClient.ILayer#setAbstract(java.lang.String)
160
     */
161
    public void setAbstract(String _abstract) {
162
     this._abstract = _abstract;
163
    }
164

    
165
    public void addBBox(BoundaryBox bBox) {
166
            bBoxes.put(bBox.getSrs(), bBox);
167
    }
168

    
169
    public ArrayList getAllSrs() {
170
            ArrayList mySrs = new ArrayList();
171
            mySrs.addAll(supportedSRSs);
172
            if (!mySrs.contains(nativeSRS))
173
                    mySrs.add(nativeSRS);
174
            return mySrs;
175
    }
176
    /**
177
     * <p>returns the bbox with that id in the Bboxes vector</p>
178
     * @param id
179
     */
180
    public BoundaryBox getBbox(String id) {
181
            if ((id.compareToIgnoreCase( CapabilitiesTags.EPSG_4326 )==0)
182
                    ||(id.compareToIgnoreCase( CapabilitiesTags.CRS_84)==0))
183
            {
184
                    if (lonLatBbox != null)
185
                    return lonLatBbox;
186
            }
187

    
188
        return (BoundaryBox)bBoxes.get(id);
189
    }
190

    
191
    public BoundaryBox getLatLonBox() {
192
        return lonLatBbox;
193
    }
194

    
195
    public void setLonLatBox(BoundaryBox box) {
196
        lonLatBbox = box;
197
    }
198

    
199
    public void addInterpolationMethod(String method) {
200
            if (interpolationMethods==null) interpolationMethods = new ArrayList();
201
            interpolationMethods.add(method);
202
    }
203

    
204
    public ArrayList getInterpolationMethods() {
205
            return interpolationMethods;
206
    }
207
    /**
208
     * Parses the fragment of the XML document that describes this layer (or coverage)
209
     * @param parser
210
     * @throws IOException
211
     * @throws XmlPullParserException
212
     */
213
    public abstract void parse(KXmlParser parser) throws XmlPullParserException, IOException;
214

    
215
    /**
216
     * Gets the RectifiedGrid structure
217
     * @return
218
     */
219
    public RectifiedGrid getRectifiedGrid() {
220
            return rg;
221
    }
222
    
223
    /**
224
     * Inner class describing the Rectified Grid of this coverage.
225
     *
226
     * @author jaume dominguez faus - jaume.dominguez@iver.es
227
     */
228
    public class RectifiedGrid {
229
            private int               dimensions;
230
            private String[]   axisNames;
231
            private int[][]    lowGridEnvelopLimits;
232
            private int[][]    highGridEnvelopLimits;
233
            private double[]   origins;
234
            private double[][] offsetVector;
235

    
236
                public RectifiedGrid(int dimensions) {
237
                        this.dimensions = dimensions;
238
                }
239

    
240
                public void addAxisName(String axisName) {
241
                        if (axisNames == null) {
242
                                axisNames = new String[1];
243
                                axisNames[0] = axisName;
244
                        } else {
245
                                String[] aux = axisNames;
246
                                axisNames = new String[axisNames.length+1];
247
                                for (int i = 0; i < aux.length; i++) {
248
                                        axisNames[i] = aux[i];
249
                                }
250
                                axisNames[axisNames.length-1] = axisName;
251
                        }
252
                }
253

    
254
                public String[] getAxisNames() {
255
                        return axisNames;
256
                }
257

    
258
                public void addLowGridEnvelopLimit(int[] lowLimit) {
259
                        if (lowGridEnvelopLimits == null) {
260
                                lowGridEnvelopLimits = new int[1][1];
261
                                lowGridEnvelopLimits[0] = lowLimit;
262
                        } else {
263
                                int[][] aux = lowGridEnvelopLimits;
264
                                lowGridEnvelopLimits = new int[lowGridEnvelopLimits.length+1][1];
265
                                for (int i = 0; i < aux.length; i++) {
266
                                        lowGridEnvelopLimits[i] = aux[i];
267
                                }
268
                                lowGridEnvelopLimits[lowGridEnvelopLimits.length-1] = lowLimit;
269
                        }
270
                }
271

    
272
                public int[][] getLowGridEnvelopLimits() {
273
                        return lowGridEnvelopLimits;
274
                }
275

    
276
                public void addHighGridEnvelopLimit(int[] highLimit) {
277
                        if (highGridEnvelopLimits == null) {
278
                                highGridEnvelopLimits = new int[1][1];
279
                                highGridEnvelopLimits[0] = highLimit;
280
                        } else {
281
                                int[][] aux = highGridEnvelopLimits;
282
                                highGridEnvelopLimits = new int[highGridEnvelopLimits.length+1][1];
283
                                for (int i = 0; i < aux.length; i++) {
284
                                        highGridEnvelopLimits[i] = aux[i];
285
                                }
286
                                highGridEnvelopLimits[highGridEnvelopLimits.length-1] = highLimit;
287
                        }
288
                }
289

    
290
                public int[][] getHighGridEnvelopLimits() {
291
                        return highGridEnvelopLimits;
292
                }
293

    
294
                public void setOrigin(double[] _origins) {
295
                        origins = _origins;
296
                }
297

    
298
                public double[] getOrigins() {
299
                        return origins;
300
                }
301

    
302
                public void addToOffsetVector(double[] _offsetVector) {
303
                        if (offsetVector == null) {
304
                                offsetVector = new double[1][1];
305
                                offsetVector[0] = _offsetVector;
306
                        } else {
307
                                double[][] aux = offsetVector;
308
                                offsetVector = new double[offsetVector.length+1][1];
309
                                for (int i = 0; i < aux.length; i++) {
310
                                        offsetVector[i] = aux[i];
311
                                }
312
                                offsetVector[offsetVector.length-1] = _offsetVector;
313
                        }
314
                }
315

    
316
                public double[][] getOffsetVector(){
317
                        return offsetVector;
318
                }
319

    
320
                public int getDimensionCount() {
321
                        return dimensions;
322
                }
323
    }
324

    
325
    /**
326
     * Inner class describing the Axis Description of this coverage.
327
     *
328
     * @author jaume dominguez faus - jaume.dominguez@iver.es
329
     */
330
    public class AxisDescription {
331
            private String _name;
332
            private String label;
333
            private ArrayList singleValues = new ArrayList();
334
            private String interval;
335
            private String defaultValue;
336

    
337
                public String getDefaultValue() {
338
                        return defaultValue;
339
                }
340

    
341
                public void setDefaultValue(String defaultValue) {
342
                        this.defaultValue = defaultValue;
343
                }
344

    
345
                public String getInterval() {
346
                        return interval;
347
                }
348

    
349
                public void setInterval(String interval) {
350
                        this.interval = interval;
351
                }
352

    
353
                public String getLabel() {
354
                        return label;
355
                }
356
                public void setLabel(String label) {
357
                        this.label = label;
358
                }
359

    
360
                public String getName() {
361
                        return _name;
362
                }
363

    
364
                public void setName(String name) {
365
                        this._name = name;
366
                }
367

    
368
                public ArrayList getSingleValues() {
369
                        return singleValues;
370
                }
371

    
372
                public void addSingleValues(String singleValue) {
373
                        this.singleValues.add(singleValue);
374
                }
375
    }
376

    
377
        public double getResX() {
378
                if (rg.offsetVector== null)
379
                        return -1;
380
                return Math.abs(rg.offsetVector[0][0]);
381
        }
382

    
383
        public double getResY() {
384
                if (rg.offsetVector== null)
385
                        return -1;
386

    
387
                return Math.abs(rg.offsetVector[1][1]);
388
        }
389

    
390
        public Hashtable getBBoxes() {
391
                if (bBoxes == null) return new Hashtable();
392
                else return bBoxes;
393
        }
394

    
395
}
396