toMercator function
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]);
}