#include <HYDROData_Object.h>
#include <HYDROData_PolylineXY.h>
#include <HYDROData_Tool.h>
+#include <HYDROData_ShapeFile.h>
#include <BOPAlgo_BOP.hxx>
#include <BOPAlgo_Builder.hxx>
}
/**
- Import the land cover map from QGIS
- @param theFileName the name of file
- @return if the import is successful
+ Load attributes from DBF File
+///
*/
-bool HYDROData_LandCoverMap::ImportQGIS( const QString& theFileName )
+HYDROData_LandCoverMap::DBFStatus HYDROData_LandCoverMap::ImportDBF( const QString& theDBFFileName,
+ const QString& theFieldName,
+ const QStringList& theDBFValues,
+ const QStringList& theStricklerTypes,
+ QMap<int, int> theIndices )
{
- //TODO
- return false;
+ HYDROData_ShapeFile aDBFImporter;
+ if (aDBFImporter.DBF_OpenDBF(theDBFFileName))
+ return DBFStatus_OPEN_FILE_ERROR; //cant open file
+
+ QStringList FieldList = aDBFImporter.DBF_GetFieldList();
+ int FieldNameIndex = FieldList.indexOf(theFieldName);
+ if (FieldNameIndex == -1)
+ return DBFStatus_NO_SUCH_FIELD_ERROR; //no such field
+
+ std::vector<HYDROData_ShapeFile::DBF_AttrValue> theAttrV;
+ aDBFImporter.DBF_GetAttributeList(FieldNameIndex, theAttrV );
+
+ bool allOK = true;
+ Iterator anIt( *this );
+ for( ; anIt.More(); anIt.Next() )
+ {
+ int CurIndex = anIt.Index();
+ HYDROData_ShapeFile::DBF_AttrValue AValue = theAttrV[theIndices[CurIndex]];
+ int StricklerTypesInd = theDBFValues.indexOf(QString(AValue.myStrVal));
+ if ( StricklerTypesInd != -1)
+ anIt.SetStricklerType(theDBFValues[StricklerTypesInd]);
+ else
+ allOK = false;
+ }
+ if (allOK)
+ return DBFStatus_OK;
+ else
+ return DBFStatus_NO_DBFVALUES_CORRESPONDENCE_WARNING;
}
/**
- Export the land cover map to QGIS
- @param theFileName the name of file
- @return if the export is successful
+ Export attributes to DBF File
+///
*/
-bool HYDROData_LandCoverMap::ExportQGIS( const QString& theFileName ) const
+void HYDROData_LandCoverMap::ExportDBF( const QString& theDBFFileName,
+ const QString& theFieldName,
+ const QStringList& theDBFValues,
+ const QStringList& theStricklerTypes) const
{
- //TODO
- return false;
+ HYDROData_ShapeFile anExporter;
+ std::vector<HYDROData_ShapeFile::DBF_AttrValue> theAttrV;
+ Iterator anIt( *this );
+ for( ; anIt.More(); anIt.Next() )
+ {
+ QString CurST = anIt.StricklerType();
+ HYDROData_ShapeFile::DBF_AttrValue aCurAttrV;
+ aCurAttrV.myIsNull = false;
+ int StricklerTypesInd = theStricklerTypes.indexOf(CurST);
+ if (StricklerTypesInd != -1)
+ {
+ aCurAttrV.myStrVal = theDBFValues[StricklerTypesInd];
+ aCurAttrV.myFieldType = HYDROData_ShapeFile::DBF_FieldType_String;
+ theAttrV.push_back(aCurAttrV);
+ }
+ else
+ aCurAttrV.myIsNull = true;
+ }
+
+ anExporter.DBF_WriteFieldAndValues(theDBFFileName, theFieldName, HYDROData_ShapeFile::DBF_FieldType_String, theAttrV, true);
+
}
int HashCode( const gp_Pnt& thePoint, const Standard_Integer theUpper )
#include <HYDROData_Entity.h>
#include <TDataStd_ExtStringArray.hxx>
+#include <QMap>
DEFINE_STANDARD_HANDLE( HYDROData_LandCoverMap, HYDROData_Entity )
Handle(TDataStd_ExtStringArray) myArray;
};
+ enum DBFStatus
+ {
+ DBFStatus_OK,
+ DBFStatus_OPEN_FILE_ERROR,
+ DBFStatus_NO_SUCH_FIELD_ERROR,
+ DBFStatus_NO_DBFVALUES_CORRESPONDENCE_WARNING
+ };
+
HYDROData_LandCoverMap();
~HYDROData_LandCoverMap();
virtual const ObjectKind GetKind() const;
- bool ImportQGIS( const QString& theFileName );
- bool ExportQGIS( const QString& theFileName ) const;
+ DBFStatus ImportDBF( const QString& theDBFFileName,
+ const QString& theFieldName,
+ const QStringList& DBFValues,
+ const QStringList& StricklerTypes,
+ QMap<int, int> theIndices );
+
+ void ExportDBF( const QString& theDBFFileName,
+ const QString& theFieldName,
+ const QStringList& theDBFValues,
+ const QStringList& theStricklerTypes) const;
+
bool ExportTelemac( const QString& theFileName, double theDeflection ) const;
bool Add( const Handle( HYDROData_Object )&, const QString& theType );