7 #include "KmlLinearRingTagHandler.h"
9 #include "MarbleDebug.h"
11 #include "KmlElementDictionary.h"
12 #include "KmlObjectTagHandler.h"
13 #include "GeoDataPlacemark.h"
14 #include "GeoDataPolygon.h"
15 #include "GeoDataMultiGeometry.h"
16 #include "GeoDataLinearRing.h"
18 #include "GeoParser.h"
24 KML_DEFINE_TAG_HANDLER( LinearRing )
26 GeoNode* KmlLinearRingTagHandler::parse( GeoParser& parser )
const
28 Q_ASSERT(parser.isStartElement() && parser.isValidElement(
QLatin1String(kmlTag_LinearRing)));
30 GeoStackItem parentItem = parser.parentElement();
32 if( parentItem.represents( kmlTag_outerBoundaryIs ) ) {
33 GeoDataLinearRing linearRing;
34 KmlObjectTagHandler::parseIdentifiers( parser, &linearRing );
35 parentItem.nodeAs<GeoDataPolygon>()->setOuterBoundary( linearRing );
36 return &parentItem.nodeAs<GeoDataPolygon>()->outerBoundary();
38 }
else if( parentItem.represents( kmlTag_innerBoundaryIs ) ) {
39 GeoDataLinearRing linearRing;
40 KmlObjectTagHandler::parseIdentifiers( parser, &linearRing );
41 parentItem.nodeAs<GeoDataPolygon>()->appendInnerBoundary( linearRing );
42 return &parentItem.nodeAs<GeoDataPolygon>()->innerBoundaries().last();
44 }
else if( parentItem.represents( kmlTag_Placemark ) ) {
45 GeoDataLinearRing *linearRing =
new GeoDataLinearRing;
46 KmlObjectTagHandler::parseIdentifiers( parser, linearRing );
47 GeoDataPlacemark *placemark = parentItem.nodeAs<GeoDataPlacemark>();
48 placemark->setGeometry( linearRing );
49 return placemark->geometry();
51 }
else if( parentItem.is<GeoDataMultiGeometry>() ) {
52 GeoDataLinearRing *linearRing =
new GeoDataLinearRing;
53 KmlObjectTagHandler::parseIdentifiers( parser, linearRing );
54 parentItem.nodeAs<GeoDataMultiGeometry>()->append( linearRing );