1 /*************************************************************************** 2 qgsalgorithmextractbylocation.h 3 --------------------- 4 begin : April 2017 5 copyright : (C) 2017 by Nyall Dawson 6 email : nyall dot dawson at gmail dot com 7 ***************************************************************************/ 8 9 /*************************************************************************** 10 * * 11 * This program is free software; you can redistribute it and/or modify * 12 * it under the terms of the GNU General Public License as published by * 13 * the Free Software Foundation; either version 2 of the License, or * 14 * (at your option) any later version. * 15 * * 16 ***************************************************************************/ 17 18 #ifndef QGSALGORITHMEXTRACTBYLOCATION_H 19 #define QGSALGORITHMEXTRACTBYLOCATION_H 20 21 #define SIP_NO_FILE 22 23 #include "qgis_sip.h" 24 #include "qgsprocessingalgorithm.h" 25 #include "qgsapplication.h" 26 27 ///@cond PRIVATE 28 29 30 /** 31 * Base class for location based extraction/selection algorithms. 32 */ 33 class QgsLocationBasedAlgorithm : public QgsProcessingAlgorithm 34 { 35 36 protected: 37 38 enum Predicate 39 { 40 Intersects, 41 Contains, 42 Disjoint, 43 IsEqual, 44 Touches, 45 Overlaps, 46 Within, 47 Crosses, 48 }; 49 50 void addPredicateParameter(); 51 Predicate reversePredicate( Predicate predicate ) const; 52 QStringList predicateOptionsList() const; 53 void process( const QgsProcessingContext &context, QgsFeatureSource *targetSource, QgsFeatureSource *intersectSource, const QList<int> &selectedPredicates, const std::function< void( const QgsFeature & )> &handleFeatureFunction, bool onlyRequireTargetIds, QgsProcessingFeedback *feedback ); 54 55 56 private: 57 58 void processByIteratingOverTargetSource( const QgsProcessingContext &context, QgsFeatureSource *targetSource, QgsFeatureSource *intersectSource, const QList<int> &selectedPredicates, const std::function< void( const QgsFeature & )> &handleFeatureFunction, bool onlyRequireTargetIds, QgsProcessingFeedback *feedback ); 59 void processByIteratingOverIntersectSource( const QgsProcessingContext &context, QgsFeatureSource *targetSource, QgsFeatureSource *intersectSource, const QList<int> &selectedPredicates, const std::function< void( const QgsFeature & )> &handleFeatureFunction, bool onlyRequireTargetIds, QgsProcessingFeedback *feedback ); 60 }; 61 62 63 /** 64 * Native select by location algorithm 65 */ 66 class QgsSelectByLocationAlgorithm : public QgsLocationBasedAlgorithm 67 { 68 69 public: 70 71 QgsSelectByLocationAlgorithm() = default; 72 void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override; icon()73 QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmSelectLocation.svg" ) ); } svgIconPath()74 QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmSelectLocation.svg" ) ); } 75 QString name() const override; 76 Flags flags() const override; 77 QString displayName() const override; 78 QStringList tags() const override; 79 QString group() const override; 80 QString groupId() const override; 81 QString shortHelpString() const override; 82 QgsSelectByLocationAlgorithm *createInstance() const override SIP_FACTORY; 83 84 protected: 85 86 QVariantMap processAlgorithm( const QVariantMap ¶meters, 87 QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 88 89 }; 90 91 /** 92 * Native extract by location algorithm 93 */ 94 class QgsExtractByLocationAlgorithm : public QgsLocationBasedAlgorithm 95 { 96 97 public: 98 99 QgsExtractByLocationAlgorithm() = default; 100 void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override; 101 QString name() const override; 102 QString displayName() const override; 103 QStringList tags() const override; 104 QString group() const override; 105 QString groupId() const override; 106 QString shortHelpString() const override; 107 QgsExtractByLocationAlgorithm *createInstance() const override SIP_FACTORY; 108 109 protected: 110 111 QVariantMap processAlgorithm( const QVariantMap ¶meters, 112 QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; 113 114 }; 115 116 ///@endcond PRIVATE 117 118 #endif // QGSALGORITHMEXTRACTBYLOCATION_H 119 120 121