use miniproj_ops::albers_equal_area::AlbersEqualAreaProjection;
use miniproj_ops::identity_projection::IdentityProjection;
use miniproj_ops::lambert_azimuthal_equal_area::LambertAzimuthalEqualAreaProjection;
use miniproj_ops::lambert_conic_conformal::{
LambertConic1SPAProjection, LambertConic2SPProjection,
};
use miniproj_ops::popvis_pseudo_mercator::PopVisPseudoMercatorProjection;
use miniproj_ops::stereographic::{ObliqueStereographicProjection, PolarStereographicAProjection};
use miniproj_ops::transverse_mercator::TransverseMercatorProjection;
use miniproj_ops::Projection;
include!(concat!(env!("OUT_DIR"), "/projection_constructors.rs"));
pub fn get_projection(code: u32) -> Option<&'static dyn Projection> {
PROJECTIONS.get(&code).cloned()
}
pub fn get_ellipsoid_code(projection_code: u32) -> Option<u32> {
ELLIPSOIDS.get(&projection_code).copied()
}
#[deprecated]
pub fn get_reference_system_name(code: u32) -> Option<&'static str> {
NAMES.get(&code).copied()
}
#[deprecated]
pub fn get_reference_system_areas(code: u32) -> Option<&'static [[f64; 4]]> {
AREAS.get(&code).filter(|a| !a.is_empty()).copied()
}
#[deprecated]
pub fn all_names() -> impl Iterator<Item = (u32, &'static str)> {
NAMES.entries().map(|(c, n)| (*c, *n))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn dyn_projection_is_send_sync() {
fn is_send_sync<T: Send + Sync>(_: T) {}
is_send_sync(get_projection(4326));
}
}