如何使用PyQGIS修改QgsMeshLayer的提供者时间设置为秒
QgsMeshLayer 时间单位修改无效问题:小时改秒不生效
我使用QgsMeshLayer时,试图将数据提供者的时间单位从默认的小时修改为秒,但执行以下代码后,时间设置仍保持小时状态:
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.")

你的代码仅修改了图层元数据和参考时间,并未真正修改数据提供者的时间单位配置。要生效需要直接操作QgsMeshTemporalCapabilities的时间单位属性,具体修正如下:
修正后的完整代码
from qgis.core import ( QgsProject, QgsMeshLayer, QgsCoordinateReferenceSystem, QgsLayerMetadata, QgsUnitTypes # 新增时间单位枚举导入 ) 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.") # 核心修改:设置时间单位为秒 capabilities.setTimeUnit(QgsUnitTypes.TemporalSeconds) temporal_properties.setReferenceTime(reference_time, capabilities) print(f"Reference time set to: {temporal_properties.referenceTime().toString()}") print(f"Time unit updated to: {QgsUnitTypes.toString(capabilities.timeUnit())}") # 元数据修改仅作说明,不影响实际时间单位,可按需保留 metadata = mesh_layer.metadata() metadata.setAbstract("Time units: seconds") mesh_layer.setMetadata(metadata) # 刷新图层并添加到项目 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.")
修改说明
- 新增
QgsUnitTypes导入,用于调用时间单位枚举值 - 在获取
temporalCapabilities后,调用setTimeUnit(QgsUnitTypes.TemporalSeconds)是修改时间单位的核心步骤,直接作用于数据提供者的时间配置 - 原代码中的元数据修改仅为图层描述,不会改变实际的时间处理逻辑,可根据需求选择保留或删除
内容的提问来源于stack exchange,提问作者Moez
相关产品推荐
相关产品推荐

