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