Search code examples
settingslayerqgispyqgis

How do I change Provider Time Settings in QgsMeshLayer using pyqgis?


I am working with QgsMeshLayer and I want to change the provider time settings to seconds (by default it's hours).

This is what I have tried, but provider time settings are still set to hours.

from qgis.core import (
    QgsProject,
    QgsMeshLayer,
    QgsCoordinateReferenceSystem,
    QgsLayerMetadata,
)
from PyQt5.QtCore import QDateTime

# Load the mesh layer
mesh_layer = QgsMeshLayer(
    path,
    "Mesh Layer",
    "mdal",
)


if isinstance(mesh_layer, QgsMeshLayer):
    # Access temporal properties
    temporal_properties = mesh_layer.temporalProperties()

    # Set reference time
    reference_time = QDateTime.fromSecsSinceEpoch(0)  # Epoch time: "1970-01-01T00:00:00Z"
    capabilities = mesh_layer.dataProvider().temporalCapabilities()
    if capabilities:
        print("Temporal capabilities retrieved successfully.")
        temporal_properties.setReferenceTime(reference_time, capabilities)
        print(f"Reference time set to: {temporal_properties.referenceTime().toString()}")
    
    # Access and modify metadata to enforce seconds
    metadata = mesh_layer.metadata()
    metadata.setAbstract("Time units: seconds")
    mesh_layer.setMetadata(metadata)

    # Refresh the mesh layer
    mesh_layer.triggerRepaint()
    QgsProject.instance().addMapLayer(mesh_layer)
    print("Mesh layer updated: Time units set to seconds and layer refreshed.")
else:
    print("Layer is not a valid mesh layer.")

enter image description here


Solution

  • You can change the temporal unit via the QgsMeshLayerDataProvider, which has a setTemporalUnit method. Documentation

    from qgis.core import QgsProject, Qgis
    
    layer_name = 'TIN Mesh'
    mesh_layer = QgsProject.instance().mapLayersByName(layer_name)[0]
    mesh_layer.dataProvider().setTemporalUnit(Qgis.TemporalUnit.Seconds)