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}"