@@ -220,8 +220,8 @@ def iter_runway_ends(path: Path) -> Iterator[RunwayEnd]:
220220 runway_ofmx_id = rwy_uid .get ("mid" ) if rwy_uid is not None else None ,
221221 airport_ofmx_id = ahp_uid .get ("mid" ) if ahp_uid is not None else None ,
222222 designator = _text (rdn_uid , "txtDesig" ),
223- true_bearing = _to_float (_text (elem , "valTrueBrg" )),
224- mag_bearing = _to_float (_text (elem , "valMagBrg" )),
223+ true_bearing = _parse_bearing (_text (elem , "valTrueBrg" )),
224+ mag_bearing = _parse_bearing (_text (elem , "valMagBrg" )),
225225 latitude = _parse_coordinate (_text (elem , "geoLat" )),
226226 longitude = _parse_coordinate (_text (elem , "geoLong" )),
227227 )
@@ -370,6 +370,23 @@ def _parse_coordinate(value: Optional[str]) -> Optional[float]:
370370 return parsed
371371
372372
373+ def _parse_bearing (value : Optional [str ]) -> Optional [float ]:
374+ parsed = _to_float (value )
375+ if parsed is None :
376+ return None
377+ if 0 <= parsed <= 360 :
378+ return parsed
379+ if not value :
380+ return parsed
381+ raw = value .strip ()
382+ if "." in raw or not raw .isdigit ():
383+ return parsed
384+ scaled = int (raw ) / 1000
385+ if 0 <= scaled <= 360 :
386+ return round (scaled , 6 )
387+ return parsed
388+
389+
373390def _parse_gml_pos_list (value : Optional [str ]) -> list [tuple [float , float ]]:
374391 if not value :
375392 return []
0 commit comments