Source code for moordiag.coordinates
"""Coordinate formatting utilities for oceanographic mooring diagrams.
Provides CoordConverter for decimal-degrees → degrees/decimal-minutes formatting.
Standalone map-bounds and cruise-track helpers archived in archive/coordinates-old202607.py.
"""
[docs]
class CoordConverter:
"""Utility class for coordinate unit conversions.
This class provides static methods for converting between different
coordinate representations commonly used in maritime and scientific contexts.
"""
[docs]
@staticmethod
def decimal_degrees_to_ddm(decimal_degrees: float) -> tuple[float, float]:
"""Convert decimal degrees to degrees and decimal minutes.
Parameters
----------
decimal_degrees : float
Coordinate in decimal degrees format.
Returns
-------
tuple of float
Tuple of (degrees, decimal_minutes).
Examples
--------
>>> CoordConverter.decimal_degrees_to_ddm(65.7458)
(65.0, 44.75)
"""
degrees = int(abs(decimal_degrees))
minutes = (abs(decimal_degrees) - degrees) * 60
return float(degrees), minutes
[docs]
@staticmethod
def format_latitude_decmin(decimal_degrees: float) -> str:
"""Convert latitude to decimal minutes format.
Parameters
----------
decimal_degrees : float
Latitude in decimal degrees format.
Returns
-------
str
Latitude in "DD MM.MMM N/S" format.
Examples
--------
>>> CoordConverter.format_latitude_decmin(65.244)
"65 14.640 N"
>>> CoordConverter.format_latitude_decmin(-65.244)
"65 14.640 S"
"""
degrees, minutes = CoordConverter.decimal_degrees_to_ddm(decimal_degrees)
direction = "N" if decimal_degrees >= 0 else "S"
return f"{int(degrees):02d} {minutes:06.3f} {direction}"
[docs]
@staticmethod
def format_longitude_decmin(decimal_degrees: float) -> str:
"""Convert longitude to decimal minutes format.
Parameters
----------
decimal_degrees : float
Longitude in decimal degrees format.
Returns
-------
str
Longitude in "DDD MM.MMM E/W" format.
Examples
--------
>>> CoordConverter.format_longitude_decmin(-31.3177)
"031 19.062 W"
>>> CoordConverter.format_longitude_decmin(31.3177)
"031 19.062 E"
"""
degrees, minutes = CoordConverter.decimal_degrees_to_ddm(decimal_degrees)
direction = "E" if decimal_degrees >= 0 else "W"
return f"{int(degrees):03d} {minutes:06.3f} {direction}"