|
Quantum GIS API Documentation
master-ce49b66
|
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