import SRID from './SRID';
import { LinearUnit, type Unit } from './Unit';
/**
 * Contains information about coordinate systems, as well as methods to register new coordinate systems.
 */
export declare class CoordinateSystem {
    /**
     * The EPSG:3857 / pseudo-mercator coordinate systems.
     */
    static readonly epsg3857: CoordinateSystem;
    static readonly epsg4326: CoordinateSystem;
    static readonly epsg4978: CoordinateSystem;
    static readonly epsg4979: CoordinateSystem;
    /**
     * A special coordinate system used for spherical projections.
     */
    static readonly equirectangular: CoordinateSystem;
    static readonly unknown: CoordinateSystem;
    private static readonly _registry;
    /**
     * Registers a coordinate system with the underlying proj and OpenLayers libraries.
     *
     * Note: it is recommended to provide WKT definitions instead of proj strings, since
     * they provide more metadata about the CRS (such as name, SRID, etc).
     *
     * Note 2: some coordinate systems definitions (such as WKT 2's `COMPOUNDCRS`) are
     * not supported by the underlying proj library. However, if you are not planning
     * to use any feature of Giro3D that requires the proj library, you may ignore
     * failures and warnings.
     *
     * @param id - The id of the coordinate system.
     * @param definition - The WKT or proj definition.
     * @param options - Registration options.
     * @example
     * const wkt = \`
     * PROJCS["RGF93 v1 / Lambert-93",
     *     GEOGCS["RGF93 v1",
     *         DATUM["Reseau_Geodesique_Francais_1993_v1",
     *             SPHEROID["GRS 1980",6378137,298.257222101],
     *             TOWGS84[0,0,0,0,0,0,0]],
     *         PRIMEM["Greenwich",0,
     *             AUTHORITY["EPSG","8901"]],
     *         UNIT["degree",0.0174532925199433,
     *             AUTHORITY["EPSG","9122"]],
     *         AUTHORITY["EPSG","4171"]],
     *     PROJECTION["Lambert_Conformal_Conic_2SP"],
     *     PARAMETER["latitude_of_origin",46.5],
     *     PARAMETER["central_meridian",3],
     *     PARAMETER["standard_parallel_1",49],
     *     PARAMETER["standard_parallel_2",44],
     *     PARAMETER["false_easting",700000],
     *     PARAMETER["false_northing",6600000],
     *     UNIT["metre",1,
     *         AUTHORITY["EPSG","9001"]],
     *     AXIS["Easting",EAST],
     *     AXIS["Northing",NORTH],
     *     AUTHORITY["EPSG","2154"]]
     * \`;
     *
     * const crs = CoordinateSystem.register('EPSG:2154', wkt);
     * console.log(crs.name);
     * @returns A {@link CoordinateSystem} instance.
     */
    static register(
    /**
     * The ID of the coordinate system.
     */
    id: string, 
    /**
     * The WKT or proj definition.
     */
    definition: string, options?: {
        /**
         * If true, any error that occurs when registering the
         * coordinate system definition with proj4.js is re-thrown.
         * Otherwise, a simple warning is logged instead.
         */
        throwIfFailedToRegisterWithProj?: boolean;
    }): CoordinateSystem;
    /**
     * Mostly used for unit testing.
     * @internal
     */
    static clearRegistry(): void;
    /**
     * @param name - the short name, or EPSG code to identify this CRS.
     * @param value - the CRS definition, either in proj syntax, or in WKT syntax.
     */
    private static registerCRSWithProjAndOpenLayers;
    static get(srid: string): CoordinateSystem;
    /**
     * Creates a {@link CoordinateSystem} from its WKT definition.
     *
     * Note: this does not register the coordinate system with proj4.js. Use {@link register} instead.
     * @param wkt - The WKT 1 or WKT 2 definition.
     * @returns The created coordinate system, or throws an error if the definition could not be parsed.
     */
    static fromWkt(wkt: string, overrides?: {
        id?: string;
    }): CoordinateSystem;
    private readonly _customId?;
    /**
     * The readable name of this coordinate system.
     */
    readonly name: string;
    /**
     * The SRID of this coordinate system.
     */
    readonly srid?: SRID;
    /**
     * Contains metadata about the horizontal component of this coordinate system.
     */
    readonly horizontal?: {
        readonly unit: Unit;
    };
    /**
     * Contains metadata about the vertical component of this coordinate system.
     */
    readonly vertical?: {
        readonly unit: LinearUnit;
    };
    /**
     * The WKT definition of this coordinate system.
     */
    readonly definition?: string;
    /**
     * The internal identifier of this coordinate system. Used as a key in the coordinate system registry.
     * By order of priority, will return: the custom identifier, the SRID, then the name.
     */
    get id(): string;
    constructor(params: {
        /**
         * The name of the coordinate system.
         */
        name: string;
        /**
         * The optional SRID of this coordinate system.
         */
        srid?: SRID;
        /**
         * The id of this coordinate system. If unspecified, will use the SRID or name, if available.
         */
        id?: string;
        /**
         * The horizontal component of the coordinate system.
         */
        horizontal?: {
            unit: Unit;
        };
        /**
         * The vertical component of the coordinate system.
         */
        vertical?: {
            unit: LinearUnit;
        };
        /**
         * The WKT definition of the coordinate system.
         */
        definition?: string;
    });
    /**
     * Returns true if this coordinate system has angular units.
     */
    isGeographic(): boolean;
    /**
     * Returns the conversion factor between horizontal units and meters.
     */
    get metersPerHorizontalUnit(): number;
    /**
     * Returns the conversion factor between vertical units and meters.
     */
    get metersPerVerticalUnit(): number;
    isEpsg(code: number): boolean;
    /**
     * Returns `true` if this coordinate system is the special equirectangular coordinate system (used for spherical mapping).
     */
    isEquirectangular(): boolean;
    /**
     * Returns `true` if this coordinate system is the special unknown coordinate system (used for non-georeferenced scenes).
     */
    isUnknown(): boolean;
    /**
     * Returns `true` if the two coordinate systems are equal.
     */
    equals(other: CoordinateSystem): boolean;
}
export default CoordinateSystem;
//# sourceMappingURL=CoordinateSystem.d.ts.map