/** * Projection registry. * * Wraps `d3-geo` rather than reimplementing spherical math: clipping, * antimeridian cutting and adaptive resampling are correctness traps that took * d3-geo years to get right. * * Core ships the projections d3-geo itself provides. Anything else (Mollweide, * Robinson, Winkel Tripel, Eckert, Bonne, ...) lives in `d3-geo-projection` and * is registered by the consumer via `ApexMaps.registerProjection()`, which * keeps the core bundle inside its 150 kB budget. * * @module geo/Projections */ import type { ProjectionName, ProjectionSpec } from '../types'; /** * A d3-geo style projection. Typed loosely on purpose: the various d3 * projections expose different optional methods (`parallels`, `clipAngle`, * `rotate`), and composite projections such as Albers USA omit several of them. */ export interface GeoProjection { (coordinates: [number, number]): [number, number] | null; invert?: (point: [number, number]) => [number, number] | null; scale: (scale?: number) => number & GeoProjection; translate: (t?: [number, number]) => [number, number] & GeoProjection; fitExtent?: (extent: [[number, number], [number, number]], object: unknown) => GeoProjection; rotate?: (angles?: number[]) => number[] & GeoProjection; center?: (center?: [number, number]) => [number, number] & GeoProjection; parallels?: (parallels?: [number, number]) => [number, number] & GeoProjection; angle?: (angle?: number) => number & GeoProjection; clipAngle?: (angle?: number) => number & GeoProjection; clipExtent?: (extent?: [[number, number], [number, number]] | null) => unknown; reflectX?: (reflect?: boolean) => unknown; reflectY?: (reflect?: boolean) => unknown; stream: (stream: unknown) => unknown; [method: string]: unknown; } export type ProjectionFactory = () => GeoProjection; /** Register a projection factory under a name. */ export declare function registerProjection(name: string, factory: ProjectionFactory): void; export declare function hasProjection(name: string): boolean; /** Registered projection names, sorted. */ export declare function listProjections(): string[]; /** * Whether this projection came from `ApexMaps.registerProjection` rather than the * built-in set. Used for licensing, so it answers about the name a caller asked * for, not about the factory behind it: re-registering `'mercator'` over the * built-in is still the built-in name. */ export declare function isCustomProjection(name: string): boolean; export declare function isComposite(name: string): boolean; export declare function isGlobe(name: string): boolean; export declare function isAzimuthal(name: string): boolean; /** * Build a configured projection from a spec. * * Accepts a bare name (`'mercator'`) or a spec object. Unknown names throw * rather than silently falling back, because a silent fallback to the wrong * projection produces a map that looks plausible and is wrong, which is the * worst possible failure mode in cartography. * */ export declare function createProjection(spec?: ProjectionName | ProjectionSpec): GeoProjection; /** * Whether a projection maps the whole sphere (so a sphere outline and a full * graticule make sense) or only a hemisphere / region. * */ export declare function isGlobal(name: string): boolean; //# sourceMappingURL=Projections.d.ts.map