/** @packageDocumentation
 * @module Geometry
 */
import { Vector3d, XYAndZ } from "@itwin/core-geometry";
import { GeodeticEllipsoid, GeodeticEllipsoidProps } from "./GeodeticEllipsoid";
/** Holds 3 components of a Positional Vector rotation definition in arc seconds
 *  @public
 *  @extensions
 */
export interface XyzRotationProps {
    /** X rotation component in arc second */
    x: number;
    /** Y rotation component in arc second*/
    y: number;
    /** Z rotation component in arc second*/
    z: number;
}
/** Hold 3 components data of a Positional Vector rotation definition in arc seconds
 *  @public
 */
export declare class XyzRotation implements XyzRotationProps {
    /** X rotation component in arc second */
    readonly x: number;
    /** Y rotation component in arc second*/
    readonly y: number;
    /** Z rotation component in arc second*/
    readonly z: number;
    constructor(data?: XyzRotationProps);
    /** Creates a Rotations object from JSON representation.
     * @public */
    static fromJSON(data: XyzRotationProps): XyzRotation;
    /** Creates a JSON from the Rotations definition
     * @public */
    toJSON(): XyzRotationProps;
    /** Compares two geodetic rotations. It applies a minuscule angular tolerance
     *  @public */
    equals(other: XyzRotation): boolean;
}
/** Type indicating the geodetic transformation method
 *  @public
 *  @extensions
 */
export type GeodeticTransformMethod = "None" | "Geocentric" | "PositionalVector" | "GridFiles" | "MultipleRegression" | "Undefined";
/** This interface represents a geocentric (three parameters) geodetic transformation.
 *  @public
 *  @extensions
 */
export interface GeocentricTransformProps {
    /** The frame translation components in meters */
    delta: XYAndZ;
}
/** This class represents a geocentric (three parameters) geodetic transformation.
 *  @public
 */
export declare class GeocentricTransform implements GeocentricTransformProps {
    /** The frame translation components in meters */
    readonly delta: Vector3d;
    constructor(data?: GeocentricTransformProps);
    /** Creates a Geocentric Transform from JSON representation.
     * @public */
    static fromJSON(data: GeocentricTransformProps): GeocentricTransform;
    /** Creates a JSON from the Geodetic GeocentricTransform definition
     * @public */
    toJSON(): GeocentricTransformProps;
    /** Compares two geodetic transforms. It applies a minuscule tolerance.
     *  @public */
    equals(other: GeocentricTransform): boolean;
}
/** This interface represents a positional vector (seven parameters) geodetic transformation corresponding to
 *  EPSG operation 9606. Beware that the convention relative to rotation direction is different
 *  from the Coordinate Frame operation (epsg 9607).
 *  @public
 *  @extensions
 */
export interface PositionalVectorTransformProps {
    /** The frame translation components in meters */
    delta: XYAndZ;
    /** The frame rotation components in arc seconds. The rotation sign convention is the one associated with
     * the operation EPSG:9606 following recommendation of ISO 19111 specifications */
    rotation: XyzRotationProps;
    /** Scale in parts per million. The scale effectively applied will be 1 plus scale divided by 1 000 000. */
    scalePPM: number;
}
/** This class represents a positional vector (seven parameters) geodetic transformation corresponding to
 *  EPSG operation 9606. Beware that the convention relative to rotation direction is different
 *  from the Coordinate Frame operation (epsg 9607).
 *  @public
 */
export declare class PositionalVectorTransform implements PositionalVectorTransformProps {
    /** The frame translation components in meters */
    readonly delta: Vector3d;
    /** The frame rotation components in arc seconds. The rotation sign convention is the one associated with
     * the operation EPSG:9606 following recommendation of ISO 19111 specifications */
    readonly rotation: XyzRotation;
    /** Scale in parts per million. The scale effectively applied will be 1 plus scale divided by 1 000 000. */
    readonly scalePPM: number;
    constructor(data?: PositionalVectorTransformProps);
    /** Creates a Positional Vector Transform from JSON representation.
     * @public */
    static fromJSON(data: PositionalVectorTransformProps): PositionalVectorTransform;
    /** Creates a JSON from the Positional Vector Transform definition
     * @public */
    toJSON(): PositionalVectorTransformProps;
    /** Compares two Positional Vector Transforms. It applies a minuscule tolerance to number compares.
     *  @public */
    equals(other: PositionalVectorTransform): boolean;
}
/** Type indicating the file format of the grid files.
 *  @public
 *  @extensions
 */
export type GridFileFormat = "NONE" | "NTv1" | "NTv2" | "NADCON" | "FRENCH" | "JAPAN" | "ATS77" | "GEOCN" | "OSTN02" | "OSTN15";
/** type to indicate the grid file application direction.
 *  @public
 *  @extensions
 */
