Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libGPE-KML / src / org / gvsig / gpe / kml / writer / GPEKmlWriterHandler.java @ 11683

History | View | Annotate | Download (10.4 KB)

1
package org.gvsig.gpe.kml.writer;
2

    
3
import java.io.FileWriter;
4
import java.io.IOException;
5

    
6
import org.gvsig.gpe.gml.GMLTags;
7
import org.gvsig.gpe.kml.KmlTags;
8
import org.gvsig.gpe.kml.writer.features.DocumentWriter;
9
import org.gvsig.gpe.kml.writer.features.FolderWriter;
10
import org.gvsig.gpe.kml.writer.features.PlaceMarkWriter;
11
import org.gvsig.gpe.kml.writer.geometries.InnerBoundaryIs;
12
import org.gvsig.gpe.kml.writer.geometries.LineStringWriter;
13
import org.gvsig.gpe.kml.writer.geometries.LinearRingWriter;
14
import org.gvsig.gpe.kml.writer.geometries.MultiGeometryWriter;
15
import org.gvsig.gpe.kml.writer.geometries.PointWriter;
16
import org.gvsig.gpe.kml.writer.geometries.PolygonWriter;
17
import org.gvsig.gpe.kml.writer.geometries.RegionWriter;
18
import org.gvsig.gpe.xml.writer.GPEXmlWriterHandler;
19
import org.gvsig.gpe.xml.writer.Writer;
20

    
21

    
22
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
23
 *
24
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
25
 *
26
 * This program is free software; you can redistribute it and/or
27
 * modify it under the terms of the GNU General Public License
28
 * as published by the Free Software Foundation; either version 2
29
 * of the License, or (at your option) any later version.
30
 *
31
 * This program is distributed in the hope that it will be useful,
32
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
33
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
34
 * GNU General Public License for more details.
35
 *
36
 * You should have received a copy of the GNU General Public License
37
 * along with this program; if not, write to the Free Software
38
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
39
 *
40
 * For more information, contact:
41
 *
42
 *  Generalitat Valenciana
43
 *   Conselleria d'Infraestructures i Transport
44
 *   Av. Blasco Ib??ez, 50
45
 *   46010 VALENCIA
46
 *   SPAIN
47
 *
48
 *      +34 963862235
49
 *   gvsig@gva.es
50
 *      www.gvsig.gva.es
51
 *
52
 *    or
53
 *
54
 *   IVER T.I. S.A
55
 *   Salamanca 50
56
 *   46005 Valencia
57
 *   Spain
58
 *
59
 *   +34 963163400
60
 *   dac@iver.es
61
 */
62
/* CVS MESSAGES:
63
 *
64
 * $Id: GPEKmlWriterHandler.java 11683 2007-05-16 09:30:09Z jorpiell $
65
 * $Log$
66
 * Revision 1.13  2007-05-16 09:30:09  jorpiell
67
 * the writting methods has to have the errorHandler argument
68
 *
69
 * Revision 1.12  2007/05/15 12:37:45  jorpiell
70
 * Add multyGeometries
71
 *
72
 * Revision 1.11  2007/05/09 08:36:24  jorpiell
73
 * Add the bbox to the layer
74
 *
75
 * Revision 1.10  2007/05/08 09:28:17  jorpiell
76
 * Add comments to create javadocs
77
 *
78
 * Revision 1.9  2007/05/08 08:22:37  jorpiell
79
 * Add comments to create javadocs
80
 *
81
 * Revision 1.8  2007/05/07 07:07:18  jorpiell
82
 * Add a constructor with the name and the description fields
83
 *
84
 * Revision 1.7  2007/05/02 11:46:50  jorpiell
85
 * Writing tests updated
86
 *
87
 * Revision 1.6  2007/04/20 08:38:59  jorpiell
88
 * Tests updating
89
 *
90
 * Revision 1.5  2007/04/17 10:30:41  jorpiell
91
 * Add a method to compress a file
92
 *
93
 * Revision 1.4  2007/04/14 16:08:07  jorpiell
94
 * Kml writing support added
95
 *
96
 * Revision 1.3  2007/04/13 13:16:21  jorpiell
97
 * Add KML reading support
98
 *
99
 * Revision 1.2  2007/04/12 17:06:43  jorpiell
100
 * First GML writing tests
101
 *
102
 * Revision 1.1  2007/04/12 10:21:52  jorpiell
103
 * Add the writers
104
 *
105
 *
106
 */
107
/**
108
 * KML writer handler used to write KML/KMZ files
109
 * @author Jorge Piera LLodr? (jorge.piera@iver.es)
110
 */
