UNPKG

maplibre-gl

Version:

BSD licensed community fork of mapbox-gl, a WebGL interactive maps library

75 lines (72 loc) 2.73 kB
import {warnOnce} from '../../util/util'; import {MercatorProjection} from './mercator_projection'; import {MercatorTransform} from './mercator_transform'; import {MercatorCameraHelper} from './mercator_camera_helper'; import {GlobeProjection} from './globe_projection'; import {GlobeTransform} from './globe_transform'; import {GlobeCameraHelper} from './globe_camera_helper'; import {VerticalPerspectiveCameraHelper} from './vertical_perspective_camera_helper'; import {VerticalPerspectiveTransform} from './vertical_perspective_transform'; import {VerticalPerspectiveProjection} from './vertical_perspective_projection'; import type {ProjectionSpecification} from '@maplibre/maplibre-gl-style-spec'; import type {Projection} from './projection'; import type {ITransform} from '../transform_interface'; import type {ICameraHelper} from './camera_helper'; export function createProjectionFromName(name: ProjectionSpecification['type']): { projection: Projection; transform: ITransform; cameraHelper: ICameraHelper; } { if (Array.isArray(name)) { const globeProjection = new GlobeProjection({type: name}); return { projection: globeProjection, transform: new GlobeTransform(), cameraHelper: new GlobeCameraHelper(globeProjection), }; } switch (name) { case 'mercator': { return { projection: new MercatorProjection(), transform: new MercatorTransform(), cameraHelper: new MercatorCameraHelper(), }; } case 'globe': { const globeProjection = new GlobeProjection({type: [ 'interpolate', ['linear'], ['zoom'], 11, 'vertical-perspective', 12, 'mercator' ]}); return { projection: globeProjection, transform: new GlobeTransform(), cameraHelper: new GlobeCameraHelper(globeProjection), }; } case 'vertical-perspective': { return { projection: new VerticalPerspectiveProjection(), transform: new VerticalPerspectiveTransform(), cameraHelper: new VerticalPerspectiveCameraHelper(), }; } default: { warnOnce(`Unknown projection name: ${name}. Falling back to mercator projection.`); return { projection: new MercatorProjection(), transform: new MercatorTransform(), cameraHelper: new MercatorCameraHelper(), }; } } }