export type GridFileDirection = "Direct" | "Inverse";
/** Grid file definition containing name of the file, the format and the direction it should be applied
 *  @public
 *  @extensions
 */
export interface GridFileDefinitionProps {
    /** Name of the grid shift file. This name is relative to the expected dictionary root document.
     *  Typical grid shift file name will contain first the country name it applies to then possibly some sub path.
     *  Example of existing grid files:
     *  Germany/BETA2007.gsb or Brazil/SAD69_003.GSB but sometimes longer paths USA/NADCON/conus.l*s
     *  Note that the file name can contain wildcards when the format requires more than one file. For example
     *  the NADCON format makes use of a different file for latitude and longitude shifts thus the .l*s extension in the
     *  file name above.
     *  Forward slash is always used to separate the path components.
     */
    fileName: string;
    /** The grid file format */
    format: GridFileFormat;
    /** The grid file application direction */
    direction: GridFileDirection;
}
/** Grid file definition containing name of the file, the format and the direction it should be applied
 *  @public
 */
export declare class GridFileDefinition implements GridFileDefinitionProps {
    /** Name of the grid shift file. This name is relative to the expected dictionary root document.
     *  Typical grid shift file name will contain first the country name it applies to then possibly some sub path.
     *  Example of existing grid files:
     *  Germany/BETA2007.gsb or Brazil/SAD69_003.GSB but sometimes longer paths USA/NADCON/conus.l*s
     *  Note that the file name can contain wildcards when the format requires more than one file. For example
     *  the NADCON format makes use of a different file for latitude and longitude shifts thus the .l*s extension in the
     *  file name above.
     *  Forward slash is always used to separate the path components.
     */
    readonly fileName: string;
    /** The grid file format */
    readonly format: GridFileFormat;
    /** The grid file application direction */
    readonly direction: GridFileDirection;
    constructor(data?: GridFileDefinitionProps);
    /** Creates a Grid File Definition from JSON representation.
     * @public */
    static fromJSON(data: GridFileDefinitionProps): GridFileDefinition;
    /** Creates a JSON from the Grid File Definition
     * @public */
    toJSON(): GridFileDefinitionProps;
    /** Compares two grid file definition. It is a strict compare operation not an equivalence test.
     *  @public */
    equals(other: GridFileDefinition): boolean;
}
/** This interface represents a grid files based geodetic transformation.
 *  @public
 *  @extensions
 */
export interface GridFileTransformProps {
    /** The list of grid files. The order of file is meaningful, the first encountered that covers the extent of coordinate
     *  transformation will be used. */
    files: GridFileDefinitionProps[];
    /** The positional vector fallback transformation used for extents not covered by the grid files */
    fallback?: PositionalVectorTransformProps;
}
/** This class represents a grid files based geodetic transformation.
 *  @public
 */
export declare class GridFileTransform implements GridFileTransformProps {
    /** The list of grid files. The order of file is meaningful, the first encountered that covers the extent of coordinate
     *  transformation will be used. */
    readonly files: GridFileDefinition[];
    /** The positional vector fallback transformation used for extents not covered by the grid files */
    readonly fallback?: PositionalVectorTransform;
    constructor(data?: GridFileTransformProps);
    /** Creates a Grid File Transform from JSON representation.
     * @public */
    static fromJSON(data: GridFileTransformProps): GridFileTransform;
    /** Creates a JSON from the Grid File Transform definition
     * @public */
    toJSON(): GridFileTransformProps;
    /** Compares two Grid File Transforms. It is a strict compare operation not an equivalence test.
     *  @public */
    equals(other: GridFileTransform): boolean;
}
/** This interface represents a geodetic transformation that enables transforming longitude/latitude coordinates
 *  from one datum to another.
 *  @public
 *  @extensions
 */
export interface GeodeticTransformProps {
    /** The method used by the geodetic transform */
    method: GeodeticTransformMethod;
    /** The complete definition of the source geodetic ellipsoid referred to by ellipsoidId.
     *  The source ellipsoid identifier enables obtaining the shape of the Earth mathematical model
     *  for the purpose of performing the transformation.
    */
    sourceEllipsoid?: GeodeticEllipsoidProps;
    /** The complete definition of the target geodetic ellipsoid referred to by ellipsoidId.
     *  The target ellipsoid identifier enables obtaining the shape of the Earth mathematical model
     *  for the purpose of performing the transformation.*/
    targetEllipsoid?: GeodeticEllipsoidProps;
    /** The id of the source datum. */
    sourceDatumId?: string;
    /** The id of the target datum. This id is useful to seach within a geodetic transform path for
     *  a shortcut to another included datum.
    */
    targetDatumId?: string;
    /** When method is Geocentric this property contains the geocentric parameters */
    geocentric?: GeocentricTransformProps;
    /** When method is PositionalVector this property contains the positional vector parameters */
    positionalVector?: PositionalVectorTransformProps;
    /** When method is GridFiles this property contains the grid files parameters */
    gridFile?: GridFileTransformProps;
}
/** This class represents a geodetic transformation that enables transforming longitude/latitude coordinates
 *  from one datum to another.
 *  @public
 */
