Revision 964

View differences:

org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/buildNumber.properties
1
#Mon Oct 14 11:41:18 CEST 2019
2
buildNumber=2190
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/resources-plugin/config.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<plugin-config>
3

  
4
	<depends plugin-name="org.gvsig.app.mainplugin" />
5
	<depends plugin-name="org.gvsig.exportto.app.mainplugin" />
6
	<depends plugin-name="org.gvsig.gpe.app.mainplugin" />
7
	
8
	<libraries library-dir="lib"/>
9
	<resourceBundle name="text"/>
10
	<extensions>		
11
		<extension class-name="org.gvsig.andami.LibraryExtension"
12
			description=""
13
			active="true"
14
			priority="1">			
15
		</extension>			
16
	</extensions>
17
</plugin-config>
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.gpe.exportto.kml.ExportKMLLibrary
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/assembly/gvsig-plugin-package.xml
1
<!--
2

  
3
    gvSIG. Desktop Geographic Information System.
4

  
5
    Copyright (C) 2007-2013 gvSIG Association.
6

  
7
    This program is free software; you can redistribute it and/or
8
    modify it under the terms of the GNU General Public License
9
    as published by the Free Software Foundation; either version 3
10
    of the License, or (at your option) any later version.
11

  
12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

  
17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
    MA  02110-1301, USA.
21

  
22
    For any additional information, do not hesitate to contact us
23
    at info AT gvsig.com, or visit our website www.gvsig.com.
24

  
25
-->
26
<assembly>
27
  <id>gvsig-plugin-package</id>
28
  <formats>
29
    <format>zip</format>
30
  </formats>
31
  <baseDirectory>${project.artifactId}</baseDirectory>
32
  <includeBaseDirectory>true</includeBaseDirectory>
33
  <files>
34
    <file>
35
      <source>target/${project.artifactId}-${project.version}.jar</source>
36
      <outputDirectory>lib</outputDirectory>
37
    </file>
38
    <file>
39
      <source>target/package.info</source>
40
    </file>
41
  </files>
42

  
43
  <fileSets>
44
    <fileSet>
45
      <directory>src/main/resources-plugin</directory>
46
      <outputDirectory>.</outputDirectory>
47
    </fileSet>
48
  </fileSets>
49

  
50
  <dependencySets>
51
    <dependencySet>
52
      <useProjectArtifact>false</useProjectArtifact>
53
      <useTransitiveDependencies>false</useTransitiveDependencies>
54
      <outputDirectory>lib</outputDirectory>
55
      <includes>
56
        <include>org.gvsig:org.gvsig.gpe.exportto.generic</include>
57
      </includes>
58
    </dependencySet>
59
  </dependencySets>
60

  
61
</assembly>
62

  
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/service/ExportKMLService.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.gpe.exportto.kml.service;
7

  
8
import java.awt.geom.Rectangle2D;
9
import java.io.File;
10
import java.io.FileOutputStream;
11
import java.io.IOException;
12
import java.util.ArrayList;
13
import java.util.Iterator;
14
import java.util.List;
15
import java.util.Map;
16
import org.cresques.cts.ICoordTrans;
17
import org.cresques.cts.IProjection;
18
import org.gvsig.export.ExportException;
19
import org.gvsig.export.ExportParameters;
20
import org.gvsig.export.spi.AbstractExportService;
21
import org.gvsig.export.spi.ExportService;
22
import org.gvsig.export.spi.ExportServiceFactory;
23
import org.gvsig.fmap.crs.CRSFactory;
24
import org.gvsig.fmap.dal.DALLocator;
25
import org.gvsig.fmap.dal.DataManager;
26
import org.gvsig.fmap.dal.DataServerExplorer;
27
import org.gvsig.fmap.dal.NewDataStoreParameters;
28
import org.gvsig.fmap.dal.OpenDataStoreParameters;
29
import org.gvsig.fmap.dal.exception.DataException;
30
import org.gvsig.fmap.dal.feature.Feature;
31
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
32
import org.gvsig.fmap.dal.feature.FeatureSet;
33
import org.gvsig.fmap.dal.feature.FeatureType;
34
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
35
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
36
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
37
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
38
import org.gvsig.fmap.geom.DataTypes;
39
import org.gvsig.fmap.geom.Geometry;
40
import org.gvsig.fmap.geom.GeometryLocator;
41
import org.gvsig.fmap.geom.GeometryManager;
42
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
43
import org.gvsig.fmap.geom.primitive.Envelope;
44
import org.gvsig.fmap.mapcontext.MapContextException;
45
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
46
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
47
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
48
import org.gvsig.gpe.exportto.generic.util.CoordinatesSequenceBbox;
49
import org.gvsig.gpe.exportto.generic.util.GeometryToGPEWriter;
50
import org.gvsig.gpe.exportto.kml.style.KmlStyle;
51
import org.gvsig.gpe.exportto.kml.style.StyleUtils;
52
import org.gvsig.gpe.lib.api.GPELocator;
53
import org.gvsig.gpe.lib.api.writer.IGPEWriterHandler;
54
import org.gvsig.gpe.lib.api.writer.IGPEWriterHandlerImplementor;
55
import org.gvsig.gpe.prov.kml.utils.Kml2_1_Tags;
56
import org.gvsig.gpe.prov.kml.writer.GPEKmlWriterHandlerImplementor;
57
import org.gvsig.tools.dispose.DisposableIterator;
58
import org.gvsig.tools.locator.LocatorException;
59
import org.gvsig.tools.util.HasAFile;
60
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
61
import org.slf4j.Logger;
62
import org.slf4j.LoggerFactory;
63

  
64
/**
65
 *
66
 * @author osc
67
 */
