17#include "moc_qgsvectorwarper.cpp"
30 , mDestinationCrs( destinationCrs )
39 QVector<QgsPointXY> sourcePoints;
40 sourcePoints.reserve( mPoints.size() );
41 QVector<QgsPointXY> destinationPoints;
42 destinationPoints.reserve( mPoints.size() );
45 sourcePoints << gcpPoint.sourcePoint();
46 destinationPoints << gcpPoint.transformedDestinationPoint( mDestinationCrs, context );
82 mError = QObject::tr(
"An error occurred while transforming a feature" );
95 :
QgsTask( tr(
"Warping %1" ).arg( fileName ),
QgsTask::CanCancel )
98 , mDestinationCrs( destinationCrs )
99 , mDestFileName( fileName )
106 mFields = layer->
fields();
121 mFeedback = std::make_unique<QgsFeedback>();
125 const QString fileExtension = QFileInfo( mDestFileName ).completeSuffix();
128 std::unique_ptr<QgsVectorFileWriter> exporter(
QgsVectorFileWriter::create( mDestFileName, mFields, mWkbType, mDestinationCrs, mTransformContext, saveOptions ) );
129 if ( exporter->hasError() )
131 mErrorMessage = exporter->errorMessage();
139 const double newProgress = 100.0 * count / mFeatureCount;
141 if ( static_cast<int>( newProgress * 10 ) != static_cast<int>( mLastProgress * 10 ) )
143 mLastProgress = newProgress;
144 emit progressChanged( newProgress );
149 const bool res = warper.transformFeatures( iterator, exporter.get(), mTransformContext, mFeedback.get() );
152 mErrorMessage = warper.error();
153 mResult = Result::Error;
156 mResult = mFeedback->isCanceled() ? Result::Canceled : Result::Success;
158 return mResult == Result::Success;
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
An interface for objects which accept features via addFeature(s) methods.
virtual bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())
Adds a single feature to the sink.
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
virtual QString lastError() const
Returns the most recent error encountered by the sink, e.g.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
bool isCanceled() const
Tells whether the operation has been canceled already.
void setProcessedCount(unsigned long long processedCount)
Sets the current processed objects count for the feedback object.
void processedCountChanged(unsigned long long processedCount)
Emitted when the feedback object reports a change in the number of processed objects.
Contains properties of a ground control point (GCP).
A geometry is the spatial representation of a feature.
QgsCoordinateTransformContext transformContext() const
Returns the layer data provider coordinate transform context or a default transform context if the la...
Abstract base class for long running background tasks.
virtual void cancel()
Notifies the task that it should terminate.
Options to pass to writeAsVectorFormat()
QString driverName
OGR driver to use.
static QString driverForExtension(const QString &extension)
Returns the OGR driver name for a specified file extension.
static QgsVectorFileWriter * create(const QString &fileName, const QgsFields &fields, Qgis::WkbType geometryType, const QgsCoordinateReferenceSystem &srs, const QgsCoordinateTransformContext &transformContext, const QgsVectorFileWriter::SaveVectorOptions &options, QgsFeatureSink::SinkFlags sinkFlags=QgsFeatureSink::SinkFlags(), QString *newFilename=nullptr, QString *newLayer=nullptr)
Create a new vector file writer.
Partial snapshot of vector layer's state (only the members necessary for access to features)
Represents a vector layer which manages a vector based data sets.
long long featureCount(const QString &legendKey) const
Number of features rendered with specified legend key.
Q_INVOKABLE Qgis::WkbType wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
bool run() override
Performs the task's operation.
@ Error
An error occurred while warping.
void cancel() override
Notifies the task that it should terminate.
QgsVectorWarperTask(QgsGcpTransformerInterface::TransformMethod method, const QList< QgsGcpPoint > &points, const QgsCoordinateReferenceSystem &destinationCrs, QgsVectorLayer *layer, const QString &fileName)
Constructor for QgsVectorWarperTask.
Vector layer warper which warps vector layers based on a list of source and destination GCPs.
bool transformFeatures(QgsFeatureIterator &iterator, QgsFeatureSink *sink, const QgsCoordinateTransformContext &context, QgsFeedback *feedback=nullptr) const
Transforms the features from iterator and adds the results to the specified sink.
QgsVectorWarper(QgsGcpTransformerInterface::TransformMethod method, const QList< QgsGcpPoint > &points, const QgsCoordinateReferenceSystem &destinationCrs)
Constructor for QgsVectorWarper.