export declare class GeodeticTransform implements GeodeticTransformProps {
    /** The method used by the geodetic transform */
    readonly method: GeodeticTransformMethod;
    /** The identifier of the source geodetic datum as stored in the dictionary or the service database.
     *  This identifier is optional and informational only.
     */
    readonly sourceEllipsoid?: GeodeticEllipsoid;
    /** The complete definition of the target geodetic ellipsoid referred to by ellipsoidId.
     *  The target ellipsoid identifier enables obtaining the shape of the Earth mathematical model
     *  for the purpose of performing the transformation.*/
    readonly targetEllipsoid?: GeodeticEllipsoid;
    /** The id of the source datum. */
    readonly sourceDatumId?: string;
    /** The id of the target datum. This id is useful to seach within a geodetic transform path for
     *  a shortcut to another included datum.
    */
    readonly targetDatumId?: string;
    /** When method is Geocentric this property contains the geocentric parameters */
    readonly geocentric?: GeocentricTransform;
    /** When method is PositionalVector this property contains the positional vector parameters */
    readonly positionalVector?: PositionalVectorTransform;
    /** When method is GridFiles this property contains the grid files parameters */
    readonly gridFile?: GridFileTransform;
    constructor(data?: GeodeticTransformProps);
    /** Creates a Geodetic Transform from JSON representation.
     * @public */
    static fromJSON(data: GeodeticTransformProps): GeodeticTransform;
    /** Creates a JSON from the Geodetic Transform definition
     * @public */
    toJSON(): GeodeticTransformProps;
    /** Compares two geodetic Transforms. It is not an equivalence test since
     * descriptive information is strictly compared. A minuscule tolerance is applied to number compares.
     *  @public */
    equals(other: GeodeticTransform): boolean;
}
/** This interface represents a geodetic datum transform path. It contains a list of transforms linking
 *  a source to a target geodetic datum.
 *  @public
 */
export interface GeodeticTransformPathProps {
    /** Source geodetic datum key name */
    sourceDatumId?: string;
    /** Target geodetic datum key name */
    targetDatumId?: string;
    /** The transformation path from source datum to target datum.
     */
    transforms?: GeodeticTransformProps[];
}
/** This class represents a geodetic datum transform path. It contains a list of transforms linking
 *  a source to a target geodetic datum.
 *  @public
 */
export declare class GeodeticTransformPath implements GeodeticTransformPathProps {
    /** Source geodetic datum key name */
    readonly sourceDatumId?: string;
    /** Target geodetic datum key name */
    readonly targetDatumId?: string;
    /** The transformation path from source datum to target datum.
     */
    readonly transforms?: GeodeticTransform[];
    constructor(_data?: GeodeticTransformPathProps);
    /** Creates a Geodetic transform path from JSON representation.
     * @public */
    static fromJSON(data: GeodeticTransformPathProps): GeodeticTransformPath;
    /** Creates a JSON from the Geodetic transform path definition
     * @public */
    toJSON(): GeodeticTransformPathProps;
    /** Compares two Geodetic Transform Paths. It is a strict compare operation not an equivalence test.
     * It takes into account descriptive properties not only mathematical definition properties.
     *  @public */
    equals(other: GeodeticTransformPath): boolean;
}
/** This interface represents a geodetic datum. Geodetic datums are based on an ellipsoid.
 *  In addition to the ellipsoid definition they are the base for longitude/latitude coordinates.
 *  Geodetic datums are the basis for geodetic transformations. Most geodetic datums are defined by specifying
 *  the transformation to the common base WGS84 (or local equivalent). The transforms property can contain the
 *  definition of the transformation path to WGS84.
 *  Sometimes there exists transformation paths direct from one non-WGS84 datum to another non-WGS84. The current model
 *  does not allow specifications of these special paths at the moment.
 *  @public
 *  @extensions
 */
