toMercator function

Position toMercator(
  1. Position coord
)

Converts a WGS84 coordinate to Web Mercator.

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

Implementation

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

  // Clamp latitude to avoid infinite values near the poles
  final longitude = coord[0]?.toDouble() ?? 0.0;
  final latitude = max(min(coord[1]?.toDouble() ?? 0.0, 89.99), -89.99);

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

  // Convert latitude to y coordinate
  final latRad = latitude * (pi / 180.0);
  final y = log(tan((pi / 4) + (latRad / 2))) * conversionEarthRadius;

  // Clamp to valid Mercator bounds
  final clampedX = max(min(x, mercatorLimit), -mercatorLimit);
  final clampedY = max(min(y, mercatorLimit), -mercatorLimit);

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

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