@allmaps/transform
Version:
Coordinate transformation functions
108 lines (107 loc) • 5.41 kB
JavaScript
import { BaseGcpTransformer } from './BaseGcpTransformer.js';
import { generalGcpToPointForForward, generalGcpToPointForBackward } from '../shared/conversion-functions.js';
/**
* Class for General Ground Control Point Transformers.
*
* A General GCP Transformer can transform input geometries between 'source' and 'destination' spaces.
*
* It does this using a transformation (of a certain type) built from
* a set of General Ground Control Points (with coordinates in
* source and destination space) and a transformation type.
*
* It has a method to transform 'Forward' (from source to destination space)
* and 'Backward' (from destination to source space),
*
* The extending GeneralGcpTransform class handles the general case where:
* - We read in Ground Control Points using the GeneralGcp type, with `source` and `destination` fields.
* - We use the terms 'forward' and 'backward' for the two transformations.
* - Both source and destination space are exected to be 2D cartesian spaces with the same handedness (x- and y-axes have the same orientations).
* */
export class GeneralGcpTransformer extends BaseGcpTransformer {
/**
* Create a GeneralGcpTransformer
*
* @param generalGcps - An array of General Ground Control Points (GCPs)
* @param type - The transformation type
* @param partialGeneralGcpTransformerOptions - General GCP Transformer options
*/ constructor(generalGcps, type = 'polynomial', partialGeneralGcpTransformerOptions) {
super(generalGcps, type, partialGeneralGcpTransformerOptions);
}
get generalGcps() {
return this.generalGcpsInternal;
}
/**
* Get the forward transformation. Create if it doesn't exist yet.
*/
getForwardTransformation() {
return super.getForwardTransformationInternal();
}
/**
* Get the backward transformation. Create if it doesn't exist yet.
*/
getBackwardTransformation() {
return super.getBackwardTransformationInternal();
}
/**
* Get the resolution of the forward transformation in source space, within a given bbox.
*
* This informs you in how fine the warping is, in source space.
* It can be useful e.g. to create a triangulation in source space
* that is fine enough for this warping.
*
* It is obtained by transforming forward two linestring,
* namely the horizontal and vertical midlines of the given bbox.
* The forward transformation will refine these lines:
* it will break them in small enough pieces to obtain a near continuous result.
* Returned in the length of the shortest piece, measured in source coordinates.
*
* @param sourceBbox - BBox in source space where the resolution is requested
* @param partialGeneralGcpTransformOptions - General GCP Transform options to consider during the transformation
* @returns Resolution of the forward transformation in source space
*/
getForwardTransformationResolution(sourceBbox, partialGeneralGcpTransformOptions) {
return super.getForwardTransformationResolutionInternal(sourceBbox, partialGeneralGcpTransformOptions);
}
/**
* Get the resolution of the backward transformation in destination space, within a given bbox.
*
* This informs you in how fine the warping is, in destination space.
* It can be useful e.g. to create a triangulation in destination space
* that is fine enough for this warping.
*
* It is obtained by transforming backward two linestring,
* namely the horizontal and vertical midlines of the given bbox.
* The backward transformation will refine these lines:
* it will break them in small enough pieces to obtain a near continuous result.
* Returned in the length of the shortest piece, measured in destination coordinates.
*
* @param destinationBbox - BBox in destination space where the resolution is requested
* @param partialGeneralGcpTransformOptions - General GCP Transform options to consider during the transformation
* @returns Resolution of the backward transformation in destination space
*/
getBackwardTransformationResolution(destinationBbox, partialGeneralGcpTransformOptions) {
return super.getBackwardTransformationResolutionInternal(destinationBbox, partialGeneralGcpTransformOptions);
}
/**
* Transform a geometry forward
*
* @param geometry - Geometry to transform
* @param partialGeneralGcpTransformOptions - General GCP Transform options
* @param generalGcpToP - Return type function
* @returns Forward transform of input geometry
*/
transformForward(geometry, partialGeneralGcpTransformOptions, generalGcpToP = generalGcpToPointForForward) {
return super.transformForwardInternal(geometry, partialGeneralGcpTransformOptions, generalGcpToP);
}
/**
* Transform a geometry backward
*
* @param geometry - Geometry to transform
* @param partialGeneralGcpTransformOptions - General GCP Transform options
* @param generalGcpToP - Return type function
* @returns Backward transform of input geometry
*/
transformBackward(geometry, partialGeneralGcpTransformOptions, generalGcpToP = generalGcpToPointForBackward) {
return super.transformBackwardInternal(geometry, partialGeneralGcpTransformOptions, generalGcpToP);
}
}