Quantum GIS API Documentation  master-ce49b66
src/core/qgsvectorfilewriter.h
Go to the documentation of this file.
00001 /***************************************************************************
00002                           qgsvectorfilewriter.h
00003                           generic vector file writer
00004                              -------------------
00005     begin                : Jun 6 2004
00006     copyright            : (C) 2004 by Tim Sutton
00007     email                : tim at linfiniti.com
00008  ***************************************************************************/
00009 
00010 /***************************************************************************
00011  *                                                                         *
00012  *   This program is free software; you can redistribute it and/or modify  *
00013  *   it under the terms of the GNU General Public License as published by  *
00014  *   the Free Software Foundation; either version 2 of the License, or     *
00015  *   (at your option) any later version.                                   *
00016  *                                                                         *
00017  ***************************************************************************/
00018 
00019 #ifndef _QGSVECTORFILEWRITER_H_
00020 #define _QGSVECTORFILEWRITER_H_
00021 
00022 #include "qgsvectorlayer.h"
00023 #include "qgsfield.h"
00024 #include "qgssymbolv2.h"
00025 #include <ogr_api.h>
00026 
00027 #include <QPair>
00028 
00029 
00030 class QgsSymbolLayerV2;
00031 class QTextCodec;
00032 
00042 class CORE_EXPORT QgsVectorFileWriter
00043 {
00044   public:
00045 
00046     enum WriterError
00047     {
00048       NoError = 0,
00049       ErrDriverNotFound,
00050       ErrCreateDataSource,
00051       ErrCreateLayer,
00052       ErrAttributeTypeUnsupported,
00053       ErrAttributeCreationFailed,
00054       ErrProjection,  // added in 1.5
00055       ErrFeatureWriteFailed, // added in 1.6
00056       ErrInvalidLayer, // added in 2.0
00057     };
00058 
00059     //added in 2.0
00060     enum SymbologyExport
00061     {
00062       NoSymbology = 0, //export only data
00063       FeatureSymbology, //Keeps the number of features and export symbology per feature
00064       SymbolLayerSymbology //Exports one feature per symbol layer (considering symbol levels)
00065     };
00066 
00083     static WriterError writeAsVectorFormat( QgsVectorLayer* layer,
00084                                             const QString& fileName,
00085                                             const QString& fileEncoding,
00086                                             const QgsCoordinateReferenceSystem *destCRS,
00087                                             const QString& driverName = "ESRI Shapefile",
00088                                             bool onlySelected = false,
00089                                             QString *errorMessage = 0,
00090                                             const QStringList &datasourceOptions = QStringList(),  // added in 1.6
00091                                             const QStringList &layerOptions = QStringList(),  // added in 1.6
00092                                             bool skipAttributeCreation = false, // added in 1.6
00093                                             QString *newFilename = 0, // added in 1.9
00094                                             SymbologyExport symbologyExport = NoSymbology, //added in 2.0
00095                                             double symbologyScale = 1.0 // added in 2.0
00096                                           );
00097 
00099     QgsVectorFileWriter( const QString& vectorFileName,
00100                          const QString& fileEncoding,
00101                          const QgsFields& fields,
00102                          QGis::WkbType geometryType,
00103                          const QgsCoordinateReferenceSystem* srs,
00104                          const QString& driverName = "ESRI Shapefile",
00105                          const QStringList &datasourceOptions = QStringList(), // added in 1.6
00106                          const QStringList &layerOptions = QStringList(), // added in 1.6
00107                          QString *newFilename = 0, // added in 1.9
00108                          SymbologyExport symbologyExport = NoSymbology//added in 2.0
00109                        );
00110 
00112     static QMap< QString, QString> supportedFiltersAndFormats();
00113 
00118     static QMap< QString, QString> ogrDriverList();
00119 
00121     static QString fileFilterString();
00122 
00124     static QString filterForDriver( const QString& driverName );
00125 
00127     static QString convertCodecNameForEncodingOption( const QString &codecName );
00128 
00130     WriterError hasError();
00131 
00135     QString errorMessage();
00136 
00138     bool addFeature( QgsFeature& feature, QgsFeatureRendererV2* renderer = 0, QGis::UnitType outputUnit = QGis::Meters );
00139 
00141     QMap<int, int> attrIdxToOgrIdx() { return mAttrIdxToOgrIdx; }
00142 
00144     ~QgsVectorFileWriter();
00145 
00150     static bool deleteShapeFile( QString theFileName );
00151 
00152     SymbologyExport symbologyExport() const { return mSymbologyExport; }
00153     void setSymbologyExport( SymbologyExport symExport ) { mSymbologyExport = symExport; }
00154 
00155     double symbologyScaleDenominator() const { return mSymbologyScaleDenominator; }
00156     void setSymbologyScaleDenominator( double d ) { mSymbologyScaleDenominator = d; }
00157 
00158   protected:
00160     OGRGeometryH createEmptyGeometry( QGis::WkbType wkbType );
00161 
00162     OGRDataSourceH mDS;
00163     OGRLayerH mLayer;
00164     OGRGeometryH mGeom;
00165 
00166     QgsFields mFields;
00167 
00169     WriterError mError;
00170     QString mErrorMessage;
00171 
00172     QTextCodec *mCodec;
00173 
00175     QGis::WkbType mWkbType;
00176 
00178     QMap<int, int> mAttrIdxToOgrIdx;
00179 
00180     SymbologyExport mSymbologyExport;
00181 
00182 #if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1700
00183     QMap< QgsSymbolLayerV2*, QString > mSymbolLayerTable;
00184 #endif
00185 
00187     double mSymbologyScaleDenominator;
00188 
00189   private:
00190     static bool driverMetadata( QString driverName, QString &longName, QString &trLongName, QString &glob, QString &ext );
00191     void createSymbolLayerTable( QgsVectorLayer* vl,  const QgsCoordinateTransform* ct, OGRDataSourceH ds );
00192     OGRFeatureH createFeature( QgsFeature& feature );
00193     bool writeFeature( OGRLayerH layer, OGRFeatureH feature );
00194 
00196     WriterError exportFeaturesSymbolLevels( QgsVectorLayer* layer, QgsFeatureIterator& fit, const QgsCoordinateTransform* ct, QString* errorMessage = 0 );
00197     double mmScaleFactor( double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits );
00198     double mapUnitScaleFactor( double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits );
00199     QgsRenderContext renderContext() const;
00200     void startRender( QgsVectorLayer* vl ) const;
00201     void stopRender( QgsVectorLayer* vl ) const;
00202     QgsFeatureRendererV2* symbologyRenderer( QgsVectorLayer* vl ) const;
00204     void addRendererAttributes( QgsVectorLayer* vl, QgsAttributeList& attList );
00205 
00206 };
00207 
00208 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines