toWGS84 function

Position toWGS84(
  1. Position coord
)

Converts a Web Mercator coordinate to WGS84.

Valid inputs: Position with [x, y] in meters Returns: Position with [longitude, latitude] coordinates

Implementation

Position toWGS84(Position coord) {
  // Use the earth radius constant for consistency

  // Clamp inputs to valid range
  final x =
      max(min(coord[0]?.toDouble() ?? 0.0, mercatorLimit), -mercatorLimit);
  final y =
      max(min(coord[1]?.toDouble() ?? 0.0, mercatorLimit), -mercatorLimit);

  // Convert x to longitude
  final longitude = x / (conversionEarthRadius * pi / 180.0);

  // Convert y to latitude
  final latRad = 2 * atan(exp(y / conversionEarthRadius)) - (pi / 2);
  final latitude = latRad * (180.0 / pi);

  // Clamp latitude to valid range
  final clampedLatitude = max(min(latitude, 90.0), -90.0);

  // Preserve altitude if present
  final alt = coord.length > 2 ? coord[2] : null;

  return Position.of(alt != null
      ? [longitude, clampedLatitude, alt]
      : [longitude, clampedLatitude]);
}