export interface GeodeticDatumProps {
    /** GeodeticDatum key name */
    id?: string;
    /** Description */
    description?: string;
    /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.
     ** If false or undefined then the definition is not deprecated.
     */
    deprecated?: boolean;
    /** A textual description of the source of the geodetic datum definition. */
    source?: string;
    /** The EPSG code of the geodetic datum. If undefined then there is no EPSG code associated. */
    epsg?: number;
    /** The key name to the base Ellipsoid. */
    ellipsoidId?: string;
    /** The full definition of the geodetic ellipsoid associated to the datum. If undefined then the ellipsoidId must be used to fetch the definition from the dictionary, geographic coordinate system service or the backend */
    ellipsoid?: GeodeticEllipsoidProps;
    /** The transformation to WGS84. If null then there is no known transformation to WGS84. Although
     *  this is rare it occurs in a few cases where the country charges for obtaining and using
     *  the transformation and its parameters, or if the transformation is maintained secret for military reasons.
     *  In this case the recommendation is to considered the geodetic datum to be coincident to WGS84 keeping
     *  in mind imported global data such as Google Map or Bing Map data may be approximately located.
     *  The list of transforms contains normally a single transform but there can be a sequence of transformations
     *  required to transform to WGS84, such as the newer datum definitions for Slovakia or Switzerland.
     */
    transforms?: GeodeticTransformProps[];
    /** The optional list of transformation paths to other datum. These should only be used if the path to
     *  these datum is not included in the transforms property definition of the transformation to WGS84.
     *  It should not be used either if the transformation to the datum can be infered from the concatenation
     *  of their individual paths to WGS84. These should be used to express an alternate shortcut path that is
     *  inherent to the nature of the datum. As an example it is required to represent the transformation
     *  from NAD27 to NAD83/2011 since NAD83/2011 is coincident to WGS84 yet the NAD27 datum to WGS84 path
     *  only includes transformation to NAD83, making the path of transforms to NAD83/2011 not related
     *  to the available paths to WGS84.
     */
    additionalTransformPaths?: GeodeticTransformPathProps[];
}
/** This class represents a geodetic datum. Geodetic datums are based on an ellipsoid.
 *  In addition to the ellipsoid definition they are the base for longitude/latitude coordinates.
 *  Geodetic datums are the basis for geodetic transformations. Most geodetic datums are defined by specifying
 *  the transformation to the common base WGS84 (or local equivalent). The transforms property can contain the
 *  definition of the transformation path to WGS84.
 *  Sometimes there exists transformation paths direct from one non-WGS84 datum to another non-WGS84. The current model
 *  does not allow specifications of these special paths at the moment.
 *  @public
 */
export declare class GeodeticDatum implements GeodeticDatumProps {
    /** GeodeticDatum key name */
    readonly id?: string;
    /** Description */
    readonly description?: string;
    /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.
     *  If false then the definition is not deprecated. Default is false.
     */
    readonly deprecated: boolean;
    /** A textual description of the source of the geodetic datum definition. */
    readonly source?: string;
    /** The EPSG code of the geodetic datum. If undefined then there is no EPSG code associated. */
    readonly epsg?: number;
    /** The key name to the base Ellipsoid. */
    readonly ellipsoidId?: string;
    /** The full definition of the geodetic ellipsoid associated to the datum. If undefined then the ellipsoidId must
     *  be used to fetch the definition from the dictionary, geographic coordinate system service or the backend
     */
    readonly ellipsoid?: GeodeticEllipsoid;
    /** The transformation to WGS84. If null then there is no known transformation to WGS84. Although
     *  this is rare it occurs in a few cases where the country charges for obtaining and using
     *  the transformation and its parameters, or if the transformation is maintained secret for military reasons.
     *  In this case the recommendation is to considered the geodetic datum to be coincident to WGS84 keeping
     *  in mind imported global data such as Google Map or Bing Map data may be approximately located.
     *  The list of transforms contains normally a single transform but there can be a sequence of transformations
     *  required to transform to WGS84, such as the newer datum definitions for Slovakia or Switzerland.
     */
    readonly transforms?: GeodeticTransform[];
    /** The optional list of transformation paths to other datum. These should only be used if the path to
     *  these datum is not included in the transforms property definition of the transformation to WGS84.
     *  It should not be used either if the transformation to the datum can be infered from the concatenation
     *  of their individual paths to WGS84. These should be used to express an alternate shortcut path that is
     *  inherent to the nature of the datum. As an example it is required to represent the transformation
     *  from NAD27 to NAD83/2011 since NAD83/2011 is coincident to WGS84 yet the NAD27 datum to WGS84 path
     *  only includes transformation to NAD83, making the path of transforms to NAD83/2011 not related
     *  to the available paths to WGS84.
     */
    readonly additionalTransformPaths?: GeodeticTransformPath[];
    constructor(_data?: GeodeticDatumProps);
    /** Creates a Geodetic Datum from JSON representation.
     * @public */
    static fromJSON(data: GeodeticDatumProps): GeodeticDatum;
    /** Creates a JSON from the Geodetic Datum definition
     * @public */
    toJSON(): GeodeticDatumProps;
    /** Compares two Geodetic Datums. It is a strict compare operation not an equivalence test.
     * It takes into account descriptive properties not only mathematical definition properties.
     *  @public */
    equals(other: GeodeticDatum): boolean;
}
//# sourceMappingURL=GeodeticDatum.d.ts.map