@@ -106,6 +106,10 @@ class CrsInfo:
106106
107107 vertical_unknown : Optional [str ] = None
108108 """Free-text vertical CRS descriptor."""
109+
110+ time_uom : Optional [str ] = None
111+ """Unit of measure for time coordinates (e.g. ``"s"``, ``"min"``, ``"h"``)."""
112+
109113
110114 # ------------------------------------------------------------------
111115 # Rotation / azimuth
@@ -443,9 +447,10 @@ def _from_abstract_local3dcrs(
443447
444448 # --- Vertical UOM (length or time) ------------------------------------
445449 vertical_uom : Optional [str ] = _uom_to_str (get_object_attribute_no_verif (crs_obj , "vertical_uom" ))
450+ time_uom = _uom_to_str (getattr (crs_obj , "time_uom" , None ))
446451 if vertical_uom is None :
447452 # time_uom only present on LocalTime3dCrs
448- vertical_uom = _uom_to_str ( getattr ( crs_obj , " time_uom" , None ))
453+ vertical_uom = time_uom
449454
450455 # --- Axis order --------------------------------------------------------
451456 axis_order_raw = get_object_attribute_no_verif (crs_obj , "projected_axis_order" )
@@ -494,6 +499,7 @@ def _from_abstract_local3dcrs(
494499 projected_unknown = projected_details .get ("unknown" ),
495500 vertical_epsg_code = vertical_details .get ("epsg_code" ),
496501 vertical_uom = vertical_uom ,
502+ time_uom = time_uom ,
497503 z_increasing_downward = z_increasing_downward ,
498504 vertical_wkt = vertical_details .get ("wkt" ),
499505 vertical_unknown = vertical_details .get ("unknown" ),
@@ -621,6 +627,11 @@ def _from_local_engineering_compound_crs(
621627 vert_axis_uom_raw = get_object_attribute (crs_obj , "vertical_axis.uom" )
622628 if vert_axis_uom_raw is not None :
623629 vert_axis_uom = _uom_to_str (vert_axis_uom_raw )
630+
631+ is_time = get_object_attribute (crs_obj , "vertical_axis.is_time" )
632+ time_uom = None
633+ if is_time is not None and str (is_time ).lower () in ("true" , "1" , "yes" ):
634+ time_uom = vert_axis_uom
624635 vert_axis_dir_raw = get_object_attribute (crs_obj , "vertical_axis.direction" )
625636 if vert_axis_dir_raw is not None :
626637 d = str (vert_axis_dir_raw )
@@ -693,6 +704,7 @@ def _from_local_engineering_compound_crs(
693704 # when the resolved CRS carries an explicit direction (not the None sentinel).
694705 vertical_epsg_code = vert_info .vertical_epsg_code if vert_info else None ,
695706 vertical_uom = (vert_info .vertical_uom if vert_info else None ) or vert_axis_uom ,
707+ time_uom = time_uom ,
696708 z_increasing_downward = (
697709 vert_info .z_increasing_downward
698710 if vert_info and vert_details_raw is not None and vert_details_raw .get ("z_increasing_downward" ) is not None
0 commit comments