@@ -58,8 +58,18 @@ def _extract_geoid(self, srs_str):
5858 return parts [0 ], (parts [1 ] if len (parts ) > 1 else None )
5959
6060 def _extract_vertical (self , srs_str ):
61- parts = str (srs_str ).split ("+" )
62- return parts [0 ], (parts [1 ] if len (parts ) > 1 else None )
61+ # parts = str(srs_str).split("+")
62+ # return parts[0], (parts[1] if len(parts) > 1 else None)
63+ if "+" in srs_str :
64+ horz_str , vert_str = srs_str .rsplit ("+" , 1 )
65+ try :
66+ if "EPSG" in vert_str .upper ():
67+ vert_str = vert_str .split (":" )[- 1 ]
68+ return horz_str , int (vert_str )
69+ except Exception as e :
70+ logger .debug (f"Failed to build compound CRS from '{ srs_str } ': { e } " )
71+ return srs_str , None
72+ return srs_str , None
6373
6474 def _get_epsg_int (self , crs ):
6575 """Extract EPSG integer from a CRS."""
@@ -108,8 +118,12 @@ def _parse_srs(self):
108118 self .tc ["dst_vert_epsg" ] = self ._get_epsg_int (self .tc ["dst_crs" ])
109119
110120 if self .tc ["src_vert_epsg" ] is None :
121+ if vert_epsg_src is None :
122+ _ , vert_epsg_src = self ._extract_vertical (self .src_srs_input )
111123 self .tc ["src_vert_epsg" ] = vert_epsg_src
112124 if self .tc ["dst_vert_epsg" ] is None :
125+ if vert_epsg_dst is None :
126+ _ , vert_epsg_dst = self ._extract_vertical (self .dst_srs_input )
113127 self .tc ["dst_vert_epsg" ] = vert_epsg_dst
114128
115129 # Lookup default geoids
0 commit comments