37
37
38
38
from processing .core .GeoAlgorithm import GeoAlgorithm
39
39
from processing .core .parameters import ParameterVector
40
- from processing .core .parameters import ParameterGeometryPredicate
41
40
from processing .core .parameters import ParameterNumber
42
41
from processing .core .parameters import ParameterSelection
43
42
from processing .core .parameters import ParameterString
@@ -64,6 +63,15 @@ def defineCharacteristics(self):
64
63
self .name , self .i18n_name = self .trAlgorithm ('Join attributes by location' )
65
64
self .group , self .i18n_group = self .trAlgorithm ('Vector general tools' )
66
65
66
+ self .predicates = (
67
+ ('intersects' , self .tr ('intersects' )),
68
+ ('contains' , self .tr ('contains' )),
69
+ ('equals' , self .tr ('equals' )),
70
+ ('touches' , self .tr ('touches' )),
71
+ ('overlaps' , self .tr ('overlaps' )),
72
+ ('within' , self .tr ('within' )),
73
+ ('crosses' , self .tr ('crosses' )))
74
+
67
75
self .summarys = [
68
76
self .tr ('Take attributes of the first located feature' ),
69
77
self .tr ('Take summary of intersecting features' )
@@ -78,12 +86,10 @@ def defineCharacteristics(self):
78
86
self .tr ('Target vector layer' )))
79
87
self .addParameter (ParameterVector (self .JOIN ,
80
88
self .tr ('Join vector layer' )))
81
- predicates = list (ParameterGeometryPredicate .predicates )
82
- predicates .remove ('disjoint' )
83
- self .addParameter (ParameterGeometryPredicate (self .PREDICATE ,
84
- self .tr ('Geometric predicate' ),
85
- left = self .TARGET , right = self .JOIN ,
86
- enabledPredicates = predicates ))
89
+ self .addParameter (ParameterSelection (self .PREDICATE ,
90
+ self .tr ('Geometric predicate' ),
91
+ self .predicates ,
92
+ multiple = True ))
87
93
self .addParameter (ParameterNumber (self .PRECISION ,
88
94
self .tr ('Precision' ),
89
95
0.0 , None , 0.0 ))
@@ -174,20 +180,7 @@ def processAlgorithm(self, progress):
174
180
175
181
res = False
176
182
for predicate in predicates :
177
- if predicate == 'intersects' :
178
- res = inGeom .intersects (inGeomB )
179
- elif predicate == 'contains' :
180
- res = inGeom .contains (inGeomB )
181
- elif predicate == 'equals' :
182
- res = inGeom .equals (inGeomB )
183
- elif predicate == 'touches' :
184
- res = inGeom .touches (inGeomB )
185
- elif predicate == 'overlaps' :
186
- res = inGeom .overlaps (inGeomB )
187
- elif predicate == 'within' :
188
- res = inGeom .within (inGeomB )
189
- elif predicate == 'crosses' :
190
- res = inGeom .crosses (inGeomB )
183
+ res = getattr (inGeom , predicate )(inGeomB )
191
184
if res :
192
185
break
193
186
0 commit comments