mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[processing] native save selected features algorithm
This commit is contained in:
parent
625c205047
commit
04ee85f0e8
@ -499,11 +499,6 @@ qgis:reprojectlayer: >
|
||||
|
||||
Attributes are not modified by this algorithm.
|
||||
|
||||
qgis:saveselectedfeatures: >
|
||||
This algorithm creates a new layer with all the selected features in a given vector layer.
|
||||
|
||||
If the selected layer has no selected features, all features will be added to the resulting feature.
|
||||
|
||||
qgis:selectbyattribute: >
|
||||
This algorithm creates a selection in a vector layer. The criteria for selected features is defined based on the values of an attribute from the input layer.
|
||||
|
||||
|
@ -129,7 +129,6 @@ from .RegularPoints import RegularPoints
|
||||
from .Relief import Relief
|
||||
from .ReverseLineDirection import ReverseLineDirection
|
||||
from .Ruggedness import Ruggedness
|
||||
from .SaveSelectedFeatures import SaveSelectedFeatures
|
||||
from .SelectByAttribute import SelectByAttribute
|
||||
from .SelectByExpression import SelectByExpression
|
||||
from .ServiceAreaFromLayer import ServiceAreaFromLayer
|
||||
@ -266,7 +265,6 @@ class QGISAlgorithmProvider(QgsProcessingProvider):
|
||||
Relief(),
|
||||
ReverseLineDirection(),
|
||||
Ruggedness(),
|
||||
SaveSelectedFeatures(),
|
||||
SelectByAttribute(),
|
||||
SelectByExpression(),
|
||||
ServiceAreaFromLayer(),
|
||||
|
@ -1,72 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
***************************************************************************
|
||||
SaveSelectedFeatures.py
|
||||
---------------------
|
||||
Date : August 2012
|
||||
Copyright : (C) 2012 by Victor Olaya
|
||||
Email : volayaf at gmail dot com
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************
|
||||
"""
|
||||
|
||||
__author__ = 'Victor Olaya'
|
||||
__date__ = 'August 2012'
|
||||
__copyright__ = '(C) 2012, Victor Olaya'
|
||||
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
from qgis.core import (QgsFeatureSink,
|
||||
QgsProcessingParameterVectorLayer,
|
||||
QgsProcessingParameterFeatureSink)
|
||||
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
|
||||
|
||||
|
||||
class SaveSelectedFeatures(QgisAlgorithm):
|
||||
|
||||
OUTPUT = 'OUTPUT'
|
||||
INPUT = 'INPUT'
|
||||
|
||||
def group(self):
|
||||
return self.tr('Vector general')
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def initAlgorithm(self, config=None):
|
||||
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT, self.tr('Input layer')))
|
||||
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Selection')))
|
||||
|
||||
def name(self):
|
||||
return 'saveselectedfeatures'
|
||||
|
||||
def displayName(self):
|
||||
return self.tr('Save selected features')
|
||||
|
||||
def processAlgorithm(self, parameters, context, feedback):
|
||||
vectorLayer = self.parameterAsVectorLayer(parameters, self.INPUT, context)
|
||||
|
||||
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
|
||||
vectorLayer.fields(), vectorLayer.wkbType(), vectorLayer.sourceCrs())
|
||||
|
||||
features = vectorLayer.getSelectedFeatures()
|
||||
count = int(vectorLayer.selectedFeatureCount())
|
||||
|
||||
total = 100.0 / count if count else 1
|
||||
for current, feat in enumerate(features):
|
||||
if feedback.isCanceled():
|
||||
break
|
||||
|
||||
sink.addFeature(feat, QgsFeatureSink.FastInsert)
|
||||
feedback.setProgress(int(current * total))
|
||||
|
||||
return {self.OUTPUT: dest_id}
|
@ -80,10 +80,71 @@ void QgsNativeAlgorithms::loadAlgorithms()
|
||||
addAlgorithm( new QgsExtractByLocationAlgorithm() );
|
||||
addAlgorithm( new QgsFixGeometriesAlgorithm() );
|
||||
addAlgorithm( new QgsMergeLinesAlgorithm() );
|
||||
addAlgorithm( new QgsSaveSelectedFeatures() );
|
||||
addAlgorithm( new QgsSmoothAlgorithm() );
|
||||
addAlgorithm( new QgsSimplifyAlgorithm() );
|
||||
}
|
||||
|
||||
void QgsSaveSelectedFeatures::initAlgorithm( const QVariantMap & )
|
||||
{
|
||||
addParameter( new QgsProcessingParameterVectorLayer( QStringLiteral( "INPUT" ), QObject::tr( "Input layer" ) ) );
|
||||
addParameter( new QgsProcessingParameterFeatureSink( QStringLiteral( "OUTPUT" ), QObject::tr( "Selected features" ), QgsProcessing::TypeVectorPoint ) );
|
||||
}
|
||||
|
||||
QString QgsSaveSelectedFeatures::shortHelpString() const
|
||||
{
|
||||
return QObject::tr( "This algorithm creates a new layer with all the selected features in a given vector layer.\n\n"
|
||||
"If the selected layer has no selected features, all features will be added to the resulting feature." );
|
||||
}
|
||||
|
||||
QgsSaveSelectedFeatures *QgsSaveSelectedFeatures::createInstance() const
|
||||
{
|
||||
return new QgsSaveSelectedFeatures();
|
||||
}
|
||||
|
||||
QVariantMap QgsSaveSelectedFeatures::processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
|
||||
{
|
||||
QgsVectorLayer *selectLayer = parameterAsVectorLayer( parameters, QStringLiteral( "INPUT" ), context );
|
||||
|
||||
QString dest;
|
||||
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, selectLayer->fields(), selectLayer->wkbType(), selectLayer->sourceCrs() ) );
|
||||
if ( !sink )
|
||||
return QVariantMap();
|
||||
|
||||
QgsFeatureIterator it;
|
||||
QgsFeature feat;
|
||||
|
||||
int count = selectLayer->selectedFeatureCount();
|
||||
if ( count > 0 )
|
||||
{
|
||||
it = selectLayer->getSelectedFeatures();
|
||||
}
|
||||
else
|
||||
{
|
||||
count = selectLayer->featureCount();
|
||||
it = selectLayer->getFeatures();
|
||||
}
|
||||
|
||||
int current = 0;
|
||||
double step = count > 0 ? 100.0 / count : 1;
|
||||
|
||||
while ( it.nextFeature( feat ) )
|
||||
{
|
||||
if ( feedback->isCanceled() )
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
sink->addFeature( feat, QgsFeatureSink::FastInsert );
|
||||
|
||||
feedback->setProgress( current++ * step );
|
||||
}
|
||||
|
||||
QVariantMap outputs;
|
||||
outputs.insert( QStringLiteral( "OUTPUT" ), dest );
|
||||
return outputs;
|
||||
}
|
||||
|
||||
void QgsCentroidAlgorithm::initAlgorithm( const QVariantMap & )
|
||||
{
|
||||
addParameter( new QgsProcessingParameterFeatureSource( QStringLiteral( "INPUT" ), QObject::tr( "Input layer" ) ) );
|
||||
|
@ -48,6 +48,29 @@ class QgsNativeAlgorithms: public QgsProcessingProvider
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Native save selected features algorithm.
|
||||
*/
|
||||
class QgsSaveSelectedFeatures : public QgsProcessingAlgorithm
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
QgsSaveSelectedFeatures() = default;
|
||||
void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
|
||||
QString name() const override { return QStringLiteral( "saveselectedfeatures" ); }
|
||||
QString displayName() const override { return QObject::tr( "Save Selected Features" ); }
|
||||
QStringList tags() const override { return QObject::tr( "selection,save" ).split( ',' ); }
|
||||
QString group() const override { return QObject::tr( "Vector general" ); }
|
||||
QString shortHelpString() const override;
|
||||
QgsSaveSelectedFeatures *createInstance() const override SIP_FACTORY;
|
||||
|
||||
protected:
|
||||
|
||||
virtual QVariantMap processAlgorithm( const QVariantMap ¶meters,
|
||||
QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
|
||||
};
|
||||
|
||||
/**
|
||||
* Native centroid algorithm.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user