svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.remoteclient / src / main / java / org / gvsig / remoteclient / wcs / wcs_1_0_0 / WCSCoverage1_0_0.java @ 40769
History | View | Annotate | Download (28.6 KB)
1 | 40559 | jjdelcerro | /**
|
---|---|---|---|
2 | * gvSIG. Desktop Geographic Information System.
|
||
3 | 40435 | jjdelcerro | *
|
4 | 40559 | jjdelcerro | * Copyright (C) 2007-2013 gvSIG Association.
|
5 | 40435 | jjdelcerro | *
|
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 | 40559 | jjdelcerro | * as published by the Free Software Foundation; either version 3
|
9 | 40435 | jjdelcerro | * 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 | 40559 | jjdelcerro | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19 | * MA 02110-1301, USA.
|
||
20 | 40435 | jjdelcerro | *
|
21 | 40559 | jjdelcerro | * For any additional information, do not hesitate to contact us
|
22 | * at info AT gvsig.com, or visit our website www.gvsig.com.
|
||
23 | 40435 | jjdelcerro | */
|
24 | package org.gvsig.remoteclient.wcs.wcs_1_0_0; |
||
25 | |||
26 | |||
27 | import java.io.IOException; |
||
28 | |||
29 | import org.kxml2.io.KXmlParser; |
||
30 | import org.xmlpull.v1.XmlPullParserException; |
||
31 | |||
32 | import org.gvsig.compat.CompatLocator; |
||
33 | import org.gvsig.compat.lang.StringUtils; |
||
34 | import org.gvsig.remoteclient.utils.BoundaryBox; |
||
35 | import org.gvsig.remoteclient.utils.DescribeCoverageTags; |
||
36 | import org.gvsig.remoteclient.wcs.WCSCoverage; |
||
37 | |||
38 | /**
|
||
39 | * @author jaume
|
||
40 | *
|
||
41 | */
|
||
42 | public class WCSCoverage1_0_0 extends WCSCoverage{ |
||
43 | String axisDescriptionName;
|
||
44 | |||
45 | private static final StringUtils stringUtils = CompatLocator.getStringUtils(); |
||
46 | |||
47 | /* (non-Javadoc)
|
||
48 | * @see org.gvsig.remoteClient.wcs.WCSLayer#parse(org.kxml2.io.KXmlParser)
|
||
49 | */
|
||
50 | public void parse(KXmlParser parser) throws XmlPullParserException, IOException { |
||
51 | int currentTag;
|
||
52 | String value;
|
||
53 | boolean end = false; |
||
54 | |||
55 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_OFFERING);
|
||
56 | currentTag = parser.next(); |
||
57 | |||
58 | while (!end)
|
||
59 | { |
||
60 | switch(currentTag)
|
||
61 | { |
||
62 | case KXmlParser.START_TAG:
|
||
63 | if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0) |
||
64 | { |
||
65 | value = parser.nextText(); |
||
66 | if (value != null) setName(value); |
||
67 | } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL)==0){ |
||
68 | value = parser.nextText(); |
||
69 | if (value != null) setTitle(value); |
||
70 | } else if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE)==0){ |
||
71 | BoundaryBox bBox = parseLonLatGMLEnvelope(parser); |
||
72 | bBox.setSrs(DescribeCoverageTags.WGS84); |
||
73 | addBBox(bBox); |
||
74 | setLonLatBox(bBox); |
||
75 | } else if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0) { |
||
76 | parseDomainSet(parser); |
||
77 | } else if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0) { |
||
78 | parseRangeSet(parser); |
||
79 | } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0) { |
||
80 | parseSupportedCRSS(parser); |
||
81 | } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_FORMATS) == 0) { |
||
82 | setNativeFormat(parser.getAttributeValue("", DescribeCoverageTags.NATIVE_FORMAT));
|
||
83 | parser.nextTag(); |
||
84 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.FORMATS);
|
||
85 | while (parser.getName().compareTo(DescribeCoverageTags.FORMATS) == 0) { |
||
86 | String[] formats = stringUtils.split(parser.nextText(), SEPARATOR); |
||
87 | for (int i = 0; i < formats.length; i++) { |
||
88 | addFormat(formats[i]); |
||
89 | } |
||
90 | parser.nextTag(); |
||
91 | } |
||
92 | } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0) { |
||
93 | boolean bInterpolationsEnd = false; |
||
94 | int interpolationsTag = parser.next();
|
||
95 | while (!bInterpolationsEnd) {
|
||
96 | switch(interpolationsTag) {
|
||
97 | case KXmlParser.START_TAG:
|
||
98 | if (parser.getName().compareTo(DescribeCoverageTags.INTERPOLATION_METHOD)==0) { |
||
99 | addInterpolationMethod(parser.nextText()); |
||
100 | } |
||
101 | break;
|
||
102 | case KXmlParser.END_TAG:
|
||
103 | if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0) |
||
104 | bInterpolationsEnd = true;
|
||
105 | break;
|
||
106 | case KXmlParser.TEXT:
|
||
107 | if (parser.getName()!=null) |
||
108 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
109 | break;
|
||
110 | } |
||
111 | interpolationsTag = parser.next(); |
||
112 | } |
||
113 | } else {
|
||
114 | if (!parser.getName().equals("rangeSet")) // just a patch to avoid too much messages |
||
115 | System.out.println("Skiped "+parser.getName()); |
||
116 | } |
||
117 | |||
118 | break;
|
||
119 | case KXmlParser.END_TAG:
|
||
120 | if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING) == 0) |
||
121 | end = true;
|
||
122 | break;
|
||
123 | case KXmlParser.TEXT:
|
||
124 | if (parser.getName()!=null) |
||
125 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
126 | break;
|
||
127 | } |
||
128 | currentTag = parser.next(); |
||
129 | } |
||
130 | } |
||
131 | |||
132 | private void parseSupportedCRSS(KXmlParser parser) throws XmlPullParserException, IOException { |
||
133 | int currentTag;
|
||
134 | boolean end = false; |
||
135 | |||
136 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SUPPORTED_CRSS);
|
||
137 | currentTag = parser.next(); |
||
138 | |||
139 | while (!end)
|
||
140 | { |
||
141 | switch(currentTag)
|
||
142 | { |
||
143 | case KXmlParser.START_TAG:
|
||
144 | if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_RESPONSE_CRSS)==0) { |
||
145 | String[] values = stringUtils.split(parser.nextText(), SEPARATOR); |
||
146 | for (int i = 0; i < values.length; i++) { |
||
147 | addSRSs(values[i]); |
||
148 | } |
||
149 | } |
||
150 | else if (parser.getName().compareTo(DescribeCoverageTags.NATIVE_CRS) == 0) { |
||
151 | setNativeSRS(parser.nextText()); |
||
152 | } else if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_CRSS) == 0) { |
||
153 | // TODO
|
||
154 | System.out.println("Skiped "+parser.getName()); |
||
155 | } else if (parser.getName().compareTo(DescribeCoverageTags.RESPONSE_CRSS) == 0) { |
||
156 | // TODO
|
||
157 | System.out.println("Skiped "+parser.getName()); |
||
158 | } else {
|
||
159 | System.out.println("Unrecognized "+parser.getName()); |
||
160 | } |
||
161 | |||
162 | break;
|
||
163 | case KXmlParser.END_TAG:
|
||
164 | if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0) |
||
165 | return;//end = true; |
||
166 | break;
|
||
167 | case KXmlParser.TEXT:
|
||
168 | if (parser.getName()!=null) |
||
169 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
170 | break;
|
||
171 | } |
||
172 | currentTag = parser.next(); |
||
173 | } |
||
174 | } |
||
175 | |||
176 | private void parseRangeSet(KXmlParser parser) throws XmlPullParserException, IOException { |
||
177 | int currentTag;
|
||
178 | boolean end = false; |
||
179 | |||
180 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RANGESET);
|
||
181 | currentTag = parser.next(); |
||
182 | |||
183 | while (!end)
|
||
184 | { |
||
185 | switch(currentTag)
|
||
186 | { |
||
187 | case KXmlParser.START_TAG:
|
||
188 | if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0) |
||
189 | setRangeSetName(parser.nextText()); |
||
190 | else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0) |
||
191 | setRangeSetLabel(parser.nextText()); |
||
192 | else if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0) { |
||
193 | // Reading all axe description
|
||
194 | int axisTag = parser.nextTag();
|
||
195 | boolean endAxe = false; |
||
196 | while (!endAxe) {
|
||
197 | switch(axisTag)
|
||
198 | { |
||
199 | case KXmlParser.START_TAG:
|
||
200 | if (parser.getName().compareTo(DescribeCoverageTags.AXISDESCRIPTION)==0) { |
||
201 | AxisDescription as = parseAxisDescription(parser); |
||
202 | axisPool.put(as.getName(), as); |
||
203 | axisDescriptionName = as.getName(); |
||
204 | } |
||
205 | break;
|
||
206 | case KXmlParser.END_TAG:
|
||
207 | if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0) |
||
208 | endAxe = true;
|
||
209 | break;
|
||
210 | case KXmlParser.TEXT:
|
||
211 | if (parser.getName()!=null) |
||
212 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
213 | break;
|
||
214 | } |
||
215 | axisTag = parser.next(); |
||
216 | } |
||
217 | } else {
|
||
218 | System.out.println("Unrecognized "+parser.getName()); |
||
219 | } |
||
220 | break;
|
||
221 | case KXmlParser.END_TAG:
|
||
222 | if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0) |
||
223 | end = true;
|
||
224 | break;
|
||
225 | case KXmlParser.TEXT:
|
||
226 | if (parser.getName()!=null) |
||
227 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
228 | break;
|
||
229 | } |
||
230 | currentTag = parser.next(); |
||
231 | } |
||
232 | } |
||
233 | |||
234 | private AxisDescription parseAxisDescription(KXmlParser parser) throws XmlPullParserException, IOException { |
||
235 | int currentTag;
|
||
236 | boolean end = false; |
||
237 | |||
238 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.AXISDESCRIPTION);
|
||
239 | AxisDescription as = new AxisDescription();
|
||
240 | currentTag = parser.next(); |
||
241 | |||
242 | while (!end)
|
||
243 | { |
||
244 | switch(currentTag)
|
||
245 | { |
||
246 | case KXmlParser.START_TAG:
|
||
247 | if (parser.getName().compareTo(DescribeCoverageTags.NAME) == 0) { |
||
248 | as.setName(parser.nextText()); |
||
249 | } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0) { |
||
250 | as.setLabel(parser.nextText()); |
||
251 | } else if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0) { |
||
252 | int valuesTag = parser.nextTag();
|
||
253 | boolean valuesEnd = false; |
||
254 | while (!valuesEnd) {
|
||
255 | switch(valuesTag) {
|
||
256 | case KXmlParser.START_TAG:
|
||
257 | if (parser.getName().compareTo(DescribeCoverageTags.SINGLEVALUE) == 0) { |
||
258 | as.addSingleValues(parser.nextText()); |
||
259 | } else if (parser.getName().compareTo(DescribeCoverageTags.INTERVAL) == 0) { |
||
260 | as.setInterval(parser.nextText()); |
||
261 | } else if (parser.getName().compareTo(DescribeCoverageTags.DEFAULT) == 0) { |
||
262 | as.setDefaultValue(parser.nextText()); |
||
263 | } |
||
264 | break;
|
||
265 | case KXmlParser.END_TAG:
|
||
266 | if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0) |
||
267 | valuesEnd = true;
|
||
268 | break;
|
||
269 | case KXmlParser.TEXT:
|
||
270 | if (parser.getName()!=null) |
||
271 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
272 | break;
|
||
273 | } |
||
274 | valuesTag = parser.next(); |
||
275 | } |
||
276 | } else if (parser.getName().compareTo(DescribeCoverageTags.NULLVALUES)==0) { |
||
277 | // TODO
|
||
278 | System.err.println("Missing NULL VALUE PARSING on WCS 1.0.0 Client"); |
||
279 | } else {
|
||
280 | System.out.println("Unrecognized "+parser.getName()); |
||
281 | } |
||
282 | |||
283 | break;
|
||
284 | case KXmlParser.END_TAG:
|
||
285 | if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0) |
||
286 | end = true;
|
||
287 | break;
|
||
288 | case KXmlParser.TEXT:
|
||
289 | if (parser.getName()!=null) |
||
290 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
291 | break;
|
||
292 | } |
||
293 | currentTag = parser.next(); |
||
294 | } |
||
295 | return as;
|
||
296 | } |
||
297 | |||
298 | private void parseDomainSet(KXmlParser parser) throws XmlPullParserException, IOException { |
||
299 | int currentTag;
|
||
300 | boolean end = false; |
||
301 | |||
302 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.DOMAINSET);
|
||
303 | currentTag = parser.next(); |
||
304 | |||
305 | while (!end)
|
||
306 | { |
||
307 | switch(currentTag)
|
||
308 | { |
||
309 | case KXmlParser.START_TAG:
|
||
310 | if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN)==0) |
||
311 | { |
||
312 | parseSpatialDomain(parser); |
||
313 | } else if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN)==0) { |
||
314 | parseTemporalDomain(parser); |
||
315 | } |
||
316 | break;
|
||
317 | case KXmlParser.END_TAG:
|
||
318 | if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0) |
||
319 | end = true;
|
||
320 | break;
|
||
321 | case KXmlParser.TEXT:
|
||
322 | if (parser.getName()!=null) |
||
323 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
324 | break;
|
||
325 | } |
||
326 | currentTag = parser.next(); |
||
327 | } |
||
328 | } |
||
329 | |||
330 | private void parseTemporalDomain(KXmlParser parser) throws XmlPullParserException, IOException { |
||
331 | int currentTag;
|
||
332 | boolean end = false; |
||
333 | |||
334 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.TEMPORALDOMAIN);
|
||
335 | currentTag = parser.next(); |
||
336 | |||
337 | while (!end)
|
||
338 | { |
||
339 | switch(currentTag)
|
||
340 | { |
||
341 | case KXmlParser.START_TAG:
|
||
342 | if (parser.getName().compareTo(DescribeCoverageTags.GML_TIMEPOSITION) == 0) { |
||
343 | addTimePosition(parser.nextText()); |
||
344 | } else if (parser.getName().compareTo(DescribeCoverageTags.TIMEPERIOD) == 0) { |
||
345 | boolean timePeriodEnd = false; |
||
346 | int timePeriodTag = parser.next();
|
||
347 | String[] myTimePeriod = new String[3]; |
||
348 | while (!timePeriodEnd) {
|
||
349 | switch (timePeriodTag) {
|
||
350 | case KXmlParser.START_TAG:
|
||
351 | if (parser.getName().compareTo(DescribeCoverageTags.BEGINPOSITION) == 0) { |
||
352 | myTimePeriod[0] = parser.nextText();
|
||
353 | } else if (parser.getName().compareTo(DescribeCoverageTags.ENDPOSITION) == 0) { |
||
354 | myTimePeriod[1] = parser.nextText();
|
||
355 | } else if (parser.getName().compareTo(DescribeCoverageTags.TIMERESOLUTION) == 0) { |
||
356 | myTimePeriod[2] = parser.nextText();
|
||
357 | } else {
|
||
358 | System.out.println("Unrecognized "+parser.getName()); |
||
359 | } |
||
360 | break;
|
||
361 | case KXmlParser.END_TAG:
|
||
362 | if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0) |
||
363 | end = true;
|
||
364 | break;
|
||
365 | case KXmlParser.TEXT:
|
||
366 | if (parser.getName()!=null) |
||
367 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
368 | break;
|
||
369 | } |
||
370 | timePeriodTag = parser.next(); |
||
371 | } |
||
372 | super.timePeriod = ""; |
||
373 | for (int i = 0; i < myTimePeriod.length-1; i++) { |
||
374 | if (myTimePeriod[i]!=null) { |
||
375 | super.timePeriod += myTimePeriod[i];
|
||
376 | } |
||
377 | if (myTimePeriod[i+1]!=null) { |
||
378 | super.timePeriod += "/"; |
||
379 | } |
||
380 | } |
||
381 | } else {
|
||
382 | System.out.println("Unrecognized "+parser.getName()); |
||
383 | } |
||
384 | break;
|
||
385 | case KXmlParser.END_TAG:
|
||
386 | if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0) |
||
387 | end = true;
|
||
388 | break;
|
||
389 | case KXmlParser.TEXT:
|
||
390 | if (parser.getName()!=null) |
||
391 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
392 | break;
|
||
393 | } |
||
394 | currentTag = parser.next(); |
||
395 | } |
||
396 | } |
||
397 | |||
398 | private void parseSpatialDomain(KXmlParser parser) throws XmlPullParserException, IOException { |
||
399 | int currentTag;
|
||
400 | boolean end = false; |
||
401 | |||
402 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SPATIALDOMAIN);
|
||
403 | currentTag = parser.next(); |
||
404 | |||
405 | while (!end)
|
||
406 | { |
||
407 | switch(currentTag)
|
||
408 | { |
||
409 | case KXmlParser.START_TAG:
|
||
410 | if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE)==0) { |
||
411 | BoundaryBox bBox = parseGMLEnvelope(parser); |
||
412 | addBBox(bBox); |
||
413 | } else if (parser.getName().compareTo(DescribeCoverageTags.GRID)==0) { |
||
414 | parseGrid(parser); |
||
415 | } else if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID)==0) { |
||
416 | parseRectifiedGrid(parser); |
||
417 | } else {
|
||
418 | System.out.println("Unrecognized "+parser.getName()); |
||
419 | } |
||
420 | break;
|
||
421 | case KXmlParser.END_TAG:
|
||
422 | if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN) == 0) |
||
423 | return;
|
||
424 | break;
|
||
425 | case KXmlParser.TEXT:
|
||
426 | if (parser.getName()!=null) |
||
427 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
428 | break;
|
||
429 | } |
||
430 | currentTag = parser.next(); |
||
431 | } |
||
432 | } |
||
433 | |||
434 | private void parseGrid(KXmlParser parser) throws XmlPullParserException, IOException { |
||
435 | int currentTag;
|
||
436 | String value;
|
||
437 | boolean end = false; |
||
438 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GRID);
|
||
439 | rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION))); |
||
440 | |||
441 | currentTag = parser.next(); |
||
442 | |||
443 | while (!end)
|
||
444 | { |
||
445 | switch(currentTag) {
|
||
446 | case KXmlParser.START_TAG:
|
||
447 | if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) { |
||
448 | parser.nextTag(); |
||
449 | if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) { |
||
450 | boolean gridEnd = false; |
||
451 | int gridCurrentTag = parser.next();
|
||
452 | while (!gridEnd){
|
||
453 | switch (gridCurrentTag) {
|
||
454 | case KXmlParser.START_TAG:
|
||
455 | |||
456 | if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) { |
||
457 | value = parser.nextText(); |
||
458 | String[] ss = stringUtils.split(value, SEPARATOR); |
||
459 | int[] limits = new int[ss.length]; |
||
460 | for (int i = 0; i < limits.length; i++) { |
||
461 | limits[i] = Integer.parseInt(ss[i]);
|
||
462 | } |
||
463 | rg.addLowGridEnvelopLimit(limits); |
||
464 | } else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) { |
||
465 | value = parser.nextText(); |
||
466 | String[] ss = stringUtils.split(value, SEPARATOR); |
||
467 | int[] limits = new int[ss.length]; |
||
468 | for (int i = 0; i < limits.length; i++) { |
||
469 | limits[i] = Integer.parseInt(ss[i]);
|
||
470 | } |
||
471 | rg.addHighGridEnvelopLimit(limits); |
||
472 | } else {
|
||
473 | System.out.println("Unrecognized "+parser.getName()); |
||
474 | } |
||
475 | break;
|
||
476 | case KXmlParser.END_TAG:
|
||
477 | if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0) |
||
478 | gridEnd = true;
|
||
479 | break;
|
||
480 | case KXmlParser.TEXT:
|
||
481 | if (parser.getName()!=null) |
||
482 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
483 | break;
|
||
484 | } |
||
485 | gridCurrentTag = parser.next(); |
||
486 | } |
||
487 | } |
||
488 | } else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) { |
||
489 | rg.addAxisName(parser.nextText()); |
||
490 | } else {
|
||
491 | System.out.println("Unrecognized "+parser.getName()); |
||
492 | } |
||
493 | break;
|
||
494 | case KXmlParser.END_TAG:
|
||
495 | if (parser.getName().compareTo(DescribeCoverageTags.GRID) == 0) |
||
496 | return;//end = true; |
||
497 | break;
|
||
498 | case KXmlParser.TEXT:
|
||
499 | if (parser.getName()!=null) |
||
500 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
501 | break;
|
||
502 | } |
||
503 | currentTag = parser.next(); |
||
504 | } |
||
505 | } |
||
506 | |||
507 | private void parseRectifiedGrid(KXmlParser parser) throws XmlPullParserException, IOException { |
||
508 | int currentTag;
|
||
509 | String value;
|
||
510 | boolean end = false; |
||
511 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RECTIFIEDGRID);
|
||
512 | rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION))); |
||
513 | |||
514 | // TODO maybe this is wrong
|
||
515 | rg.addToOffsetVector(new double[] { -1, -1}); |
||
516 | rg.addToOffsetVector(new double[] { -1, -1}); |
||
517 | |||
518 | currentTag = parser.next(); |
||
519 | |||
520 | while (!end)
|
||
521 | { |
||
522 | switch(currentTag)
|
||
523 | { |
||
524 | case KXmlParser.START_TAG:
|
||
525 | if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) { |
||
526 | parser.nextTag(); |
||
527 | if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) { |
||
528 | boolean gridEnd = false; |
||
529 | int gridCurrentTag = parser.next();
|
||
530 | while (!gridEnd)
|
||
531 | { |
||
532 | switch (gridCurrentTag) {
|
||
533 | case KXmlParser.START_TAG:
|
||
534 | |||
535 | if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) { |
||
536 | value = parser.nextText(); |
||
537 | String[] ss = stringUtils.split(value, SEPARATOR); |
||
538 | int[] limits = new int[ss.length]; |
||
539 | for (int i = 0; i < limits.length; i++) { |
||
540 | limits[i] = Integer.parseInt(ss[i]);
|
||
541 | } |
||
542 | rg.addLowGridEnvelopLimit(limits); |
||
543 | } else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) { |
||
544 | value = parser.nextText(); |
||
545 | String[] ss = stringUtils.split(value, SEPARATOR); |
||
546 | int[] limits = new int[ss.length]; |
||
547 | for (int i = 0; i < limits.length; i++) { |
||
548 | limits[i] = Integer.parseInt(ss[i]);
|
||
549 | } |
||
550 | rg.addHighGridEnvelopLimit(limits); |
||
551 | } else {
|
||
552 | System.out.println("Unrecognized "+parser.getName()); |
||
553 | } |
||
554 | break;
|
||
555 | case KXmlParser.END_TAG:
|
||
556 | if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0) |
||
557 | gridEnd = true;
|
||
558 | break;
|
||
559 | case KXmlParser.TEXT:
|
||
560 | if (parser.getName()!=null) |
||
561 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
562 | break;
|
||
563 | } |
||
564 | gridCurrentTag = parser.next(); |
||
565 | } |
||
566 | } |
||
567 | } else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) { |
||
568 | rg.addAxisName(parser.nextText()); |
||
569 | } else if (parser.getName().compareTo(DescribeCoverageTags.GML_ORIGIN)==0) { |
||
570 | parser.nextTag(); |
||
571 | if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) { |
||
572 | value = parser.nextText(); |
||
573 | String[] ss = stringUtils.split(value, SEPARATOR); |
||
574 | double[] ori = new double[ss.length]; |
||
575 | for (int i = 0; i < ori.length; i++) { |
||
576 | ori[i] = Double.parseDouble(ss[i]);
|
||
577 | } |
||
578 | rg.setOrigin(ori); |
||
579 | } |
||
580 | } else if (parser.getName().compareTo(DescribeCoverageTags.OFFSETVECTOR) == 0) { |
||
581 | value = parser.nextText(); |
||
582 | String[] ss = stringUtils.split(value, SEPARATOR); |
||
583 | double[] offset = new double[ss.length]; |
||
584 | for (int i = 0; i < offset.length; i++) { |
||
585 | offset[i] = Double.parseDouble(ss[i]);
|
||
586 | } |
||
587 | rg.addToOffsetVector(offset); |
||
588 | } else {
|
||
589 | System.out.println("Unrecognized "+parser.getName()); |
||
590 | } |
||
591 | break;
|
||
592 | case KXmlParser.END_TAG:
|
||
593 | if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID) == 0) |
||
594 | end = true;
|
||
595 | break;
|
||
596 | case KXmlParser.TEXT:
|
||
597 | if (parser.getName()!=null) |
||
598 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
599 | break;
|
||
600 | } |
||
601 | currentTag = parser.next(); |
||
602 | } |
||
603 | } |
||
604 | |||
605 | |||
606 | private BoundaryBox parseLonLatGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException { |
||
607 | BoundaryBox bBox = new BoundaryBox();
|
||
608 | int currentTag;
|
||
609 | String value;
|
||
610 | boolean end = false; |
||
611 | |||
612 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.LONLAT_ENVELOPE);
|
||
613 | currentTag = parser.next(); |
||
614 | |||
615 | while (!end)
|
||
616 | { |
||
617 | switch(currentTag)
|
||
618 | { |
||
619 | case KXmlParser.START_TAG:
|
||
620 | if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) { |
||
621 | bBox.setSrs(DescribeCoverageTags.WGS84); |
||
622 | String[] coordinates; |
||
623 | double minx, miny, maxx, maxy;
|
||
624 | value = parser.nextText(); |
||
625 | coordinates = stringUtils.split(value, SEPARATOR); |
||
626 | minx = Double.parseDouble(coordinates[0]); |
||
627 | miny = Double.parseDouble(coordinates[1]); |
||
628 | |||
629 | parser.nextTag(); |
||
630 | |||
631 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
|
||
632 | value = parser.nextText(); |
||
633 | coordinates = stringUtils.split(value, SEPARATOR); |
||
634 | maxx = Double.parseDouble(coordinates[0]); |
||
635 | maxy = Double.parseDouble(coordinates[1]); |
||
636 | |||
637 | bBox.setXmin(minx); |
||
638 | bBox.setYmin(miny); |
||
639 | bBox.setXmax(maxx); |
||
640 | bBox.setYmax(maxy); |
||
641 | } |
||
642 | break;
|
||
643 | case KXmlParser.END_TAG:
|
||
644 | if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE) == 0) |
||
645 | end = true;
|
||
646 | break;
|
||
647 | case KXmlParser.TEXT:
|
||
648 | if (parser.getName()!=null) |
||
649 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
650 | break;
|
||
651 | } |
||
652 | currentTag = parser.next(); |
||
653 | } |
||
654 | return bBox;
|
||
655 | } |
||
656 | |||
657 | private BoundaryBox parseGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException { |
||
658 | BoundaryBox bBox = new BoundaryBox();
|
||
659 | int currentTag;
|
||
660 | String value;
|
||
661 | boolean end = false; |
||
662 | |||
663 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_ENVELOPE);
|
||
664 | bBox.setSrs(parser.getAttributeValue("", DescribeCoverageTags.SRSNAME));
|
||
665 | currentTag = parser.next(); |
||
666 | |||
667 | while (!end)
|
||
668 | { |
||
669 | switch(currentTag)
|
||
670 | { |
||
671 | case KXmlParser.START_TAG:
|
||
672 | if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) { |
||
673 | |||
674 | String[] coordinates; |
||
675 | double minx, miny, maxx, maxy;
|
||
676 | value = parser.nextText(); |
||
677 | coordinates = stringUtils.split(value, SEPARATOR); |
||
678 | minx = Double.parseDouble(coordinates[0]); |
||
679 | miny = Double.parseDouble(coordinates[1]); |
||
680 | |||
681 | parser.nextTag(); |
||
682 | //parser.nextTag();
|
||
683 | parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
|
||
684 | value = parser.nextText(); |
||
685 | coordinates = stringUtils.split(value, SEPARATOR); |
||
686 | maxx = Double.parseDouble(coordinates[0]); |
||
687 | maxy = Double.parseDouble(coordinates[1]); |
||
688 | |||
689 | bBox.setXmin(minx); |
||
690 | bBox.setYmin(miny); |
||
691 | bBox.setXmax(maxx); |
||
692 | bBox.setYmax(maxy); |
||
693 | } |
||
694 | break;
|
||
695 | case KXmlParser.END_TAG:
|
||
696 | if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE) == 0) |
||
697 | end = true;
|
||
698 | break;
|
||
699 | case KXmlParser.TEXT:
|
||
700 | if (parser.getName()!=null) |
||
701 | System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]"); |
||
702 | break;
|
||
703 | } |
||
704 | currentTag = parser.next(); |
||
705 | } |
||
706 | |||
707 | return bBox;
|
||
708 | } |
||
709 | } |