111
public class GPEKmlWriterHandler extends GPEXmlWriterHandler{
112
        private int layerLevel = 0;
113
        
114
        public GPEKmlWriterHandler(String name, String description) {
115
                super(name, description);
116
        }
117
        
118
        /*
119
         * (non-Javadoc)
120
         * @see org.gvsig.gpe.xml.writer.GPEXmlWriterHandler#createOutputStream()
121
         */
122
        protected Writer createWriter() throws IOException {
123
                return new Writer(new FileWriter(getOutputFile()));         
124
        }
125
        
126
        /*
127
         * (non-Javadoc)
128
         * @see org.gvsig.gpe.writers.GPEWriterHandler#getDefaultFormat()
129
         */
130
        public String getDefaultFormat() {
131
                return "KML";
132
        }
133

    
134
        /*
135
         * (non-Javadoc)
136
         * @see org.gvsig.gpe.writers.GPEWriterHandler#getDefaultVersion()
137
         */
138
        public String getDefaultVersion() {
139
                return "2.1";
140
        }
141
        
142
        /*
143
         * (non-Javadoc)
144
         * @see org.gvsig.gpe.writer.GPEWriterHandler#initialize()
145
         */
146
        public void initialize(){
147
                try {
148
                        initXmlHeader();
149
                        writer.write("\n");
150
                        writer.write("<" + KmlTags.ROOT);
151
                        writer.write(" " + GMLTags.XML_NAMESPACE + "=\"" + KmlTags.NAMESPACE_21 + "\"");
152
                        writer.write(">");
153
                } catch (IOException e) {
154
                        getErrorHandler().addError(e);
155
                }
156
        }
157
        
158
        /*
159
         * (non-Javadoc)
160
         * @see org.gvsig.gpe.writer.GPEWriterHandler#close()
161
         */
162
        public void close(){
163
                try {
164
                        writer.write("\n");
165
                        writer.write("</" + KmlTags.ROOT + ">");
166
                        writer.flush();
167
                        writer.close();
168
                } catch (IOException e) {
169
                        getErrorHandler().addError(e);
170
                }
171
                if (getFormat().toUpperCase().equals("KMZ")){
172
                        compressFile();
173
                }
174
        }        
175
        
176
        /*
177
         * (non-Javadoc)
178
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
179
         */
180
        public void startLayer(String id, String name, String description, String srs) {
181
                try{
182
                        if (layerLevel == 0){
183
                                DocumentWriter.start(writer, getErrorHandler(), id, name, description);
184
                        }else{
185
                                FolderWriter.start(writer, getErrorHandler(), id, name, description);
186
                        }                        
187
                } catch (IOException e) {
188
                        getErrorHandler().addError(e);
189
                }
190
                layerLevel++;
191
        }
192
        
193
        /*
194
         * (non-Javadoc)
195
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endLayer()
196
         */
197
        public void endLayer() {
198
                layerLevel--;
199
                try{
200
                        if (layerLevel == 0){
201
                                DocumentWriter.end(writer, getErrorHandler());
202
                        }else{
203
                                FolderWriter.end(writer, getErrorHandler());
204
                        }
205
                } catch (IOException e) {
206
                        getErrorHandler().addError(e);
207
                }                
208
        }
209
        
210
        /*
211
         * (non-Javadoc)
212
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startFeature(java.lang.String, java.lang.String)
213
         */
214
        public void startFeature(String id, String name) {
215
                try{
216
                        PlaceMarkWriter.start(writer, getErrorHandler(), id, name);
217
                } catch (IOException e) {
218
                        getErrorHandler().addError(e);
219
                }        
220
        }
221
        
222
        /*
223
         * (non-Javadoc)
224
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endFeature()
225
         */
226
        public void endFeature() {
227
                try{
228
                        PlaceMarkWriter.end(writer, getErrorHandler());
229
                } catch (IOException e) {
230
                        getErrorHandler().addError(e);
231
                }        
232
        }
233
        
234
        /*
235
         * (non-Javadoc)
236
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startPoint(java.lang.String, double, double, double, java.lang.String)
237
         */
238
        public void startPoint(String id, double x, double y, double z, String srs) {
239
                try {
240
                        PointWriter.start(writer, getErrorHandler(), id, x, y, z);
241
                } catch (IOException e) {
242
                        getErrorHandler().addError(e);
243
                }                
244
        }
245
        
246
        /*
247
         * (non-Javadoc)
248
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endPoint()
249
         */
250
        public void endPoint() {
251
                try {
252
                        PointWriter.end(writer, getErrorHandler());                        
253
                } catch (IOException e) {
254
                        getErrorHandler().addError(e);
255
                }                
256
        }
257
        
258
        /*
259
         * (non-Javadoc)
260
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startLineString(java.lang.String, double[], double[], double[], java.lang.String)
261
         */
262
        public void startLineString(String id, double[] x, double[] y, double[] z, String srs) {
263
                try {
264
                        LineStringWriter.start(writer, getErrorHandler(), id, x, y, z);                        
265
                } catch (IOException e) {
266
                        getErrorHandler().addError(e);
267
                }
268
        }
269
        
270
        /*
271
         * (non-Javadoc)
272
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endLineString()
273
         */
274
        public void endLineString() {
275
                try {
276
                        LineStringWriter.end(writer, getErrorHandler());                        
277
                } catch (IOException e) {
278
                        getErrorHandler().addError(e);
279
                }
280
        }
281
        
282
        /*
283
         * (non-Javadoc)
284
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startLinearRing(java.lang.String, double[], double[], double[], java.lang.String)
285
         */
286
        public void startLinearRing(String id, double[] x, double[] y, double[] z, String srs) {
287
                try {
288
                        LinearRingWriter.start(writer, getErrorHandler(), x, y, z);                        
289
                } catch (IOException e) {
290
                        getErrorHandler().addError(e);
291
                }
292
        }
293
        
294
        /*
295
         * (non-Javadoc)
296
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endLinearRing()
297
         */
298
        public void endLinearRing() {
299
                try {
300
                        LinearRingWriter.end(writer, getErrorHandler());                        
301
                } catch (IOException e) {
302
                        getErrorHandler().addError(e);
303
                }
304
        }
305
        
306
        /*
307
         * (non-Javadoc)
308
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startPolygon(java.lang.String, double[], double[], double[], java.lang.String)
309
         */
310
        public void startPolygon(String id, double[] x, double[] y, double[] z, String srs) {
311
                try {
312
                        PolygonWriter.start(writer, getErrorHandler(), id, x, y, z);                        
313
                } catch (IOException e) {
314
                        getErrorHandler().addError(e);
315
                }
316
        }
317
        
318
        /*
319
         * (non-Javadoc)
320
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endPolygon()
321
         */
322
        public void endPolygon() {
323
                try {
324
                        PolygonWriter.end(writer, getErrorHandler());                        
325
                } catch (IOException e) {
326
                        getErrorHandler().addError(e);
327
                }
328
        }
329
        
330
        /*
331
         * (non-Javadoc)
332
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startInnerBoundary(java.lang.String, double[], double[], double[], java.lang.String)
333
         */
334
        public void startInnerBoundary(String id, double[] x, double[] y, double[] z, String srs) {
335
                try {
336
                        InnerBoundaryIs.start(writer, getErrorHandler(), x, y, z);                        
337
                } catch (IOException e) {
338
                        getErrorHandler().addError(e);
339
                }
340
        }
341
        
342
        /*
343
         * (non-Javadoc)
344
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endInnerBoundary()
345
         */
346
        public void endInnerBoundary() {
347
                try {
348
                        InnerBoundaryIs.end(writer, getErrorHandler());                        
349
                } catch (IOException e) {
350
                        getErrorHandler().addError(e);
351
                }
352
        }
353
        
354
        /*
355
         * (non-Javadoc)
356
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startBbox(java.lang.String, double[], double[], double[], java.lang.String)
357
         */
358
        public void startBbox(String id, double[] x, double[] y, double[] z, String srs) {
359
                try {
360
                        RegionWriter.start(writer, getErrorHandler(), y[1], y[0], x[1], x[0], z[0], z[1]);                        
361
                } catch (IOException e) {
362
                        getErrorHandler().addError(e);
363
                }        
364
        }
365
        
366
        /*
367
         * (non-Javadoc)
368
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endBbox()
369
         */
370
        public void endBbox() {
371
                try {
372
                        RegionWriter.end(writer, getErrorHandler());                        
373
                } catch (IOException e) {
374
                        getErrorHandler().addError(e);
375
                }                
376
        }
377
        
378
        /*
379
         * (non-Javadoc)
380
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startMultiPoint(java.lang.String, java.lang.String)
381
         */
382
        public void startMultiGeometry(String id, String srs) {
383
                try {
384
                        MultiGeometryWriter.start(writer, getErrorHandler(), id);
385
                } catch (IOException e) {
386
                        getErrorHandler().addError(e);
387
                }
388
        }
389
        
390
        /*
391
         * (non-Javadoc)
392
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endMuliPoint()
393
         */
394
        public void endMultiGeometry() {
395
                try {
396
                        MultiGeometryWriter.end(writer, getErrorHandler());
397
                } catch (IOException e) {
398
                        getErrorHandler().addError(e);
399
                }
400
        }
401
}