6 #include "KmlFeatureTagWriter.h"
8 #include "GeoDataOverlay.h"
9 #include "GeoDataTimeStamp.h"
10 #include "GeoDataTimeSpan.h"
11 #include "GeoDataDocument.h"
12 #include "GeoDataStyle.h"
13 #include "GeoDataStyleMap.h"
14 #include "GeoDataExtendedData.h"
15 #include "GeoDataLookAt.h"
16 #include "GeoDataPlacemark.h"
17 #include "GeoDataCamera.h"
18 #include "GeoWriter.h"
19 #include "GeoDataRegion.h"
20 #include "GeoDataLatLonAltBox.h"
21 #include "KmlElementDictionary.h"
22 #include "KmlObjectTagWriter.h"
23 #include "KmlOsmPlacemarkDataTagWriter.h"
24 #include "OsmPlacemarkData.h"
31 KmlFeatureTagWriter::KmlFeatureTagWriter(
const QString &elementName)
32 : m_elementName( elementName )
37 bool KmlFeatureTagWriter::write(
const Marble::GeoNode *node, GeoWriter &writer )
const
39 const GeoDataFeature *feature =
static_cast<const GeoDataFeature*
>(node);
41 if (
const GeoDataDocument *document = geodata_cast<GeoDataDocument>(feature)) {
44 if( (document->id().isEmpty())
45 && (document->name().isEmpty())
46 && (document->targetId().isEmpty())
47 && (document->styles().count() == 0)
48 && (document->styleMaps().count() == 0)
49 && (document->extendedData().isEmpty())
50 && (document->featureList().count() == 1) ) {
51 writeElement( document->featureList()[0], writer );
56 writer.writeStartElement( m_elementName );
58 KmlObjectTagWriter::writeIdentifiers( writer, feature );
60 writer.writeOptionalElement( kml::kmlTag_name, feature->name() );
61 writer.writeOptionalElement( kml::kmlTag_visibility,
QString::number( feature->isVisible() ),
"1" );
62 writer.writeOptionalElement(
"address", feature->address() );
64 if( !feature->description().isEmpty() ) {
65 writer.writeStartElement(
"description" );
66 if( feature->descriptionIsCDATA() ) {
67 writer.writeCDATA( feature->description() );
69 writer.writeCharacters( feature->description() );
71 writer.writeEndElement();
74 GeoDataLookAt
const * lookAt =
dynamic_cast<const GeoDataLookAt*
>( feature->abstractView() );
76 writeElement( lookAt, writer );
78 GeoDataCamera
const *
camera =
dynamic_cast<const GeoDataCamera*
>( feature->abstractView() );
80 writeElement(
camera, writer );
83 if( feature->timeStamp().when().isValid() ) {
84 writeElement( &feature->timeStamp(), writer );
87 if( feature->timeSpan().isValid() ) {
88 writeElement( &feature->timeSpan(), writer );
91 if ( !feature->region().latLonAltBox().isNull() ) {
92 writeElement( &feature->region(), writer );
95 bool const result = writeMid( node, writer );
97 if (geodata_cast<GeoDataPlacemark>(feature)) {
101 if( !feature->extendedData().isEmpty() ) {
102 writeElement( &feature->extendedData(), writer );
105 writer.writeEndElement();