bool LineStringElementParser::parseElementStartTag(const NodeType::XMLNode& node, Attributes& attributes) { if (!handlesElement(node)) { CITYGML_LOG_ERROR(m_logger, "Expected start tag <" << NodeType::GML_LineStringNode << "> or <" << NodeType::GML_PointNode << "> but got <" << node.name() << "> at " << getDocumentLocation()); throw std::runtime_error("Unexpected start tag found."); } m_model = m_factory.createLineString(attributes.getCityGMLIDAttribute()); parseDimension(attributes); return true; }
bool CityObjectElementParser::parseChildElementEndTag(const NodeType::XMLNode& node, const std::string& characters) { if (m_model == nullptr) { throw std::runtime_error("CityObjectElementParser::parseChildElementEndTag called before CityObjectElementParser::parseElementStartTag"); } initializeAttributesSet(); if ( node == NodeType::GEN_StringAttributeNode || node == NodeType::GEN_DoubleAttributeNode || node == NodeType::GEN_IntAttributeNode || node == NodeType::GEN_DateAttributeNode || node == NodeType::GEN_UriAttributeNode) { m_lastAttributeName = ""; return true; } else if (node == NodeType::GEN_ValueNode) { if (!m_lastAttributeName.empty()) { m_model->setAttribute(m_lastAttributeName, characters); } else { CITYGML_LOG_WARN(m_logger, "Found value node (" << NodeType::GEN_ValueNode << ") outside attribute node... ignore."); } return true; } else if (attributesSet.count(node.typeID()) > 0) { if (!characters.empty()) { m_model->setAttribute(node.name(), characters); } return true; } else if (node == NodeType::BLDG_BoundedByNode || node == NodeType::BLDG_OuterBuildingInstallationNode || node == NodeType::BLDG_InteriorBuildingInstallationNode || node == NodeType::BLDG_InteriorFurnitureNode || node == NodeType::BLDG_RoomInstallationNode || node == NodeType::BLDG_InteriorRoomNode || node == NodeType::BLDG_OpeningNode || node == NodeType::APP_AppearanceNode || node == NodeType::APP_AppearanceMemberNode || node == NodeType::BLDG_Lod1MultiCurveNode || node == NodeType::BLDG_Lod1MultiSurfaceNode || node == NodeType::BLDG_Lod1SolidNode || node == NodeType::BLDG_Lod1TerrainIntersectionNode || node == NodeType::BLDG_Lod2GeometryNode || node == NodeType::BLDG_Lod2MultiCurveNode || node == NodeType::BLDG_Lod2MultiSurfaceNode || node == NodeType::BLDG_Lod2SolidNode || node == NodeType::BLDG_Lod2TerrainIntersectionNode || node == NodeType::BLDG_Lod3GeometryNode || node == NodeType::BLDG_Lod3MultiCurveNode || node == NodeType::BLDG_Lod3MultiSurfaceNode || node == NodeType::BLDG_Lod3SolidNode || node == NodeType::BLDG_Lod3TerrainIntersectionNode || node == NodeType::BLDG_Lod4GeometryNode || node == NodeType::BLDG_Lod4MultiCurveNode || node == NodeType::BLDG_Lod4MultiSurfaceNode || node == NodeType::BLDG_Lod4SolidNode || node == NodeType::BLDG_Lod4TerrainIntersectionNode || node == NodeType::GEN_Lod1GeometryNode || node == NodeType::GEN_Lod2GeometryNode || node == NodeType::GEN_Lod3GeometryNode || node == NodeType::GEN_Lod4GeometryNode || node == NodeType::GEN_Lod1TerrainIntersectionNode || node == NodeType::GEN_Lod2TerrainIntersectionNode || node == NodeType::GEN_Lod3TerrainIntersectionNode || node == NodeType::GEN_Lod4TerrainIntersectionNode || node == NodeType::GEN_Lod1ImplicitRepresentationNode || node == NodeType::GEN_Lod2ImplicitRepresentationNode || node == NodeType::GEN_Lod3ImplicitRepresentationNode || node == NodeType::GEN_Lod4ImplicitRepresentationNode || node == NodeType::VEG_Lod1ImplicitRepresentationNode || node == NodeType::VEG_Lod2ImplicitRepresentationNode || node == NodeType::VEG_Lod3ImplicitRepresentationNode || node == NodeType::VEG_Lod4ImplicitRepresentationNode || node == NodeType::CORE_ExternalReferenceNode || node == NodeType::BLDG_ConsistsOfBuildingPartNode || node == NodeType::FRN_Lod1GeometryNode || node == NodeType::FRN_Lod1TerrainIntersectionNode || node == NodeType::FRN_Lod1ImplicitRepresentationNode || node == NodeType::FRN_Lod2GeometryNode || node == NodeType::FRN_Lod2TerrainIntersectionNode || node == NodeType::FRN_Lod2ImplicitRepresentationNode || node == NodeType::FRN_Lod3GeometryNode || node == NodeType::FRN_Lod3TerrainIntersectionNode || node == NodeType::FRN_Lod3ImplicitRepresentationNode || node == NodeType::FRN_Lod4GeometryNode || node == NodeType::FRN_Lod4TerrainIntersectionNode || node == NodeType::FRN_Lod4ImplicitRepresentationNode || node == NodeType::CORE_GeneralizesToNode || node == NodeType::GML_MultiPointNode || node == NodeType::GRP_GroupMemberNode || node == NodeType::GRP_ParentNode || node == NodeType::LUSE_Lod1MultiSurfaceNode || node == NodeType::LUSE_Lod2MultiSurfaceNode || node == NodeType::LUSE_Lod3MultiSurfaceNode || node == NodeType::LUSE_Lod4MultiSurfaceNode || node == NodeType::DEM_ReliefComponentNode || node == NodeType::GEN_Lod0GeometryNode || node == NodeType::GEN_Lod0ImplicitRepresentationNode || node == NodeType::GEN_Lod0TerrainIntersectionNode || node == NodeType::TRANS_Lod0NetworkNode || node == NodeType::TRANS_TrafficAreaNode || node == NodeType::TRANS_AuxiliaryTrafficAreaNode || node == NodeType::TRANS_Lod1MultiSurfaceNode || node == NodeType::TRANS_Lod2MultiSurfaceNode || node == NodeType::TRANS_Lod3MultiSurfaceNode || node == NodeType::TRANS_Lod4MultiSurfaceNode || node == NodeType::WTR_Lod0MultiCurveNode || node == NodeType::WTR_Lod0MultiSurfaceNode || node == NodeType::WTR_Lod1MultiCurveNode || node == NodeType::WTR_Lod1MultiSurfaceNode || node == NodeType::WTR_Lod1SolidNode || node == NodeType::WTR_Lod2SolidNode || node == NodeType::WTR_Lod3SolidNode || node == NodeType::WTR_Lod4SolidNode || node == NodeType::WTR_Lod2SurfaceNode || node == NodeType::WTR_Lod3SurfaceNode || node == NodeType::WTR_Lod4SurfaceNode || node == NodeType::WTR_BoundedByNode) { return true; } return GMLFeatureCollectionElementParser::parseChildElementEndTag(node, characters); }
bool PolygonElementParser::parseElementStartTag(const NodeType::XMLNode& node, Attributes& attributes) { if (!handlesElement(node)) { CITYGML_LOG_ERROR(m_logger, "Expected start tag of PolygonObject but got <" << node.name() << "> at " << getDocumentLocation()); throw std::runtime_error("Unexpected start tag found."); } m_model = m_factory.createPolygon(attributes.getCityGMLIDAttribute()); return true; }
bool CityObjectElementParser::parseElementStartTag(const NodeType::XMLNode& node, Attributes& attributes) { initializeTypeIDTypeMap(); auto it = typeIDTypeMap.find(node.typeID()); if (it == typeIDTypeMap.end()) { CITYGML_LOG_ERROR(m_logger, "Expected start tag of CityObject but got <" << node.name() << "> at " << getDocumentLocation()); throw std::runtime_error("Unexpected start tag found."); } m_model = m_factory.createCityObject(attributes.getCityGMLIDAttribute(), static_cast<CityObject::CityObjectsType>(it->second)); return true; }