68
public class ExportKMLService extends AbstractExportService
69
	implements ExportService {
70

  
71
	private static Logger logger = LoggerFactory.getLogger(ExportKMLService.class);
72

  
73
	ExportKMLService(ExportServiceFactory factory, ExportParameters parameters) {
74
		super(factory, parameters);
75
	}
76

  
77
	@Override
78
	protected DataServerExplorer createServerExplorer() throws ExportException {
79

  
80
		DataManager dataManager = DALLocator.getDataManager();
81

  
82
		FilesystemServerExplorerParameters explorerParams;
83
		try {
84
			explorerParams
85
				= (FilesystemServerExplorerParameters) dataManager
86
					.createServerExplorerParameters(FilesystemServerExplorer.NAME);
87
		} catch (Exception e) {
88
			throw new ExportException(e);
89
		}
90

  
91
		explorerParams.setRoot(this.getParameters().getFile().getParent());
92

  
93
		FilesystemServerExplorer explorer;
94
		try {
95
			explorer = (FilesystemServerExplorer) dataManager.openServerExplorer(
96
				"FilesystemExplorer", explorerParams
97
			);
98
			return explorer;
99
		} catch (Exception e) {
100
			throw new ExportException(e);
101
		}
102
	}
103

  
104
	@Override
105
	protected NewDataStoreParameters createTargetNewStoreParameters() throws ExportException {
106
		try {
107
			FilesystemServerExplorer explorer = (FilesystemServerExplorer) this.createServerExplorer();
108
			NewFeatureStoreParameters newStoreParameters = (NewFeatureStoreParameters) explorer.getAddParameters(
109
				this.getParameters().getFile()
110
			);
111
			newStoreParameters.setDynValue("CRS", this.getParameters().getTargetProjection());
112
			// Usamos el featureType por defecto del KML
113
			return newStoreParameters;
114
		} catch (DataException ex) {
115
			throw new ExportException(ex);
116
		}
117
	}
118

  
119
	@Override
120
	protected OpenDataStoreParameters createTargetOpenStoreParameters() throws ExportException {
121
		try {
122
			DataManager dataManager = DALLocator.getDataManager();
123
			OpenFeatureStoreParameters openStoreParameters = (OpenFeatureStoreParameters) dataManager.createStoreParameters("GPE");
124
			((HasAFile) openStoreParameters).setFile(getParameters().getFile());
125
			openStoreParameters.setDynValue("CRS", this.getParameters().getTargetProjection());
126
			return openStoreParameters;
127
		} catch (DataException ex) {
128
			throw new ExportException(ex);
129
		}
130
	}
131

  
132
	@Override
133
	public ExportKMLParameters getParameters() {
134
		return (ExportKMLParameters) super.getParameters();
135
	}
136

  
137
	@Override
138
	public void export(
139
		FeatureSet featureSet) throws ExportException {
140
		DataServerExplorer explorer = this.createServerExplorer();
141
		NewFeatureStoreParameters params = (NewFeatureStoreParameters) this.createTargetNewStoreParameters();
142

  
143
		String providerName = params.getDataStoreName();
144
		String explorerName = explorer.getProviderName();
145

  
146
		File outFile = this.getParameters().getFile(); //kmlFile;
147
		FeatureSet featureStore = featureSet;
148

  
149
		FLyrVect vectorLayer = null;
150
		String mimeType = this.getParameters().getMimeType(); //mtype;
151
		boolean useLabels = this.getParameters().getUseLabels(); //doLabels;
152
		boolean attsAsBalloon = this.getParameters().getAttsAsBalloon();
153
		ArrayList<ICoordTrans> ICoordTrans;
154

  
155
		List<ICoordTrans> transfList = new ArrayList<ICoordTrans>();
156

  
157
		ICoordTrans ct = this.getParameters().getSourceTransformation(); //vlayer.getCoordTrans();
158
		IProjection targetproj = this.getParameters().getTargetProjection();
159
//        if (reprojectTo4326) {
160
//		8
161
//            targetproj = CRSFactory.getCRS("EPSG:4326");
162
//            if (ct == null) {
163
//                transfList.add(this.getParameters().getSourceProjection().getCT(targetproj));
164
//            } else {
165
//                transfList.add(ct);
166
//                transfList.add(ct.getPDest().getCT(targetproj));
167
//            }
168
//        } else {
169
		if (ct == null) {
170
			if (targetproj == null) {
171
				targetproj = this.getParameters().getSourceProjection();
172
			}
173
			ct = this.getParameters().getSourceProjection().getCT(targetproj);
174
			transfList.add(ct);
175
		} else {
176
			targetproj = ct.getPDest();
177
			transfList.add(ct);
178
		}
179

  
180
		IGPEWriterHandler wh = null;
181
		FileOutputStream fos = null;
182
		String srs = targetproj.getAbrev();
183

  
184
		String[] fldNames = null;
185
		Envelope env = null;
186
		long count = 0;
187
		FeatureType ftype;
188

  
189
		try {
190
			count = featureSet.getSize();
191
			this.getTaskStatus().setRangeOfValues(0, count);
192
			if (this.getParameters().getExportAttributes().isActive()) {
193
				ftype = this.getParameters().getExportAttributes().getTargetFeatureType();
194
			} else {
195
				ftype = featureStore.getDefaultFeatureType();
196
			}
197
			fldNames = getAttributes(ftype);
198
			env = GeometryLocator.getGeometryManager().createEnvelope(Geometry.SUBTYPES.GEOM2D);
199
			this.initEnvelope(env, featureSet);
200
		} catch (DataException | CreateEnvelopeException | LocatorException e) {
201
			throw new ExportException(e);
202
		}
203

  
204
		try {
205
			env = reproject(env, transfList);
206
		} catch (CreateEnvelopeException ex) {
207
			throw new ExportException(ex);
208
		}
209

  
210
		Rectangle2D rect = new Rectangle2D.Double(
211
			env.getMinimum(0),
212
			env.getMinimum(1),
213
			env.getLength(0),
214
			env.getLength(1));
215

  
216
		File fixedFile = outFile;
217
		try {
218

  
219
			if (!outFile.getAbsolutePath().toLowerCase().endsWith(
220
				"." + this.getFileExtension().toLowerCase())) {
221

  
222
				fixedFile = new File(outFile.getAbsolutePath() + "." + getFileExtension());
223
			}
224

  
225
			wh = GPELocator.getGPEManager().createWriterByMimeType(mimeType);
226
			fos = new FileOutputStream(fixedFile);
227

  
228
			wh.setOutputStream(fos);
229
			wh.initialize();
230
			// ==========================================
231
			wh.startLayer(null, null, fixedFile.getName(), null, srs);
232
			// ==============     Styles    =============
233
			Map<ISymbol, KmlStyle> symsty = null;
234
			IXmlStreamWriter xmlw = getXmlStreamWriter(wh);
235
			if (true && xmlw != null && vectorLayer instanceof FLyrVect) {
236
				symsty = StyleUtils.getSymbolStyles((FLyrVect) vectorLayer,
237
					featureSet,
238
					attsAsBalloon,
239
					fldNames);
240
				Iterator<KmlStyle> iter = symsty.values().iterator();
241
				KmlStyle sty = null;
242
				while (iter.hasNext()) {
243
					sty = iter.next();
244
					writeStyle(xmlw, sty);
245
				}
246
			}
247
			// ==========================================
248
			wh.startBbox(null, new CoordinatesSequenceBbox(rect), srs);
249
			wh.endBbox();
250
			// ============= Writing feature ============
251
			IVectorLegend legend;
252
			if (vectorLayer instanceof FLyrVect) {
253
				legend = (IVectorLegend) ((FLyrVect) vectorLayer).getLegend();
254
			} else {
255
				legend = null;
256
			}
257
			writeFeatures(wh, xmlw, featureSet, fldNames, symsty, legend, transfList);
258

  
259
//            writeFeatures(wh, xmlw, featureSet, fldNames, symsty,
260
//                    (IVectorLegend) vectorLayer.getLegend());
261
			// ==========================================
262
			wh.endLayer();
263
			// ==========================================
264
			wh.close();
265
			fos.close();
266
		} catch (Exception exc) {
267
			throw new ExportException(exc);
268
		}
269

  
270
		this.getTaskStatus().setCurValue(count);
271
//        this.finishAction(fixedFile, targetproj);
272
		this.getTaskStatus().terminate();
273
		this.getTaskStatus().remove();
274

  
275
	}
276

  
277
	private String[] getAttributes(FeatureType ftype) {
278

  
279
		FeatureAttributeDescriptor[] atts = ftype.getAttributeDescriptors();
280

  
281
		FeatureAttributeDescriptor desc = null;
282
		List<String> list = new ArrayList<String>();
283
		for (int i = 0; i < atts.length; i++) {
284
			desc = atts[i];
285
			if (desc.getDataType().getType() != DataTypes.GEOMETRY) {
286
				list.add(desc.getName());
287
			}
288
		}
289
		return list.toArray(new String[0]);
290
	}
291

  
292
	private Geometry reproject(Geometry geom, List<ICoordTrans> transfList) {
293

  
294
		int sz = transfList.size();
295
		if (sz == 0) {
296
			return geom;
297
		} else {
298
			Geometry resp = geom.cloneGeometry();
299
			for (int i = 0; i < sz; i++) {
300
				resp.reProject(transfList.get(i));
301
			}
302
			return resp;
303
		}
304

  
305
	}
306

  
307
	public String getFileExtension() {
308
		return "kml";
309
	}
310

  
311
//    private void finishAction(File kmlfile, IProjection proj)
312
//            throws ExportException {
313
//        
314
//        this.createTargetOpenStoreParameters()
315
//
316
//        if (exporttoServiceFinishAction != null) {
317
//
318
//            /*
319
//             * Export is done. We notify with a SHPStoreParameters,
320
//             * not with the NewSHPParameters we have used:
321
//             */
322
//            DataManagerProviderServices dataman
323
//                    = (DataManagerProviderServices) DALLocator.getDataManager();
324
//
325
//            DataStoreParameters dsp = null;
326
//            try {
327
//                dsp = dataman.createStoreParameters("GPE");
328
//            } catch (Exception e) {
329
//                throw new ExportException(e); //"Cannot add resulting kml file to view", e);
330
//            }
331
//
332
//            dsp.setDynValue("File", kmlfile);
333
//            dsp.setDynValue("CRS", proj);
334
//
335
//            try {
336
//                dsp.validate();
337
//            } catch (ValidateDataParametersException e) {
338
//                throw new ExportException(e);
339
//            }
340
//            exporttoServiceFinishAction.finished(kmlfile.getName(), dsp);
341
//        }
342
//    }
343
	private void writeStyle(IXmlStreamWriter xmlw, KmlStyle sty) throws IOException {
344

  
345
		xmlw.writeStartElement(Kml2_1_Tags.STYLE);
346
		xmlw.writeStartAttribute(Kml2_1_Tags.ID);
347
		xmlw.writeValue(sty.getId());
348
		xmlw.writeEndAttributes();
349
		sty.writeXml(xmlw);
350
		xmlw.writeEndElement();
351
	}
352

  
353
	private IXmlStreamWriter getXmlStreamWriter(IGPEWriterHandler wh) {
354

  
355
		IGPEWriterHandlerImplementor imple = wh.getImplementor();
356
		if (!(imple instanceof GPEKmlWriterHandlerImplementor)) {
357
			/*
358
             * Unexpected class
359
			 */
360
			return null;
361
		}
362
		GPEKmlWriterHandlerImplementor kmlimple = null;
363
		kmlimple = (GPEKmlWriterHandlerImplementor) imple;
364
		IXmlStreamWriter xmlw = kmlimple.getXMLStreamWriter();
365
		return xmlw;
366
	}
367

  
368
	private void writeFeatures(
369
		IGPEWriterHandler gwh,
370
		IXmlStreamWriter xmlw,
371
		FeatureSet fset,
372
		String[] fieldNames,
373
		Map<ISymbol, KmlStyle> symsty,
374
		IVectorLegend lege,
375
		List<ICoordTrans> transfList) throws Exception {
376

  
377
		GeometryToGPEWriter gw = new GeometryToGPEWriter(gwh);
378
		DisposableIterator diter = fset.fastIterator();
379
		Feature feat = null;
380
		long count = 0;
381
		this.getTaskStatus().setCurValue(count);
382
		ISymbol sym = null;
383
		int nullGeometries = 0;
384
		while (diter.hasNext()) {
385
			feat = (Feature) diter.next();
386
			try {
387
				if (lege instanceof IVectorLegend) {
388
					sym = lege.getSymbolByFeature(feat);
389
				}
390
			} catch (MapContextException mce) {
391
				logger.info("While getting legend symbol.", mce);
392
			}
393
			KmlStyle kmlStyle;
394
			try {
395
				kmlStyle = symsty.get(sym);
396
			} catch (Exception e) {
397
				kmlStyle = null;
398
			}
399

  
400
			if (!writeFeature(feat, gwh, xmlw, gw, count, fieldNames, kmlStyle, transfList)) {
401
				nullGeometries++;
402
			};
403
			count++;
404
			this.getTaskStatus().setCurValue(count);
405
		}
406
		if (nullGeometries > 0) {
407
			logger.warn("Can't export " + nullGeometries + " features because source geometries are null.");
408
		}
409
		diter.dispose();
410
	}
411

  
412
	private boolean writeFeature(
413
		Feature feat,
414
		IGPEWriterHandler gwh,
415
		IXmlStreamWriter xmlw,
416
		GeometryToGPEWriter gw,
417
		long index,
418
		String[] fieldNames,
419
		KmlStyle ksty,
420
		List<ICoordTrans> transfList) throws IOException {
421

  
422
		Geometry geom = feat.getDefaultGeometry();
423

  
424
		if (geom == null) {
425
			return false;
426
		}
427

  
428
		String strindex = String.valueOf(index);
429

  
430
		if (this.getParameters().getUseLabels()) {
431
			String lbl = getLabelForFeature(feat);
432
			gwh.startFeature(strindex, "FEATURE", lbl);
433
		} else {
434
			gwh.startFeature(strindex, "FEATURE", "");
435
		}
436
		// =========================
437
		// Style
438
		if (ksty != null) {
439
			xmlw.writeStartElement(Kml2_1_Tags.STYLEURL);
440
			xmlw.writeValue("#" + ksty.getId());
441
			xmlw.writeEndElement();
442
		}
443
		// ===== Balloon ============
444
		if (this.getParameters().getAttsAsBalloon()) {
445
			writeBalloon(xmlw, feat, fieldNames);
446
		}
447

  
448
		// ============= Geometry
449

  
450
		/*
451
         * This has no effect if reprojection is not necessary
452
		 */
453
		geom = reproject(geom, transfList);
454
		gw.writeGeometry(geom, this.getParameters().getUseLabels());
455
		// ============= Attributes
456
		Object val = null;
457
		String fldname = null;
458
		for (int i = 0; i < fieldNames.length; i++) {
459
			val = feat.get(fieldNames[i]);
460
			fldname = fieldNames[i].replace(' ', '_');
461
			gwh.startElement("", fldname, val == null ? "" : val.toString());
462
			gwh.endElement();
463
		}
464
		// =========================
465
		gwh.endFeature();
466
		return true;
467
	}
468

  
469
	private String getLabelForFeature(Feature feat) {
470
		return "";
471

  
472
//        if (this.vectorLayer.isLabeled()) {
473
//
474
//            String[] flds = vectorLayer.getLabelingStrategy().getUsedFields();
475
//            int n = Math.min(flds.length, 2);
476
//            if (n == 0) {
477
//                return "";
478
//            } else {
479
//                String resp = "";
480
//                Object val = null;
481
//                if (n == 1) {
482
//                    val = feat.get(flds[0]);
483
//                    resp = (val == null) ? "" : val.toString();
484
//                } else {
485
//                    // n == 2
486
//                    val = feat.get(flds[0]);
487
//                    resp = (val == null) ? "" : val.toString();
488
//                    val = feat.get(flds[1]);
489
//                    resp = (val == null) ? resp : resp + ", " + val.toString();
490
//                }
491
//                return resp;
492
//            }
493
//
494
//        } else {
495
//            return "";
496
//        }
497
	}
498

  
499
	private void writeBalloon(IXmlStreamWriter xmlw, Feature feat, String[] fieldNames)
500
		throws IOException {
501

  
502
		xmlw.writeStartElement(Kml2_1_Tags.EXTENDED_DATA);
503
		String fldrep = null;
504
		Object val = null;
505
		for (int i = 0; i < fieldNames.length; i++) {
506
			fldrep = fieldNames[i].replace(' ', '_');
507
			xmlw.writeStartElement(Kml2_1_Tags.DATA);
508
			// Att =====================================================
509
			xmlw.writeStartAttribute(null, "name");
510
			xmlw.writeValue(fldrep);
511
			xmlw.writeEndAttributes();
512
			// Value =====================================================
513
			xmlw.writeStartElement(Kml2_1_Tags.VALUE);
514
			val = feat.get(fieldNames[i]);
515
			xmlw.writeValue(val == null ? "" : val.toString());
516
			xmlw.writeEndElement();
517
			// =============================================
518
			xmlw.writeEndElement();
519
		}
520
		xmlw.writeEndElement();
521

  
522
		/*
523
         *
524
<ExtendedData>
525
      <Data name="holeNumber">
526
        <value>1</value>
527
      </Data>
528
      <Data name="holeYardage">
529
        <value>234</value>
530
      </Data>
531
      <Data name="holePar">
532
        <value>4</value>
533
      </Data>
534
    </ExtendedData>
535
         *
536
		 */
537
	}
538

  
539
	private Envelope reproject(Envelope env, List<ICoordTrans> transfList) throws CreateEnvelopeException {
540

  
541
		int sz = transfList.size();
542
		if (sz == 0) {
543
			return env;
544
		} else {
545
			Envelope resp = env;
546
			try {
547
				for (int i = 0; i < sz; i++) {
548
					resp = resp.convert(transfList.get(i));
549
				}
550
			} catch (Exception exc) {
551

  
552
				// If this process fails, we'll use "emergency values":
553
				GeometryManager gm = GeometryLocator.getGeometryManager();
554
				double[] min = new double[2];
555
				double[] max = new double[2];
556
				IProjection targetproj = this.getParameters().getTargetProjection();
557
				if (targetproj.isProjected()) {
558
					min = new double[]{-20000000, -20000000};
559
					max = new double[]{20000000, 20000000};
560
				} else {
561
					min = new double[]{-180, -90};
562
					max = new double[]{180, 90};
563
				}
564

  
565
				resp = gm.createEnvelope(
566
					min[0], min[1],
567
					max[0], max[1],
568
					Geometry.SUBTYPES.GEOM2D);
569

  
570
			}
571
			return resp;
572
		}
573
	}
574

  
575
	private void initEnvelope(Envelope env, FeatureSet featureSet) {
576
		for (Feature feature : featureSet) {
577
			Geometry geometry = feature.getDefaultGeometry();
578
			if (geometry != null && geometry.isValid()) {
579
				env.add(geometry);
580
			}
581
		}
582
	}
583
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/service/ExportKMLParameters.java
1
package org.gvsig.gpe.exportto.kml.service;
2

  
3
//import org.gvsig.export.dbf.service.ExportDBFParameters;
4
import org.gvsig.export.ExportParametersGeometry;
5
import org.gvsig.tools.util.HasAFile;
6

  
7
/**
8
 *
9
 * @author jjdelcerro
10
 */
11
public interface ExportKMLParameters extends ExportParametersGeometry, HasAFile {
12
        public String getMimeType();
13
        public void setMimeType(String value);
14
        public boolean getUseLabels();
15
        public void setUseLabels(boolean value);
16
        public boolean getAttsAsBalloon();
17
        public void setAttsAsBalloon(boolean value);
18
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/service/ExportKMLParametersImpl.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.gpe.exportto.kml.service;
7

  
8
import java.io.File;
9
import org.apache.commons.io.FilenameUtils;
10
import org.cresques.cts.IProjection;
11
import org.gvsig.export.spi.AbstractExportParametersGeometry;
12
import org.gvsig.export.spi.ExportServiceFactory;
13
import org.gvsig.fmap.crs.CRSFactory;
14

  
15
/**
16
 *
17
 * @author osc
18
 */
19
public class ExportKMLParametersImpl         
20
        extends AbstractExportParametersGeometry
21
        implements ExportKMLParameters
22
    {
23
    private String mimeType = null;
24
    private boolean useLabels = false;
25
    private boolean attsAsBalloon = false;
26
    
27
    private File file;
28

  
29
    public ExportKMLParametersImpl(ExportServiceFactory factory) {
30
        super(factory);
31
	IProjection targetproj = CRSFactory.getCRS("EPSG:4326");
32
	this.setTargetProjection(targetproj);
33
	this.getExportAttributes().setActive(true);
34
    }
35
    
36
    @Override
37
    public String getServiceName() {
38
        return ExportKMLServiceFactory.SERVICE_NAME;
39
    }
40

  
41
    @Override
42
    public String getMimeType() {
43
        return this.mimeType;
44
    }
45

  
46
    @Override
47
    public boolean getUseLabels() {
48
        return this.useLabels;
49
    }
50

  
51
    @Override
52
    public boolean getAttsAsBalloon() {
53
        return this.attsAsBalloon;
54
    }
55
    
56
    @Override
57
    public File getFile() {
58
        return this.file;
59
    }
60

  
61
    @Override
62
    public void setFile(File file) {
63
        this.file = new File(FilenameUtils.removeExtension(file.getAbsolutePath()) + ".kml");
64
    }
65

  
66
    @Override
67
    public void setUseLabels(boolean value) {
68
        this.useLabels = value;
69
    }
70

  
71
    @Override
72
    public void setAttsAsBalloon(boolean value) {
73
        this.attsAsBalloon = value;
74
    }
75

  
76
    @Override
77
    public void setMimeType(String value) {
78
        this.mimeType = value;
79
    }
80
    
81
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/service/ExportKMLServiceFactory.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.gpe.exportto.kml.service;
7

  
8
import org.gvsig.export.ExportParameters;
9
import org.gvsig.export.spi.AbstractExportServiceFactory;
10

  
11
/**
12
 *
13
 * @author osc
14
 */
15
public class ExportKMLServiceFactory extends AbstractExportServiceFactory 
16
    {
17

  
18
    public static final String SERVICE_NAME = "KML";
19
    
20
    public ExportKMLServiceFactory() {
21
        super(
22
                SERVICE_NAME,
23
                "KML file",
24
                "KML file"
25
        );
26
    }
27

  
28
    @Override
29
    public ExportKMLService createService(ExportParameters parameters) {
30
        ExportKMLService service = new ExportKMLService(this, (ExportKMLParameters) parameters);
31
        return service;
32
    }
33

  
34
    @Override
35
    public ExportKMLParameters createParameters() {
36
        ExportKMLParameters parameters = new ExportKMLParametersImpl(this);
37
        return parameters;
38
    }
39

  
40
    @Override
41
    public boolean hasTabularSupport() {
42
        return true;
43
    }
44

  
45
    @Override
46
    public boolean hasVectorialSupport() {
47
        return true;
48
    }
49
    
50
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/KmlBalloonStyle.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.io.IOException;
4

  
5
import org.gvsig.gpe.prov.kml.utils.Kml2_1_Tags;
6
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
7

  
8

  
9
/**
10
 * Balloon style to show when user clicks on marker.
11
 * Currently not used because CDDATA is not written properly
12
 * (writer escapes it)
13
 * 
14
 * @author jldominguez
15
 *
16
 */
17
public class KmlBalloonStyle extends KmlStyle {
18

  
19
    private String[] fields = new String[0];
20
    
21
    public KmlBalloonStyle(String[] flds, String id) {
22
        setId(id);
23
        if (flds != null) {
24
            fields = flds;
25
        }
26
    }
27
    
28
    public void writeXml(IXmlStreamWriter writer) throws IOException {
29
        
30
        writer.writeStartElement(Kml2_1_Tags.BALLOON_STYLE);
31
        writer.writeStartElement(Kml2_1_Tags.TEXT);
32

  
33
        // ====================================
34
        String cddata = "<![CDATA[";
35
        cddata = cddata + htmlTable();
36
        cddata = cddata + "]]>";
37
        // ====================================
38
        writer.writeValue(cddata);
39
        writer.writeEndElement();
40
        writer.writeEndElement();
41
        
42
        /*
43
  <Style id="golf-balloon-style">
44
    <BalloonStyle>
45
      <text>
46
        <![CDATA[
47
          <table>
48
          <tr><td>This is $[name]</td><td> : </td><td>This is $[name]</td></tr>
49
          <tr><td>This is hole $[holeNumber]</td><td> : </td><td>This is $[name]</td></tr>
50
          <tr><td>The par for this hole is $[holePar]</td><td> : </td><td>This is $[name]</td></tr>
51
          <tr><td>The yardage is $[holeYardage]</td><td> : </td><td><b>This is $[name]</b></td></tr>
52
          </table>
53
        ]]>
54
      </text>
55
    </BalloonStyle>
56
  </Style>
57
           */
58

  
59
        
60
        
61
    }
62

  
63
    private String htmlTable() {
64
        
65
        String resp = "<table>\n";
66
        String aux = null;
67
        String auxrep = null;
68
        for (int i=0; i<fields.length; i++) {
69
            aux = fields[i];
70
            auxrep = aux.replace(' ', '_');
71
            auxrep = "$[" + auxrep + "]";
72
            resp = resp + "<tr><td>" + aux + "</td><td> : </td><td><b>" + auxrep + "</b></td></tr>\n";
73
        }
74
        resp = resp + "</table>\n";
75
        return resp;
76
    }
77

  
78
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/KmlLineStyle.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.io.IOException;
4

  
5
import org.gvsig.gpe.prov.kml.utils.Kml2_1_Tags;
6
import org.gvsig.gpe.prov.kml.utils.KmlUtilsParser;
7
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
8

  
9
public class KmlLineStyle extends KmlColorStyle {
10
	public float getWidth() {
11
		return width;
12
	}
13

  
14
	public void setWidth(float width) {
15
		this.width = width;
16
	}
17

  
18
	protected float width = 1;
19

  
20
	@Override
21
	public void writeXml(IXmlStreamWriter writer) throws IOException {
22
		writer.writeStartElement(Kml2_1_Tags.LINE_STYLE);
23
		
24
		writer.writeStartElement(Kml2_1_Tags.COLOR);
25
		writer.writeValue(KmlUtilsParser.fromColorToABGR(color));
26
		writer.writeEndElement();
27
		writer.writeStartElement(Kml2_1_Tags.WIDTH);
28
		writer.writeValue(width);		
29
		writer.writeEndElement();
30
		
31
		writer.writeEndElement();
32
	}
33

  
34

  
35
}
36

  
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/KmlPolygonStyle.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.io.IOException;
4

  
5
import org.gvsig.gpe.prov.kml.utils.Kml2_1_Tags;
6
import org.gvsig.gpe.prov.kml.utils.KmlUtilsParser;
7
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
8

  
9
/**
10
 * @author Francisco Jos? Pe?arrubia (fjp@scolab.es)
11
 * 
12
 * To convert from a symbol to a polygon style we will need a PolygonStyle
13
 * and a LineStyle if the outline has some width or to specify the color
14
 * @see @KmlCompoundStyle
15
 */
16
public class KmlPolygonStyle extends KmlColorStyle {
17
	protected boolean fill = true;
18
	protected boolean outline;
19

  
20
	public boolean isFill() {
21
		return fill;
22
	}
23

  
24
	public void setFill(boolean fill) {
25
		this.fill = fill;
26
	}
27

  
28
	public boolean isOutline() {
29
		return outline;
30
	}
31

  
32
	public void setOutline(boolean outline) {
33
		this.outline = outline;
34
	}
35

  
36
	@Override
37
	public void writeXml(IXmlStreamWriter writer) throws IOException {
38
		writer.writeStartElement(Kml2_1_Tags.POLY_STYLE);
39

  
40
		writer.writeStartElement(Kml2_1_Tags.COLOR);
41
		writer.writeValue(KmlUtilsParser.fromColorToABGR(color));
42
		writer.writeEndElement();
43
		if (!fill) {
44
			writer.writeStartElement(Kml2_1_Tags.POLY_FILL);
45
			writer.writeValue(0);
46
			writer.writeEndElement();
47
		}
48
		if (outline) {
49
			writer.writeStartElement(Kml2_1_Tags.POLY_OUTLINE);
50
			writer.writeValue(1);
51
			writer.writeEndElement();
52
		}
53

  
54
		writer.writeEndElement();
55

  
56
	}
57

  
58
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/KmlIconStyle.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.io.IOException;
4

  
5
import org.gvsig.gpe.prov.kml.utils.Kml2_1_Tags;
6
import org.gvsig.gpe.prov.kml.utils.KmlUtilsParser;
7
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
8

  
9
public class KmlIconStyle extends KmlColorStyle {
10
	
11
	protected float heading = 0;
12
	protected String href = null;
13
	protected float scale = 1;
14

  
15
	public float getScale() {
16
		return scale;
17
	}
18

  
19
	public void setScale(float scale) {
20
		this.scale = scale;
21
	}
22
	
23
	
24
	public void writeXml(IXmlStreamWriter writer) throws IOException {
25
		writer.writeStartElement(Kml2_1_Tags.ICON_STYLE);
26

  
27
		writer.writeStartElement(Kml2_1_Tags.COLOR);
28
		writer.writeValue(KmlUtilsParser.fromColorToABGR(color));
29
		writer.writeEndElement();
30
		
31
		writer.writeStartElement(Kml2_1_Tags.HEADING);
32
		writer.writeValue(heading);
33
		writer.writeEndElement();
34
		
35
		if (scale != 1) {
36
			writer.writeStartElement(Kml2_1_Tags.SCALE);
37
			writer.writeValue(scale);
38
			writer.writeEndElement();
39
		}
40
		if (href != null) {
41
			writer.writeStartElement(Kml2_1_Tags.ICON);
42
			writer.writeStartElement(Kml2_1_Tags.HREF);
43
			writer.writeValue(href);
44
			writer.writeEndElement();
45

  
46
			writer.writeEndElement();
47
		}
48

  
49
		
50
		writer.writeEndElement();
51

  
52
		
53
	}
54

  
55
	public float getHeading() {
56
		return heading;
57
	}
58

  
59
	public void setHeading(float heading) {
60
		this.heading = heading;
61
	}
62

  
63
	public String getHref() {
64
		return href;
65
	}
66

  
67
	public void setHref(String href) {
68
		this.href = href;
69
	}
70

  
71
}
72

  
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/StyleUtils.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.List;
6
import java.util.Map;
7

  
8
import org.gvsig.fmap.dal.exception.DataException;
9
import org.gvsig.fmap.dal.feature.Feature;
10
import org.gvsig.fmap.dal.feature.FeatureSet;
11
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
12
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
13
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
14
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
15
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
16
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
17
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
18
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
19
import org.gvsig.tools.dispose.DisposableIterator;
20

  
21

  
22
public class StyleUtils {
23
    
24
    public static Map<ISymbol, KmlStyle> getSymbolStyles(
25
        FLyrVect vlayer,
26
        FeatureSet fset,
27
        boolean balloon,
28
        String[] flds) throws Exception {
29
        
30
        boolean preventMarker = false;
31

  
32
        IVectorLegend leg = (IVectorLegend) vlayer.getLegend();
33
        Map<ISymbol, KmlStyle> resp = new HashMap<ISymbol, KmlStyle>();
34
        
35
        ISymbol defaultSym = leg.getDefaultSymbol();
36
        KmlStyle defaultStyle = getStyle(defaultSym);
37
        if (defaultSym != null && defaultStyle != null) {
38
            /*
39
             * This is used to set an empty icon style because
40
             * the geometry is not originally a point or multipoint 
41
             */
42
            preventMarker = !(defaultStyle instanceof KmlIconStyle);
43
            KmlCompoundStyle cs = new KmlCompoundStyle(); 
44
            cs.addStyle(defaultStyle);
45
            if (balloon) {
46
                // Not used, see javadoc of KmlBalloonStyle 
47
                // cs.addStyle(new KmlBalloonStyle(flds, "balloonStyle"));
48
            }
49
            if (preventMarker) {
50
                cs.addStyle(new KmlIconStyle());
51
            }
52
            cs.setId("defaultStyle");
53
            resp.put(defaultSym, cs);
54
        }
55
        
56
        if (leg instanceof IClassifiedVectorLegend) {
57
            
58
            IClassifiedVectorLegend cLeg = (IClassifiedVectorLegend) leg;
59
            ISymbol[] symbolsAux = cLeg.getSymbols();
60
            if (fset == null || symbolsAux.length < fset.getSize()) {
61
                
62
                for (int i=0; i < symbolsAux.length; i++) {
63
                    ISymbol s = symbolsAux[i];
64
                    KmlStyle style = getStyle(s);
65
                    if (s != null && style != null) {
66
                        preventMarker = !(style instanceof KmlIconStyle);
67
                        KmlCompoundStyle cs = new KmlCompoundStyle(); 
68
                        cs.addStyle(style);
69
                        if (balloon) {
70
                            // Not used, see javadoc of KmlBalloonStyle 
71
                            // cs.addStyle(new KmlBalloonStyle(flds, "bs" + Integer.toString(i)));
72
                        }
73
                        if (preventMarker) {
74
                            cs.addStyle(new KmlIconStyle());
75
                        }
76
                        cs.setId(Integer.toString(i));
77
                        resp.put(s, cs);
78
                    }
79
                }
80
            } else {
81
                DisposableIterator diter = null;
82
                diter = fset.fastIterator();
83
                Feature feat = null;
84
                int ind = 0;
85
                while (diter.hasNext()) {
86
                    feat = (Feature) diter.next();
87
                    ISymbol s = leg.getSymbolByFeature(feat);
88
                    KmlStyle style = getStyle(s);
89
                    if (s != null && style != null) {
90
                        preventMarker = !(style instanceof KmlIconStyle);
91
                        KmlCompoundStyle cs = new KmlCompoundStyle(); 
92
                        cs.addStyle(style);
93
                        if (balloon) {
94
                            // Not used, see javadoc of KmlBalloonStyle 
95
                            // cs.addStyle(new KmlBalloonStyle(flds, "bs" + Integer.toString(ind)));
96
                        }
97
                        if (preventMarker) {
98
                            cs.addStyle(new KmlIconStyle());
99
                        }
100
                        cs.setId(Integer.toString(ind));
101
                        resp.put(s, cs);
102
                        ind++;
103
                    }
104
                }
105
            }
106
        }
107
        return resp;
108
    }
109

  
110
    /**
111
     * Returns null if it cannot be rendered in KML
112
     * 
113
     * @param s
114
     * @return
115
     */
116
    public static KmlStyle getStyle(ISymbol s) {
117
        
118
        if (s == null) {
119
            return null;
120
        }
121
        
122
        if (s instanceof IPictureMarkerSymbol) {
123
            IPictureMarkerSymbol pms = (IPictureMarkerSymbol) s;
124
            String str = pms.getSource().toString();
125
            if (str != null && str.indexOf("http") == 0) {
126
                KmlIconStyle icoStyle = new KmlIconStyle();
127
                icoStyle.setColor(((IMarkerSymbol) s).getColor());
128
                icoStyle.setHref(str);
129
                float angKml = (float) radToKmlDeg(((IMarkerSymbol) s).getRotation());
130
                icoStyle.setHeading(angKml);
131
                return icoStyle;
132
            } else {
133
                // Simple marker not supported
134
                return null;
135
            }
136
        }
137
        
138
        if (s instanceof ILineSymbol) {
139
            ILineSymbol lSym = (ILineSymbol) s;
140
            KmlLineStyle lStyle = new KmlLineStyle();
141
            lStyle.setColor(lSym.getColor());
142
            lStyle.setWidth((float) lSym.getLineWidth());
143
            return lStyle;
144
        }
145

  
146
        if (s instanceof IFillSymbol) {
147
            
148
            IFillSymbol fSym = (IFillSymbol) s;
149
            KmlCompoundStyle cStyle = new KmlCompoundStyle();
150
            KmlLineStyle lStyle = new KmlLineStyle();
151
            ILineSymbol lSym = fSym.getOutline();
152
            lStyle.setColor(lSym.getColor());
153
            lStyle.setWidth((float) lSym.getLineWidth());
154

  
155
            KmlPolygonStyle fStyle = new KmlPolygonStyle();
156
            fStyle.setColor(fSym.getFillColor());
157
            fStyle.setOutline(fSym.hasOutline());
158
            fStyle.setFill(fSym.hasFill());
159
            
160
            cStyle.addStyle(lStyle);
161
            cStyle.addStyle(fStyle);
162
            return cStyle;
163
        }
164
        // Not supported
165
        return null;
166
    }
167
    
168
    
169
    public static double kmlDegToRad(double angleDegree) {
170
        double deg = 90 - angleDegree;
171
        return Math.toRadians(deg);
172
    }
173
    
174
    public static double radToKmlDeg(double rad) {
175
        double angleDegree = Math.toDegrees(rad);
176
        double deg = 90 - angleDegree;
177
        if (deg >= 360) {
178
            deg = deg - 360;
179
        }
180
        if (deg < 0) {
181
            deg = deg + 360;
182
        }
183
        return deg;
184
    }    
185
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/KmlColorStyle.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.awt.Color;
4

  
5
public abstract class KmlColorStyle extends KmlStyle {
6
	protected Color color = new Color(220, 10, 20, 80);
7

  
8
	public Color getColor() {
9
		return color;
10
	}
11

  
12
	public void setColor(Color color) {
13
		this.color = color;
14
	}
15
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/KmlLabelStyle.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.io.IOException;
4

  
5
import org.gvsig.gpe.prov.kml.utils.Kml2_1_Tags;
6
import org.gvsig.gpe.prov.kml.utils.KmlUtilsParser;
7
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
8

  
9
/**
10
 * @author Francisco Jos? Pe?arrubia (fjp@scolab.es)
11
 *
12
 * Labels are exported as features. Google Earth will render the attribute <name>
13
 * with this color.
14
 */
15
public class KmlLabelStyle extends KmlColorStyle {
16
	
17
	protected float scale = 1;
18

  
19
	public float getScale() {
20
		return scale;
21
	}
22

  
23
	public void setScale(float scale) {
24
		this.scale = scale;
25
	}
26

  
27
	@Override
28
	public void writeXml(IXmlStreamWriter writer) throws IOException {
29
		writer.writeStartElement(Kml2_1_Tags.LABEL_STYLE);
30

  
31
		writer.writeStartElement(Kml2_1_Tags.COLOR);
32
		writer.writeValue(KmlUtilsParser.fromColorToABGR(color));
33
		writer.writeEndElement();
34
		if (scale != 1) {
35
			writer.writeStartElement(Kml2_1_Tags.SCALE);
36
			writer.writeValue(scale);
37
			writer.writeEndElement();
38
		}
39

  
40
		writer.writeEndElement();
41

  
42

  
43
	}
44

  
45
}
46

  
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/KmlStyle.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.io.IOException;
4

  
5
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
6

  
7
/**
8
 * @author Francisco Jos? Pe?arrubia (fjp@scolab.es)
9
 *
10
 * Useful to extend it and support writing styles and exchanging info from and to
11
 * outside of the library (in order to avoid dependencies)
12
 */
13
public abstract class KmlStyle {
14
	protected String id;
15

  
16
	public String getId() {
17
		return id;
18
	}
19
	
20
	public void setId(String id) {
21
		this.id = id;
22
	}
23
	
24
	public abstract void writeXml(IXmlStreamWriter writer) throws IOException;
25

  
26

  
27
}
28

  
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.88/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/KmlCompoundStyle.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.io.IOException;
4
import java.util.ArrayList;
5
import java.util.List;
6

  
7
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
8

  
9
public class KmlCompoundStyle extends KmlStyle {
10
	
11
	protected KmlIconStyle iconStyle = null;
12
	protected KmlLineStyle lineStyle = null;
13
	protected KmlPolygonStyle polygonStyle = null;
14
	protected KmlLabelStyle labelStyle = null;
15
	// protected KmlBalloonStyle balloonStyle = null;
16
	
17
	
18
	public void writeXml(IXmlStreamWriter writer) throws IOException {
19
		if (iconStyle != null)
20
			iconStyle.writeXml(writer);
21
		if (lineStyle != null)
22
			lineStyle.writeXml(writer);
23
		if (polygonStyle != null)
24
			polygonStyle.writeXml(writer);
25
		if (labelStyle != null)
26
			labelStyle.writeXml(writer);
27
		/*
28
        if (balloonStyle != null)
29
            balloonStyle.writeXml(writer);
30
            */
31
	}
32
	
33
	public void addStyles(List<KmlStyle> list) {
34
	    
35
	    if (list != null) {
36
	        for (int i=0; i<list.size(); i++) {
37
	            addStyle(list.get(i));
38
	        }
39
	    }
40
	}
41
	
42

  
43
	public List<KmlStyle> getStyles() {
44
        
45
	    List<KmlStyle> resp = new ArrayList<KmlStyle>();
46
	    if (iconStyle != null) {
47
	        resp.add(iconStyle);
48
	    }
49
        if (lineStyle != null) {
50
            resp.add(lineStyle);
51
        }
52
        if (polygonStyle != null) {
53
            resp.add(polygonStyle);
54
        }
55
        if (labelStyle != null) {
56
            resp.add(labelStyle);
57
        }
58
	    return resp;
59
    }
60
	
61
	
62
	public void addStyle(KmlStyle sty) {
63
	    if (sty instanceof KmlIconStyle) {
64
	        this.iconStyle = (KmlIconStyle) sty;
65
	        return;
66
	    }
67
        if (sty instanceof KmlLineStyle) {
68
            this.lineStyle = (KmlLineStyle) sty;
69
            return;
70
        }
71
        if (sty instanceof KmlPolygonStyle) {
72
            this.polygonStyle = (KmlPolygonStyle) sty;
73
            return;
74
        }
75
        if (sty instanceof KmlLabelStyle) {
76
            this.labelStyle = (KmlLabelStyle) sty;
77
            return;
78
        }
79
        if (sty instanceof KmlCompoundStyle) {
80
            this.addStyles(((KmlCompoundStyle) sty).getStyles()); 
81
            return;
82
        }
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff