Skip to content

Commit 384c267

Browse files
authored
Add option to add selected fields, fixes #54 (#55)
1 parent 26579d8 commit 384c267

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

qgis_processing/trajectoriesAlgorithm.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ def get_pt_fields(self, fields_to_add=[]):
162162

163163

164164
class TrajectoryManipulationAlgorithm(TrajectoriesAlgorithm):
165+
FIELDS_TO_ADD = "FIELDS_TO_ADD"
165166
OUTPUT_PTS = "OUTPUT_PTS"
166167
OUTPUT_SEGS = "OUTPUT_SEGS"
167168
OUTPUT_TRAJS = "OUTPUT_TRAJS"
@@ -182,6 +183,16 @@ def initAlgorithm(self, config=None):
182183
type=QgsProcessing.TypeVectorLine,
183184
)
184185
)
186+
self.addParameter(
187+
QgsProcessingParameterField(
188+
name=self.FIELDS_TO_ADD,
189+
description=self.tr("Fields to add to trajectories (line) layer"),
190+
parentLayerParameterName=self.INPUT,
191+
type=QgsProcessingParameterField.Any,
192+
allowMultiple=True,
193+
optional=True,
194+
)
195+
)
185196

186197
def processAlgorithm(self, parameters, context, feedback):
187198
tc, crs = self.create_tc(parameters, context)
@@ -195,7 +206,10 @@ def processAlgorithm(self, parameters, context, feedback):
195206
return {self.OUTPUT_PTS: self.dest_pts, self.OUTPUT_TRAJS: self.dest_trajs}
196207

197208
def setup_traj_sink(self, parameters, context, crs):
198-
self.fields_trajs = self.get_traj_fields()
209+
self.fields_to_add = self.parameterAsFields(
210+
parameters, self.FIELDS_TO_ADD, context
211+
)
212+
self.fields_trajs = self.get_traj_fields(fields_to_add=self.fields_to_add)
199213
(self.sink_trajs, self.dest_trajs) = self.parameterAsSink(
200214
parameters,
201215
self.OUTPUT_TRAJS,
@@ -242,9 +256,12 @@ def get_traj_fields(self, fields_to_add=[]):
242256
fields.append(QgsField(f"length_{length_units}", QVariant.Double))
243257
fields.append(QgsField(f"speed_{speed_units}", QVariant.Double))
244258
for field in fields_to_add:
245-
i = fields.indexFromName(field.name())
246-
if i < 0:
247-
fields.append(field)
259+
if isinstance(field, str):
260+
if fields.indexFromName(field) < 0:
261+
fields.append(self.input_layer.fields().field(field))
262+
else:
263+
if fields.indexFromName(field.name()) < 0:
264+
fields.append(field)
248265
return fields
249266

250267
def traj_to_sink(self, traj, attr_mean_to_add=[], attr_first_to_add=[]):
@@ -257,6 +274,7 @@ def traj_to_sink(self, traj, attr_mean_to_add=[], attr_first_to_add=[]):
257274
length = traj.get_length(units=self.speed_units[0])
258275
speed = length / (duration / TIME_FACTOR[self.speed_units[1]])
259276
attrs = [traj.id, start_time, end_time, duration, length, speed]
277+
attr_first_to_add = self.fields_to_add + attr_first_to_add
260278
for a in attr_mean_to_add:
261279
attrs.append(float(traj.df[a].mean()))
262280
for a in attr_first_to_add:

0 commit comments

Comments
 (0)