diff --git a/Code/IO/otbKMLVectorDataIO.txx b/Code/IO/otbKMLVectorDataIO.txx index f33cd0a3c0dd8e2ca753732a468b7b2519f40765..97f8e7053d934529a4c9e549f7d60e93de159706 100644 --- a/Code/IO/otbKMLVectorDataIO.txx +++ b/Code/IO/otbKMLVectorDataIO.txx @@ -40,25 +40,6 @@ #include "ogrsf_frmts.h" -using kmldom::ElementPtr; -using kmldom::FeaturePtr; -using kmldom::KmlPtr; -using kmldom::KmlFactory; -using kmldom::DocumentPtr; -using kmldom::FolderPtr; -using kmldom::ContainerPtr; -using kmldom::GeometryPtr; -using kmldom::MultiGeometryPtr; -using kmldom::PlacemarkPtr; -using kmldom::CoordinatesPtr; -using kmldom::LineStringPtr; -using kmldom::LinearRingPtr; -using kmldom::PolygonPtr; -using kmldom::ModelPtr; -using kmldom::OuterBoundaryIsPtr; -using kmldom::InnerBoundaryIsPtr; - - namespace otb { template<class TData> @@ -94,10 +75,10 @@ KMLVectorDataIO<TData>::CanReadFile( const char* filename ) const // Get the features of the kml file, read into the root template<class TData> -const FeaturePtr -KMLVectorDataIO<TData>::GetRootFeature(const ElementPtr& root) +const kmldom::FeaturePtr +KMLVectorDataIO<TData>::GetRootFeature(const kmldom::ElementPtr& root) { - const KmlPtr kml = kmldom::AsKml(root); + const kmldom::KmlPtr kml = kmldom::AsKml(root); if (kml && kml->has_feature()) { return kml->get_feature(); @@ -119,18 +100,18 @@ KMLVectorDataIO<TData>::PrintIndented(std::string item, int depth) template<class TData> void -KMLVectorDataIO<TData>::WalkFeature(const FeaturePtr& feature, DataNodePointerType father) +KMLVectorDataIO<TData>::WalkFeature(const kmldom::FeaturePtr& feature, DataNodePointerType father) { DataNodePointerType node = NULL; if (feature) { - if (const ContainerPtr container = kmldom::AsContainer(feature)) + if (const kmldom::ContainerPtr container = kmldom::AsContainer(feature)) { WalkContainer(container,father); } - else if (const PlacemarkPtr placemark = kmldom::AsPlacemark(feature)) + else if (const kmldom::PlacemarkPtr placemark = kmldom::AsPlacemark(feature)) { WalkGeometry(placemark->get_geometry(),father); } @@ -144,14 +125,14 @@ KMLVectorDataIO<TData>::WalkFeature(const FeaturePtr& feature, DataNodePointerTy template<class TData> void -KMLVectorDataIO<TData>::WalkContainer(const ContainerPtr& container, DataNodePointerType father) +KMLVectorDataIO<TData>::WalkContainer(const kmldom::ContainerPtr& container, DataNodePointerType father) { DataNodePointerType node = NULL; for (size_t i = 0; i < container->get_feature_array_size(); ++i) { - FeaturePtr feature = container->get_feature_array_at(i); + kmldom::FeaturePtr feature = container->get_feature_array_at(i); switch (feature->Type()) { case kmldom::Type_Document: @@ -217,7 +198,7 @@ KMLVectorDataIO<TData>::WalkContainer(const ContainerPtr& container, DataNodePoi // Walk through a geometry and create a GeometryNode template<class TData> void -KMLVectorDataIO<TData>::WalkGeometry(const GeometryPtr& geometry, DataNodePointerType father) +KMLVectorDataIO<TData>::WalkGeometry(const kmldom::GeometryPtr& geometry, DataNodePointerType father) { // Creation of a node @@ -268,7 +249,7 @@ KMLVectorDataIO<TData>::WalkGeometry(const GeometryPtr& geometry, DataNodePointe } // Recurse into <MultiGeometry>. - if (const MultiGeometryPtr multigeometry = kmldom::AsMultiGeometry(geometry)) + if (const kmldom::MultiGeometryPtr multigeometry = kmldom::AsMultiGeometry(geometry)) { DataNodePointerType multi = DataNodeType::New(); multi->SetNodeType(FEATURE_COLLECTION); @@ -285,12 +266,12 @@ template<class TData> typename KMLVectorDataIO<TData> ::DataNodePointerType KMLVectorDataIO<TData> -::ConvertGeometryToPointNode(const GeometryPtr& geometry) +::ConvertGeometryToPointNode(const kmldom::GeometryPtr& geometry) { if (geometry == NULL) { - itkGenericExceptionMacro(<<"Failed to convert GeometryPtr to PointNode"); + itkGenericExceptionMacro(<<"Failed to convert kmldom::GeometryPtr to PointNode"); } const kmldom::PointPtr pt = kmldom::AsPoint(geometry); @@ -314,16 +295,16 @@ template<class TData> typename KMLVectorDataIO<TData> ::DataNodePointerType KMLVectorDataIO<TData> -::ConvertGeometryToLineStringNode(const GeometryPtr& geometry) +::ConvertGeometryToLineStringNode(const kmldom::GeometryPtr& geometry) { if (geometry == NULL) { - itkGenericExceptionMacro(<<"Failed to convert GeometryPtr to LineNode"); + itkGenericExceptionMacro(<<"Failed to convert kmldom::GeometryPtr to LineNode"); } - const LineStringPtr ls = kmldom::AsLineString(geometry); - const CoordinatesPtr coords = ls->get_coordinates(); + const kmldom::LineStringPtr ls = kmldom::AsLineString(geometry); + const kmldom::CoordinatesPtr coords = ls->get_coordinates(); int array_size = coords->get_coordinates_array_size(); LinePointerType line = LineType::New(); @@ -350,16 +331,16 @@ template<class TData> typename KMLVectorDataIO<TData> ::DataNodePointerType KMLVectorDataIO<TData> -::ConvertGeometryToLinearRingNode(const GeometryPtr& geometry) +::ConvertGeometryToLinearRingNode(const kmldom::GeometryPtr& geometry) { if (geometry == NULL) { - itkGenericExceptionMacro(<<"Failed to convert GeometryPtr to LineNode"); + itkGenericExceptionMacro(<<"Failed to convert kmldom::GeometryPtr to LineNode"); } - const LinearRingPtr lr = kmldom::AsLinearRing(geometry); - const CoordinatesPtr coords = lr->get_coordinates(); + const kmldom::LinearRingPtr lr = kmldom::AsLinearRing(geometry); + const kmldom::CoordinatesPtr coords = lr->get_coordinates(); int array_size = coords->get_coordinates_array_size(); LinePointerType line = LineType::New(); @@ -386,27 +367,27 @@ template<class TData> typename KMLVectorDataIO<TData> ::DataNodePointerType KMLVectorDataIO<TData> -::ConvertGeometryToPolygonNode(const GeometryPtr& geometry) +::ConvertGeometryToPolygonNode(const kmldom::GeometryPtr& geometry) { if (geometry == NULL) { - itkGenericExceptionMacro(<<"Failed to convert GeometryPtr to LineNode"); + itkGenericExceptionMacro(<<"Failed to convert kmldom::GeometryPtr to LineNode"); } // Get the polygon - const PolygonPtr polygonKml = kmldom::AsPolygon(geometry); + const kmldom::PolygonPtr polygonKml = kmldom::AsPolygon(geometry); PolygonPointerType extRing = PolygonType::New(); PolygonListPointerType intRings = PolygonListType::New(); // Read the outerboundaryis of the polygon if ( polygonKml->has_outerboundaryis()) { - const OuterBoundaryIsPtr outerboundaryis = polygonKml->get_outerboundaryis(); + const kmldom::OuterBoundaryIsPtr outerboundaryis = polygonKml->get_outerboundaryis(); if (outerboundaryis->has_linearring()) { - const LinearRingPtr lr = outerboundaryis->get_linearring(); - const CoordinatesPtr coords = lr->get_coordinates(); + const kmldom::LinearRingPtr lr = outerboundaryis->get_linearring(); + const kmldom::CoordinatesPtr coords = lr->get_coordinates(); int array_size = coords->get_coordinates_array_size(); @@ -428,11 +409,11 @@ KMLVectorDataIO<TData> // Read the innerboundaryis of the polygon for (unsigned int intRingIndex=0;intRingIndex<polygonKml->get_innerboundaryis_array_size();++intRingIndex) { - const InnerBoundaryIsPtr innerboundaryis = polygonKml->get_innerboundaryis_array_at(intRingIndex); + const kmldom::InnerBoundaryIsPtr innerboundaryis = polygonKml->get_innerboundaryis_array_at(intRingIndex); if (innerboundaryis->has_linearring()) { - const LinearRingPtr lr = innerboundaryis->get_linearring(); - const CoordinatesPtr coords = lr->get_coordinates(); + const kmldom::LinearRingPtr lr = innerboundaryis->get_linearring(); + const kmldom::CoordinatesPtr coords = lr->get_coordinates(); int array_size = coords->get_coordinates_array_size(); PolygonPointerType ring = PolygonType::New(); @@ -489,7 +470,7 @@ KMLVectorDataIO<TData> // Parse the file. std::string errors; - ElementPtr root = kmldom::Parse(kml, &errors); + kmldom::ElementPtr root = kmldom::Parse(kml, &errors); if (!root) { @@ -503,7 +484,7 @@ KMLVectorDataIO<TData> itk::MetaDataDictionary & dict = data->GetMetaDataDictionary(); itk::EncapsulateMetaData<std::string>(dict, MetaDataKey::ProjectionRefKey, projectionRef ); - const FeaturePtr feature = GetRootFeature(root); + const kmldom::FeaturePtr feature = GetRootFeature(root); if (feature) { @@ -564,13 +545,13 @@ template<class TData> m_Kept = 0; //Create the factory - KmlFactory* factory = KmlFactory::GetFactory(); + kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); if (factory == NULL) { itkExceptionMacro(<<"Impossible to create the KML Factory to write file "<<this->m_FileName); } - KmlPtr kml = factory->CreateKml(); + kmldom::KmlPtr kml = factory->CreateKml(); // Retrieving root node DataTreeConstPointerType tree = data->GetDataTree(); @@ -581,9 +562,9 @@ template<class TData> TreeIteratorType it(tree); it.GoToBegin(); - DocumentPtr currentDocument = NULL; - FolderPtr currentFolder = NULL; - MultiGeometryPtr currentMultiGeometry = NULL; + kmldom::DocumentPtr currentDocument = NULL; + kmldom::FolderPtr currentFolder = NULL; + kmldom::MultiGeometryPtr currentMultiGeometry = NULL; InternalTreeNodeType * inputRoot = const_cast<InternalTreeNodeType *>(tree->GetRoot()); @@ -606,7 +587,7 @@ template<class TData> } template<class TData> - void KMLVectorDataIO<TData>::ProcessNodeWrite(InternalTreeNodeType * source, KmlFactory* factory, KmlPtr kml, DocumentPtr currentDocument, FolderPtr currentFolder, MultiGeometryPtr currentMultiGeometry) + void KMLVectorDataIO<TData>::ProcessNodeWrite(InternalTreeNodeType * source, kmldom::KmlFactory* factory, kmldom::KmlPtr kml, kmldom::DocumentPtr currentDocument, kmldom::FolderPtr currentFolder, kmldom::MultiGeometryPtr currentMultiGeometry) { // Note that we force a precise structure when we write a kml file. // We will necessary have a <document> that will contain a <folder>. @@ -630,7 +611,7 @@ template<class TData> } case DOCUMENT: { - DocumentPtr document = factory->CreateDocument(); + kmldom::DocumentPtr document = factory->CreateDocument(); if (dataNode->HasField("name")) { std::string fieldname = dataNode->GetFieldAsString("name"); @@ -643,7 +624,7 @@ template<class TData> } case FOLDER: { - FolderPtr folder = factory->CreateFolder(); + kmldom::FolderPtr folder = factory->CreateFolder(); std::string fieldname = dataNode->GetFieldAsString("name"); folder->set_name(fieldname); currentDocument->add_feature(folder); @@ -654,7 +635,7 @@ template<class TData> case FEATURE_POINT: { // Create <coordinates> - CoordinatesPtr coordinates = factory->CreateCoordinates(); + kmldom::CoordinatesPtr coordinates = factory->CreateCoordinates(); PointType pointCoord = dataNode->GetPoint(); if (DataNodeType::Dimension>2) { @@ -676,7 +657,7 @@ template<class TData> else { - PlacemarkPtr placemark = factory->CreatePlacemark(); + kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_geometry(point); if (currentFolder!= NULL) { @@ -696,8 +677,8 @@ template<class TData> VertexListConstPointerType vertexList = dataNode->GetLine()->GetVertexList(); // Create <coordinates> - CoordinatesPtr coordinates = factory->CreateCoordinates(); - LineStringPtr line = factory->CreateLineString(); + kmldom::CoordinatesPtr coordinates = factory->CreateCoordinates(); + kmldom::LineStringPtr line = factory->CreateLineString(); typename VertexListType::ConstIterator vIt = vertexList->Begin(); @@ -722,7 +703,7 @@ template<class TData> } else { - PlacemarkPtr placemark = factory->CreatePlacemark(); + kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_geometry(line); if (currentFolder!= NULL) { @@ -739,15 +720,15 @@ template<class TData> {//TODO refine the solution of drawing the polygon 1m above the ground // In a polygon we just can find any LinearRings - LinearRingPtr line = factory->CreateLinearRing(); - PolygonPtr polygon = factory->CreatePolygon(); + kmldom::LinearRingPtr line = factory->CreateLinearRing(); + kmldom::PolygonPtr polygon = factory->CreatePolygon(); polygon->set_extrude(true); polygon->set_altitudemode(1);//ALTITUDEMODE_RELATIVETOGROUND - CoordinatesPtr coordinates = factory->CreateCoordinates(); - OuterBoundaryIsPtr outerboundaryis = factory->CreateOuterBoundaryIs(); - InnerBoundaryIsPtr innerboundaryis = factory->CreateInnerBoundaryIs(); + kmldom::CoordinatesPtr coordinates = factory->CreateCoordinates(); + kmldom::OuterBoundaryIsPtr outerboundaryis = factory->CreateOuterBoundaryIs(); + kmldom::InnerBoundaryIsPtr innerboundaryis = factory->CreateInnerBoundaryIs(); VertexListConstPointerType vertexList = dataNode->GetPolygonExteriorRing()->GetVertexList(); @@ -843,7 +824,7 @@ template<class TData> } else { - PlacemarkPtr placemark = factory->CreatePlacemark(); + kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_geometry(polygon); if (currentFolder!= NULL) { @@ -859,9 +840,9 @@ template<class TData> // MultiGeometry case FEATURE_COLLECTION: { - MultiGeometryPtr multi = factory->CreateMultiGeometry(); + kmldom::MultiGeometryPtr multi = factory->CreateMultiGeometry(); currentMultiGeometry = multi; - PlacemarkPtr placemark = factory->CreatePlacemark(); + kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_geometry(multi); if (currentFolder!= NULL) {