29 #include <QProgressDialog>
31 #define FEATURE_BUFFER_SIZE 200
39 QMap<int, int> *oldToNewAttrIdx,
40 QString *errorMessage,
41 const QMap<QString, QVariant> *options
46 const QString &providerKey,
51 const QMap<QString, QVariant> *options,
52 QProgressDialog *progress )
54 , mAttributeCount( -1 )
55 , mProgress( progress )
106 if ( vectorProvider )
107 delete vectorProvider;
144 for (
int i = 0; i < attrs.count(); ++i )
152 QgsDebugMsgLevel( QString(
"moving field from pos %1 to %2" ).arg( i ).arg( dstIdx ), 3 );
179 .arg( errors.join(
"\n" ) );
208 const QString& providerKey,
211 QString *errorMessage,
212 bool skipAttributeCreation,
213 QMap<QString, QVariant> *options,
214 QProgressDialog *progress )
218 int shallTransform =
false;
225 if ( destCRS && destCRS->
isValid() )
229 shallTransform =
true;
234 outputCRS = &layer->
crs();
238 bool overwrite =
false;
239 bool forceSinglePartGeom =
false;
242 overwrite = options->take(
"overwrite" ).toBool();
243 forceSinglePartGeom = options->take(
"forceSinglePartGeometryType" ).toBool();
253 for (
int fldIdx = 0; fldIdx < fields.
count(); ++fldIdx )
255 fields[fldIdx].setName( fields[fldIdx].name().toLower() );
258 if ( !forceSinglePartGeom )
288 new QgsVectorLayerImport( uri, providerKey, fields, wkbType, outputCRS, overwrite, options, progress );
302 errorMessage->clear();
311 if ( skipAttributeCreation )
327 shallTransform =
false;
334 *errorMessage =
QObject::tr(
"Feature write errors:" );
345 if ( progress && progress->wasCanceled() )
349 *errorMessage +=
"\n" +
QObject::tr(
"Import was canceled at %1 of %2" ).arg( progress->value() ).arg( progress->maximum() );
363 if ( onlySelected && !ids.contains( fet.
id() ) )
366 if ( shallTransform )
380 QString msg =
QObject::tr(
"Failed to transform a point while drawing a feature with ID '%1'. Writing stopped. (Exception: %2)" )
381 .arg( fet.
id() ).arg( e.
what() );
384 *errorMessage +=
"\n" + msg;
389 if ( skipAttributeCreation )
404 progress->setValue( n );
428 if ( shallTransform )
437 *errorMessage +=
"\n" +
QObject::tr(
"Only %1 of %2 features written." ).arg( n - errors ).arg( n );
441 errorMessage->clear();