import { NadGridStore } from '../readers/nadgrid'; import type { MValue, VectorPoint } from '../geometry'; import type { ProjectionParams, ProjectionTransform, ProjectionTransformDefinition } from './projections'; /** * # PROJ4 Transformer * * ## Description * * A Transformer class contains all projections necessary for converting coordinates from one * projection to another. This is a modular class that can be extended to add new projections * as needed to reduce code size and improve performance. * Both forward and inverse projections are default set to wgs84. * * Extends the {@link NadGridStore} class to support grid lookups * * ## Usage * * ### Full Example * * ```ts * import { Transformer, injectAllDefinitions, injectAllEPSGCodes } from 's2-tools'; * * // Create a transform using a source and destination projection * const transform = new Transformer(); * // inject all default definition projections. This is not memory efficient but ensures all * // projections are available * injectAllDefinitions(transform); * // inject all common EPSG codes. This is not memory efficient but ensures all EPSG codes are available * injectAllEPSGCodes(transform); * // If the transform requires a grid, this is how you add it. * transform.addGridFromReader( * 'BETA2007.gsb', * new MMapReader(`${__dirname}/fixtures/BETA2007.gsb`), * ); * // Set the source and destination projections * transform.setSource('EPSG_31466'); * transform.setDestination('EPSG_25832'); * // example forward projection * const forward = transform.forward({ x: 2559552, y: 5670982 }); * // example inverse projection * const inverse = transform.inverse({ x: 349757.381712518, y: 5671004.06504954 }); * ``` * * ### Minimal Example only adding the Oblique Mercator * * ```ts * import { Transformer, HotineObliqueMercator, EPSG_8803 } from 's2-tools'; * * const transform = new Transformer(); * transform.insertDefinition(HotineObliqueMercator); * transform.insertEPSGCode('EPSG_8803', EPSG_8803); * * transform.setDestination('EPSG_8803'); * * const forward = transform.forward({ x: 60.8, y: -132.2 }); * ``` */ export declare class Transformer extends NadGridStore { #private; epsgs: Map; definitions: Map; wgs84: ProjectionTransform; source: ProjectionTransform; destination: ProjectionTransform; /** * Prepares default definitions, source transform, and destination transform * @param sourceCode - convenience: if provided, we run `this.setSource(sourceCode)` immediately * @param destCode - convenience: if provided, we run `this.setDestination(destCode)` immediately */ constructor(sourceCode?: string | ProjectionParams, destCode?: string | ProjectionParams); /** * Set the source projection * @param sourceCode - can be a name or a coded definition */ setSource(sourceCode: string | ProjectionParams): void; /** * Set the destination projection * @param destCode - can be a name or a coded definition */ setDestination(destCode: string | ProjectionParams): void; /** * Insert a projection definition * ```ts * import { HotineObliqueMercator } from 's2-tools'; * const transformer = new Transformer(); * transformer.insertDefinition(HotineObliqueMercator); * ``` * @param def - a class that may be instatiated with future setSource and setDestination * @param names - optionally add projection reference names to add lookups to the definition */ insertDefinition(def: ProjectionTransformDefinition, names?: string[]): void; /** * Insert an EPSG code definition * ```ts * import { EPSG_4326 } from 's2-tools'; * const transformer = new Transformer(); * transformer.insertEPSGCode('EPSG_4326', EPSG_4326); * ``` * @param code - EPSG code to insert e.g. "EPSG_4326" (uses underscore instead of colon) * @param value - the EPSG definition which is either a WKT string object or proj4 encoded string */ insertEPSGCode(code: string, value: string): void; /** * Forward projection from src projection to dest projection * ```ts * const transformer = new Transformer(); * transformer.setSource('EPSG_4326'); * const point = transformer.forward({ x: 0, y: 0 }); * ``` * @param p - vector point currently in the "source" projection * @param enforceAxis - enforce axis ensures axis consistency relative to the final projection * @returns - vector point in the "destination" projection */ forward(p: VectorPoint, enforceAxis?: boolean): VectorPoint; /** * Inverse projection from dest projection to src projection * ```ts * const transformer = new Transformer(); * transformer.setSource('EPSG_4326'); * const point = transformer.inverse({ x: 0, y: 0 }); * ``` * @param p - vector point currently in the "destination" projection * @param enforceAxis - enforce axis ensures axis consistency relative to the final projection * @returns - vector point in the "source" projection */ inverse(p: VectorPoint, enforceAxis?: boolean): VectorPoint; } /** * Inject all default definitions into the transformer * @param transformer - projection transformer */ export declare function injectAllDefinitions(transformer: Transformer): void; /** * Inject all EPSG codes into the transformer * @param transformer - the transformer to inject EPSG codes to */ export declare function injectAllEPSGCodes(transformer: Transformer): void; //# sourceMappingURL=transformer.d.ts.map