[QGIS-Developer] Temporal Controller: Select current visible features??
Richard Duivenvoorde
rdmailings at duif.net
Wed Mar 23 01:39:29 PDT 2022
Thanks Nyall!!
With a minimal adjustments this just works:
def temporal_filter_for_layer(layer, canvas):
if canvas.mapSettings().isTemporal():
if not layer.temporalProperties().isVisibleInTemporalRange(canvas.temporalRange()):
return False # nothing is visible
temporal_context = QgsVectorLayerTemporalContext()
temporal_context.setLayer(layer)
return layer.temporalProperties().createFilterString(temporal_context, canvas.temporalRange())
else:
return None
print( temporal_filter_for_layer(iface.mapCanvas().currentLayer(), iface.mapCanvas()) )
Now prints:
("time" > make_datetime(2022,3,20,10,30,0) AND "time" < make_datetime(2022,3,20,12,30,0)) OR "time" IS NULL
Which I can use as expression in: layer.selectByExpression(...)
Regards,
Richard Duivenvoorde
PS also see my Feature Request: https://github.com/qgis/QGIS/issues/47929 about adding an option to switch between selecting visible vs non visible features...
On 3/21/22 23:59, Nyall Dawson wrote:
>> Anybody aware of a way to do this?
>> Going to try to get the temporal expression maybe and then select by
>> expression?
>
> untested code ported from tested c++ code, sorry, but it's something like this:
>
> def temporal_filter_for_layer(layer, canvas):
> if canvas.mapSettings().isTemporal():
> if not layer.temporalProperties().isVisibleInTemporalRange(
> canvas.temporalRange() ) ):
> return "FALSE"; # nothing is visible
>
> temporal_context = QgsVectorLayerTemporalContext()
> temporal_context.setLayer( layer )
> return layer.temporalProperties().createFilterString(
> temporal_context, canvas.temporalRange() )
> else:
> return None
>
> Nyall
More information about the QGIS-Developer
mailing list