Browser SDK API reference
These signatures are generated from TypeScript declarations of committed core sources. This is a development-source snapshot, not an npm or native binary release.
Core: 65d76a28454ec82456e27245099bab86832a2b7d · ABI: 1 · package source: 0.2.0.
JSON index · TypeScript declarations · Native API · Script API
Save all relative declaration dependencies together. These files provide types; execution still requires matching JS, Worker and WASM. MapView is the current SDK entry point. Consult the script guide for the supported shared MapLibre-style facade and legacy GIS adapter.
MapAppEvent
export interface MapAppEvent {
name: string;
data: unknown;
}
MapViewOptions
export interface MapViewOptions {
wasmUrl?: string | URL;
interactive?: boolean;
contextMenu?: false | ((event: MapContextMenuEvent, defaults: ContextMenuItem[]) => ContextMenuItem[]);
apiToken?: string | (() => string | undefined);
transformRequest?: RequestTransform;
resourceTimeoutMs?: number;
resourcePolicy?: ResourcePolicy;
reducedMotion?: boolean;
materialFadeDuration?: number;
fadeDuration?: number;
worker?: boolean;
locale?: LocalePreference;
createWorker?: () => Worker;
bindings?: () => Promise<WasmBindings>;
}
MapViewDefaults
export interface MapViewDefaults {
createWorker?: () => Worker;
bindings?: () => Promise<WasmBindings>;
}
GeoJSONOptions
export interface GeoJSONOptions {
crs?: string | number;
}
Projection
export type Projection = "geographic" | "mercator" | "globe" | "auto";
MapErrorEvent
export interface MapErrorEvent {
message: string;
}
ContextMenuItem
export type ContextMenuItem = {
label: string;
action: () => void;
disabled?: boolean;
} | "separator";
MapContextMenuEvent
export interface MapContextMenuEvent {
x: number;
y: number;
lngLat: [number, number];
}
RasterTileOptions
export interface RasterTileOptions {
attribution?: string;
name?: string;
scheme?: "geographic" | "mercator";
kind?: "image" | "terrain-rgb";
tileSize?: number;
exaggeration?: number;
subdomains?: string[];
minZoom?: number;
maxZoom?: number;
zoomOffset?: number;
opacity?: number;
}
LayerInfo
export interface LayerInfo {
kind: "vector" | "raster";
id: number;
name: string;
visible: boolean;
}
LayerStyle
export interface LayerStyle {
fill?: string;
line?: string;
lineWidth?: number;
pointSize?: number;
opacity?: number;
}
MapViewTarget
export interface MapViewTarget {
center: [number, number];
zoom: number;
}
MapViewState
export interface MapViewState {
projection?: Projection;
zoom?: number;
pitch?: number;
bounds?: readonly [number, number, number, number];
center: [number, number];
bearing: number;
metersPerPixel: number;
}
MapClickEvent
export interface MapClickEvent extends MapPointerEvent {
readonly x: number;
readonly y: number;
readonly legacyLngLat: readonly [number, number] | null;
readonly feature: PickResult | null;
}
MapMoveEvent
export interface MapMoveEvent {
readonly cameraState: MapCameraState;
readonly animation?: CameraAnimationTag;
readonly error?: {
code: string;
message: string;
};
}
MapCameraEvent
export type MapCameraEvent = MapMoveEvent;
MapViewEventMap
export interface MapViewEventMap {
'styledata': StyleDataEvent;
'style.load': StyleDataEvent;
load: MapLifecycleEvent;
render: MapLifecycleEvent;
idle: MapLifecycleEvent;
remove: MapLifecycleEvent;
'sqs.scenechange': SceneChangeEvent;
'sqs.lightingchange': LightingChangeEvent;
'sqs.playbackchange': PlaybackChangeEvent;
movestart: MapCameraEvent;
moveend: MapCameraEvent;
zoomstart: MapCameraEvent;
zoom: MapCameraEvent;
zoomend: MapCameraEvent;
rotatestart: MapCameraEvent;
rotate: MapCameraEvent;
rotateend: MapCameraEvent;
pitchstart: MapCameraEvent;
pitch: MapCameraEvent;
pitchend: MapCameraEvent;
rollstart: MapCameraEvent;
roll: MapCameraEvent;
rollend: MapCameraEvent;
move: MapMoveEvent;
"sqs.sourceschange": SourceChangeEvent;
sources: SourceChangeEvent;
"sqs.imageschange": ImagesChangeEvent;
"sqs.resourceschange": ResourcePolicyChangeEvent;
"styleimagemissing": MapStyleImageMissingEvent;
"sqs.gestureschange": GestureChangeEvent;
"sqs.attributionschange": AttributionChangeEvent;
terrain: TerrainEvent;
sourcedataloading: SourceLifecycleEvent;
sourcedata: SourceLifecycleEvent;
sourcedataabort: SourceLifecycleEvent;
"sqs.layerschange": StyleLayersChangeEvent;
styleLayers: StyleLayersChangeEvent;
click: MapClickEvent;
dblclick: MapPointerEvent;
mousedown: MapPointerEvent;
mouseup: MapPointerEvent;
mousemove: MapPointerEvent;
mouseenter: MapPointerEvent;
mouseleave: MapPointerEvent;
contextmenu: MapPointerEvent;
view: MapViewState;
layers: LayerInfo[];
error: AttributionErrorEvent | MapErrorEvent | (SourceLifecycleEvent & {
readonly message: string;
});
locale: Locale;
app: MapAppEvent;
}
Backend
export interface Backend {
readonly backend: string;
readonly capabilities: Record<string, unknown>;
call(method: string, ...args: unknown[]): void;
confirmCall<T = void>(method: string, ...args: unknown[]): Promise<T>;
request<T>(method: string, ...args: unknown[]): Promise<T>;
flush(options?: FlushOptions): Promise<CommandReceipt>;
appCall(method: string, args: unknown[], transfer?: Transferable[]): void;
appRequest<T>(method: string, args: unknown[], transfer?: Transferable[]): Promise<T>;
destroy(): void;
}
DynamicImageHost
export interface DynamicImageHost {
dispatch(batch: DynamicImageBatch): DynamicImageDispatch | Promise<DynamicImageDispatch>;
reconcile(state: DynamicImageState): void;
contextLost(): void;
clear(): void;
}
DynamicImageHostScope
export interface DynamicImageHostScope {
call(method: string, args: unknown[]): Promise<unknown>;
close(): void;
}
MapView.editing
readonly editing: EditingAPI;
MapView.lighting
readonly lighting: LightingAPI;
MapView.sqs
readonly sqs: Readonly<{
images: Readonly<{
createCallbackScope: (host: DynamicImageHost) => DynamicImageHostScope;
}>;
getMaterialFadeDuration: () => Promise<number>;
setMaterialFadeDuration: (ms: number) => void;
getLabelFadeDuration: () => Promise<number>;
setLabelFadeDuration: (ms: number) => void;
animations: AnimationsAPI;
playbacks: PlaybacksAPI;
scenes: ScenesAPI;
resources: ResourcesAPI;
getCapabilities: () => Promise<Readonly<Record<string, unknown>>>;
}>;
MapView.dragPan
readonly dragPan: GestureHandler;
MapView.scrollZoom
readonly scrollZoom: GestureHandler;
MapView.doubleClickZoom
readonly doubleClickZoom: GestureHandler;
MapView.keyboard
readonly keyboard: KeyboardHandler;
MapView.touchZoomRotate
readonly touchZoomRotate: TouchZoomRotateHandler;
MapView.touchPitch
readonly touchPitch: GestureHandler;
MapView.gesturesState
gesturesState(): Promise<GesturePolicy>;
MapView.mapInstanceId
readonly mapInstanceId: `${string}-${string}-${string}-${string}-${string}`;
MapView.canvas
readonly canvas: HTMLCanvasElement;
MapView.offscreen
readonly offscreen: boolean;
MapView.create
static create(target: HTMLElement, options?: MapViewOptions): Promise<MapView>;
MapView.locale
get locale(): Locale;
MapView.setLocale
setLocale(locale: LocalePreference): void;
MapView.text
get text(): Messages;
MapView.backend
get backend(): string;
MapView.capabilities
get capabilities(): Record<string, unknown>;
MapView.addGeoJSON
addGeoJSON(name: string, data: string | object, options?: GeoJSONOptions): number;
MapView.loadImage
loadImage(url: string, options?: MapImageLoadOptions): Promise<MapImageLoadResult>;
MapView.addImage
addImage(id: string, image: MapImageData | StyleImageInterface, options?: MapImageOptions): this;
MapView.updateImage
updateImage(id: string, image: MapImageData): this;
MapView.removeImage
removeImage(id: string): this;
MapView.triggerRepaint
triggerRepaint(): void;
MapView.hasImage
hasImage(id: string): Promise<boolean>;
MapView.getGlyphs
getGlyphs(): Promise<string | undefined>;
MapView.setGlyphs
setGlyphs(url: string | null | undefined, options?: {
validate?: true;
}): this;
MapView.listImages
listImages(): Promise<readonly string[]>;
MapView.getImage
getImage(id: string): Promise<MapImageSnapshot | undefined>;
MapView.getImageInfo
getImageInfo(id: string): Promise<MapImageInfo | undefined>;
MapView.onImagesChange
onImagesChange(handler: (event: ImagesChangeEvent) => void): () => void;
MapView.addLayer
addLayer(specification: GeoJSONLayerSpecification, beforeId?: string): this;
MapView.getLayer
getLayer(id: string): Promise<GeoJSONLayerSpecification | undefined>;
MapView.queryRenderedFeatures
queryRenderedFeatures(geometryOrOptions?: QueryPixel | [QueryPixel, QueryPixel] | QueryRenderedFeatureOptions, options?: QueryRenderedFeatureOptions): Promise<QueriedRenderedFeature[]>;
MapView.getStyleLayers
getStyleLayers(): Promise<readonly GeoJSONLayerInfo[]>;
MapView.setLayerMetadata
setLayerMetadata(id: string, metadata: Record<string, unknown> | null): this;
MapView.getLayerMetadata
getLayerMetadata(id: string): Promise<Record<string, unknown>>;
MapView.setPaintProperty
setPaintProperty(id: string, name: string, value: unknown, options?: {
validate?: true;
}): this;
MapView.getPaintProperty
getPaintProperty(id: string, name: string): Promise<unknown>;
MapView.setLayoutProperty
setLayoutProperty(id: string, name: string, value: unknown, options?: {
validate?: true;
}): this;
MapView.getLayoutProperty
getLayoutProperty(id: string, name: string): Promise<unknown>;
MapView.setFilter
setFilter(id: string, filter: unknown[] | null, options?: {
validate?: true;
}): this;
MapView.getFilter
getFilter(id: string): Promise<unknown[] | null>;
MapView.setLayerZoomRange
setLayerZoomRange(id: string, minzoom: number, maxzoom: number): this;
MapView.addSource
addSource(id: string, options: SourceOptions): this;
MapView.removeSource
removeSource(id: string): this;
MapView.isSourceLoaded
isSourceLoaded(id: string): Promise<boolean>;
MapView.setFeatureState
setFeatureState(target: FeatureStateTarget | QueriedSourceFeature, state: FeatureState): this;
MapView.getFeatureState
getFeatureState(target: FeatureStateTarget | QueriedSourceFeature): Promise<FeatureState>;
MapView.removeFeatureState
removeFeatureState(target: FeatureStateRemovalTarget, key?: string): this;
MapView.getGlobalState
getGlobalState(): Promise<Readonly<Record<string, unknown>>>;
MapView.setGlobalStateProperty
setGlobalStateProperty(name: string, value: unknown): this;
MapView.querySourceFeatures
querySourceFeatures(id: string, options?: QuerySourceFeatureOptions): Promise<QueriedSourceFeature[]>;
MapView.getSourceInfo
getSourceInfo(id: string): Promise<SourceInfo | undefined>;
MapView.setTerrain
setTerrain(options: TerrainSpecification | null): this;
MapView.getTerrain
getTerrain(): Promise<Readonly<TerrainSpecification> | null>;
MapView.queryTerrainElevation
queryTerrainElevation(point: readonly [number, number] | {
lng: number;
lat: number;
} | {
lon: number;
lat: number;
}): Promise<number | null>;
MapView.getSource
getSource(id: string): Promise<MapSource | undefined>;
MapView.addRasterTiles
addRasterTiles(template: string, options?: RasterTileOptions): number;
MapView.removeRasterTiles
removeRasterTiles(id: number): boolean;
MapView.setRasterTilesVisible
setRasterTilesVisible(id: number, visible: boolean): boolean;
MapView.setRasterTilesOpacity
setRasterTilesOpacity(id: number, opacity: number): void;
MapView.getStyle
getStyle(): Promise<import("./styles.js").StyleSpecification>;
MapView.setStyle
setStyle(style: string | null | import("./styles.js").StyleSpecification, options?: StyleOptions): this;
MapView.setStyleBasemap
setStyleBasemap(url: string): void;
MapView.clearStyleBasemap
clearStyleBasemap(): void;
MapView.setProjection
setProjection(projection: Projection | ProjectionSpecification): this;
MapView.projection
get projection(): Projection;
MapView.setGlobeView
setGlobeView(center: [number, number], zoom?: number): void;
MapView.setModel
setModel(data: Uint8Array, placement: ModelPlacement): Promise<void>;
MapView.setModelPlacement
setModelPlacement(placement: ModelPlacement): Promise<void>;
MapView.clearModel
clearModel(): Promise<void>;
MapView.getModelState
getModelState(): Promise<ModelState | null>;
MapView.basemapMessage
get basemapMessage(): string;
MapView.basemapStatus
get basemapStatus(): BasemapStatus;
MapView.removeLayer
removeLayer(id: string): this;
MapView.removeLayer
removeLayer(id: number): boolean;
MapView.setLayerVisible
setLayerVisible(id: number, visible: boolean): boolean;
MapView.setLayerStyle
setLayerStyle(id: number, style: LayerStyle): void;
MapView.setLayerOpacity
setLayerOpacity(id: number, opacity: number): void;
MapView.moveLayer
moveLayer(id: string, beforeId?: string): this;
MapView.moveLayer
moveLayer(id: number, index: number): boolean;
MapView.renameLayer
renameLayer(id: number, name: string): boolean;
MapView.focusLayer
focusLayer(id: number): void;
MapView.selectFeature
selectFeature(id: number, index: number): Promise<PickResult | null>;
MapView.focusFeature
focusFeature(id: number, index: number): void;
MapView.setView
setView(center: [number, number], zoom: number): void;
MapView.getAttributions
getAttributions(): Promise<AttributionSnapshot>;
MapView.getCenter
getCenter(): Promise<{
lng: number;
lat: number;
}>;
MapView.getZoom
getZoom(): Promise<number>;
MapView.getBearing
getBearing(): Promise<number>;
MapView.getPitch
getPitch(): Promise<number>;
MapView.getRoll
getRoll(): Promise<number>;
MapView.getPadding
getPadding(): Promise<CameraPadding>;
MapView.getBounds
getBounds(): Promise<[[number, number], [number, number]]>;
MapView.getLight
getLight(): Promise<ResolvedLightSpecification | null>;
MapView.setLight
setLight(light: LightSpecification, options?: LightSetterOptions): this;
MapView.getProjection
getProjection(): Promise<ProjectionSpecification>;
MapView.project
project(position: LngLatLike): Promise<{
x: number;
y: number;
}>;
MapView.unproject
unproject(point: PointLike): Promise<{
lng: number;
lat: number;
}>;
MapView.cameraForBounds
cameraForBounds(bounds: LngLatBoundsLike, options?: CameraFitOptions): Promise<PlanarCameraPose>;
MapView.getMinZoom
getMinZoom(): Promise<number>;
MapView.getMaxZoom
getMaxZoom(): Promise<number>;
MapView.scaleAt
scaleAt(options?: ScaleAtOptions): Promise<ScaleAtResult>;
MapView.viewModeState
viewModeState(): Promise<Readonly<{
mode: '2d' | '3d';
projection: 'mercator' | 'geographic' | 'globe';
pitch: number;
terrain: boolean;
default3dPitch: 45;
maximumPitch: 65;
switchMethod: 'setPitch';
canSwitchTo3d: boolean;
canSwitchTo2d: boolean;
restorePolicy: 'explicit-target-pitch';
}>>;
MapView.cameraState
cameraState(): Promise<MapCameraState>;
MapView.easeTo
easeTo(options: EaseToOptions): this;
MapView.flyTo
flyTo(options: FlyToOptions): this;
MapView.stop
stop(): this;
MapView.isEasing
isEasing(): Promise<boolean>;
MapView.isMoving
isMoving(): Promise<boolean>;
MapView.isZooming
isZooming(): Promise<boolean>;
MapView.isRotating
isRotating(): Promise<boolean>;
MapView.animationState
animationState(): Promise<CameraAnimationState>;
MapView.setReducedMotion
setReducedMotion(value: boolean): this;
MapView.jumpTo
jumpTo(options: CameraOptions): this;
MapView.fitBounds
fitBounds(bounds: LngLatBoundsLike, options?: CameraFitOptions): this;
MapView.setCenter
setCenter(center: LngLatLike): this;
MapView.setZoom
setZoom(zoom: number): this;
MapView.setPitch
setPitch(pitch: number): this;
MapView.setPadding
setPadding(padding: number | Partial<CameraPadding>): this;
MapView.setRoll
setRoll(roll: number): this;
MapView.zoomTo
zoomTo(zoom: number, options?: ImmediateNavigationOptions): this;
MapView.rotateTo
rotateTo(bearing: number, options?: ImmediateNavigationOptions): this;
MapView.panTo
panTo(center: LngLatLike, options?: ImmediatePanOptions): this;
MapView.panBy
panBy(offset: PointLike, options?: ImmediatePanByOptions): this;
MapView.resetNorth
resetNorth(options?: ImmediateNavigationOptions): this;
MapView.resetNorthPitch
resetNorthPitch(options?: ImmediateNavigationOptions): this;
MapView.getView
getView(): Promise<MapViewTarget>;
MapView.setApiToken
setApiToken(token: MapViewOptions["apiToken"]): void;
MapView.layers
layers(): LayerInfo[];
MapView.setVisible
setVisible(layer: Pick<LayerInfo, "kind" | "id">, visible: boolean): boolean;
MapView.zoomIn
zoomIn(options?: ImmediateNavigationOptions): this;
MapView.zoomOut
zoomOut(options?: ImmediateNavigationOptions): this;
MapView.bearing
get bearing(): number;
MapView.viewState
viewState(): MapViewState;
MapView.fit
fit(): void;
MapView.setBearing
setBearing(degrees: number): this;
MapView.pan
pan(dx: number, dy: number): void;
MapView.zoomAt
zoomAt(factor: number, x: number, y: number): void;
MapView.pick
pick(x: number, y: number): Promise<PickResult | null>;
MapView.screenToLngLat
screenToLngLat(x: number, y: number): [number, number];
MapView.clearSelection
clearSelection(): void;
MapView.onCameraMove
onCameraMove(handler: (event: MapMoveEvent) => void): () => void;
MapView.onCameraLifecycle
onCameraLifecycle(handler: (type: CameraEventType | 'error', event: MapCameraEvent) => void): () => void;
MapView.onStyleLayersChange
onStyleLayersChange(handler: (event: StyleLayersChangeEvent) => void): () => void;
MapView.onSourceLifecycle
onSourceLifecycle(handler: (type: SourceLifecycleType, event: SourceLifecycleEvent) => void): () => void;
MapView.onGesturesChange
onGesturesChange(handler: (event: GestureChangeEvent) => void): () => void;
MapView.onAttributionsChange
onAttributionsChange(handler: (event: AttributionChangeEvent) => void): () => void;
MapView.onSourcesChange
onSourcesChange(handler: (event: SourceChangeEvent) => void): () => void;
MapView.listens
listens(type: string): boolean;
MapView.on
on<K extends keyof MapViewEventMap>(type: K, handler: (event: MapViewEventMap[K]) => void): MapEventSubscription;
MapView.on
on(type: PointerEventType, layers: MapLayerSelector, handler: (event: MapPointerEvent) => void): MapEventSubscription;
MapView.on
on(type: string, handler: (event: EventedEvent) => unknown): MapEventSubscription;
MapView.off
off<K extends keyof MapViewEventMap>(type: K, handler: (event: MapViewEventMap[K]) => void): this;
MapView.off
off(type: PointerEventType, layers: MapLayerSelector, handler: (event: MapPointerEvent) => void): this;
MapView.off
off(type: string, handler: (event: EventedEvent) => unknown): this;
MapView.once
once<K extends keyof MapViewEventMap>(type: K): Promise<MapViewEventMap[K]>;
MapView.once
once<K extends keyof MapViewEventMap>(type: K, handler: (event: MapViewEventMap[K]) => void): this;
MapView.once
once(type: PointerEventType, layers: MapLayerSelector): Promise<MapPointerEvent>;
MapView.once
once(type: PointerEventType, layers: MapLayerSelector, handler: (event: MapPointerEvent) => void): this;
MapView.once
once(type: string): Promise<EventedEvent>;
MapView.once
once(type: string, handler: (event: EventedEvent) => unknown): this;
MapView.fire
fire(event: {
readonly type: string;
readonly [key: string]: unknown;
}): this;
MapView.fire
fire(type: string, data?: Record<string, unknown>): this;
MapView.setEventedParent
setEventedParent(parent?: EventedParent | null, data?: EventedParentData): this;
MapView.onPointerEvents
onPointerEvents(handler: (type: PointerEventType, event: MapPointerEvent) => void): () => void;
MapView.dispatchPointerEvent
dispatchPointerEvent(input: PointerInput): Promise<MapPointerEvent>;
MapView.lifecycleState
lifecycleState(): Promise<LifecycleState>;
MapView.loaded
loaded(): Promise<boolean>;
MapView.flush
flush(options?: FlushOptions): Promise<MapCommitResult>;
MapView.requestRender
requestRender(): void;
MapView.appCall
appCall(method: string, args?: unknown[], transfer?: Transferable[]): void;
MapView.appRequest
appRequest<T = unknown>(method: string, args?: unknown[], transfer?: Transferable[]): Promise<T>;
MapView.destroy
destroy(): void;
MapView.create
static create(target: HTMLElement, options?: MapViewOptions): Promise<MapView>;
CommandReceipt
export interface CommandReceipt {
submittedSequence: number;
appliedSequence: number;
stage: 'applied' | 'rendered';
camera: CameraSnapshot;
frameSequence?: number;
}
MapCommitResult
export interface MapCommitResult extends CommandReceipt {
mapInstanceId: string;
}
FlushOptions
export interface FlushOptions {
render?: boolean;
since?: number;
}
CommandJournal.constructor
constructor(invoke: (method: string, args: unknown[]) => unknown, camera: () => CameraSnapshot, render: () => Promise<FrameReport>);
CommandJournal.call
call(method: string, args: unknown[]): unknown;
CommandJournal.confirmCall
confirmCall<T = void>(method: string, args: unknown[]): Promise<T>;
CommandJournal.flush
flush(options?: FlushOptions): Promise<CommandReceipt>;
commandError
export declare function commandError(code: string, message: string): Error & {
code: string;
};
LngLatLike
export type LngLatLike = [number, number] | {
lng: number;
lat: number;
};
PointLike
export type PointLike = [number, number] | {
x: number;
y: number;
};
LngLatBoundsLike
export type LngLatBoundsLike = [number, number, number, number] | [LngLatLike, LngLatLike];
CameraPadding
export interface CameraPadding {
top: number;
right: number;
bottom: number;
left: number;
}
CameraOptions
export interface CameraOptions {
center?: LngLatLike;
zoom?: number;
bearing?: number;
pitch?: number;
roll?: number;
padding?: number | Partial<CameraPadding>;
}
CameraFitOptions
export interface CameraFitOptions {
padding?: number | Partial<CameraPadding>;
offset?: PointLike;
bearing?: number;
minZoom?: number;
maxZoom?: number;
animate?: boolean;
duration?: number;
linear?: boolean;
easing?: (t: number) => number;
essential?: boolean;
}
PlanarCameraPose
export interface PlanarCameraPose {
center: [number, number];
zoom: number;
bearing: number;
pitch: number;
roll: 0;
padding: CameraPadding;
}
PlanarCameraState
export interface PlanarCameraState {
camera: PlanarCameraPose;
projection: 'geographic' | 'mercator';
viewport: {
width: number;
height: number;
pixelRatio: number;
};
}
ProjectionSpecification
export interface ProjectionSpecification {
type: 'geographic' | 'mercator' | 'globe';
}
GlobeCameraPose
export interface GlobeCameraPose {
center: [number, number];
zoom: number;
bearing: number;
pitch: number;
roll: number;
padding: CameraPadding;
}
GlobeCameraState
export interface GlobeCameraState {
camera: GlobeCameraPose;
projection: 'globe';
viewport: {
width: number;
height: number;
pixelRatio: number;
};
}
MapCameraState
export type MapCameraState = PlanarCameraState | GlobeCameraState;
ScaleAtOptions
export interface ScaleAtOptions {
point?: PointLike;
maxWidth?: number;
}
ScaleAtResult
export interface ScaleAtResult {
point: {
x: number;
y: number;
};
position: {
lng: number;
lat: number;
};
projection: 'geographic' | 'mercator' | 'globe';
metersPerPixel: number;
distance: number;
width: number;
maxWidth: number;
unit: 'm';
pixelUnit: 'css';
model: 'sphere-local';
earthRadius: 6371008.8;
approximate: true;
}
AnimationOptions
export interface AnimationOptions {
duration?: number;
animate?: boolean;
linear?: boolean;
easing?: (t: number) => number;
essential?: boolean;
}
EaseToOptions
export interface EaseToOptions extends CameraOptions, AnimationOptions {
around?: LngLatLike;
offset?: PointLike;
sqsShortestWorldCopy?: boolean;
}
FlyToOptions
export interface FlyToOptions extends CameraOptions, AnimationOptions {
offset?: PointLike;
curve?: number;
speed?: number;
screenSpeed?: number;
minZoom?: number;
maxDuration?: number;
sqsShortestWorldCopy?: boolean;
}
CameraAnimationTag
export interface CameraAnimationTag {
readonly id: string;
readonly status: 'running' | 'completed' | 'cancelled' | 'failed';
readonly reason: string | null;
}
CameraAnimationState
export interface CameraAnimationState {
readonly active: boolean;
readonly animation: CameraAnimationTag | null;
readonly reducedMotion: boolean;
readonly elapsed?: number;
readonly duration?: number;
readonly target?: PlanarCameraPose | GlobeCameraPose;
}
ImmediateNavigationOptions
export interface ImmediateNavigationOptions {
around?: LngLatLike;
offset?: PointLike;
animate?: boolean;
duration?: number;
linear?: boolean;
easing?: (t: number) => number;
essential?: boolean;
}
ImmediatePanOptions
export interface ImmediatePanOptions {
offset?: PointLike;
animate?: boolean;
duration?: number;
linear?: boolean;
easing?: (t: number) => number;
essential?: boolean;
}
ImmediatePanByOptions
export interface ImmediatePanByOptions {
animate?: boolean;
duration?: number;
linear?: boolean;
easing?: (t: number) => number;
essential?: boolean;
}
ResourceType
export declare enum ResourceType {
Style = "Style",
Source = "Source",
Tile = "Tile",
Glyphs = "Glyphs",
SpriteJSON = "SpriteJSON",
SpriteImage = "SpriteImage",
Image = "Image",
Unknown = "Unknown"
}
RequestParameters
export interface RequestParameters extends RequestInit {
url?: string;
type?: 'string' | 'json' | 'arrayBuffer' | 'image';
collectResourceTiming?: boolean;
}
RequestTransform
export type RequestTransform = (url: string, resourceType: ResourceType) => RequestParameters | undefined;
AddProtocolResponseData
export type AddProtocolResponseData = ArrayBuffer | Uint8Array | string;
GetResourceResponse
export interface GetResourceResponse<T> {
data: T;
}
AddProtocolAction
export type AddProtocolAction = (requestParameters: Readonly<RequestParameters & {
url: string;
resourceType: ResourceType;
maxBytes: number;
}>, abortController: AbortController) => Promise<GetResourceResponse<AddProtocolResponseData>>;
addProtocol
export declare function addProtocol(customProtocol: string, loadFn: AddProtocolAction): void;
removeProtocol
export declare function removeProtocol(customProtocol: string): void;
ResourceFallback
export interface ResourceFallback {
prefix: string;
replacements: string[];
resourceTypes?: ResourceType[];
attemptTimeoutMs?: number;
forwardQuery?: boolean;
}
ResourcePolicy
export interface ResourcePolicy {
maxConcurrentRequests?: number;
attemptTimeoutMs?: number;
retries?: number;
retryDelayMs?: number;
cache?: RequestCache;
fallbacks?: ResourceFallback[];
}
ResourceConfiguration
export interface ResourceConfiguration {
resourceTimeoutMs?: number;
resourcePolicy?: ResourcePolicy;
}
ResourceQuery
export interface ResourceQuery {
url: string;
resourceType: ResourceType;
maxBytes: number;
method?: string;
forceNoStore?: boolean;
}
ResourcePlan
export interface ResourcePlan {
readonly version: 1;
readonly urls: readonly string[];
readonly method: string;
readonly resourceType: ResourceType;
readonly maxBytes: number;
readonly maxConcurrentRequests: number;
readonly resourceTimeoutMs: number;
readonly attemptTimeoutMs: number;
readonly retries: number;
readonly retryDelayMs: number;
readonly cache?: RequestCache;
readonly retryOn: Readonly<{
network: boolean;
attemptTimeout: boolean;
httpStatuses: readonly number[];
serverErrors: boolean;
}>;
}
ResourcesAPI
export interface ResourcesAPI {
createProtocolScope(): ResourceProtocolScope;
configure(configuration: ResourceConfiguration): Promise<Readonly<Required<ResourceConfiguration>>>;
getConfiguration(): Promise<Readonly<Required<ResourceConfiguration>>>;
plan(query: ResourceQuery): Promise<ResourcePlan>;
}
ResourcePolicyChangeEvent
export interface ResourcePolicyChangeEvent {
readonly type: 'sqs.resourceschange';
readonly context: 'resourcePolicy';
readonly resourceConfiguration: Readonly<Required<ResourceConfiguration>>;
}
StyleSpecification
export interface StyleSpecification {
version: 8;
state?: Record<string, {
default: unknown;
}>;
sources: Record<string, unknown>;
layers: readonly unknown[];
name?: string;
metadata?: Record<string, unknown>;
glyphs?: string;
sprite?: string | readonly {
id: string;
url: string;
}[];
}
StyleOptions
export interface StyleOptions {
diff?: boolean;
}
styleUrl
export declare function styleUrl(style: unknown, options?: unknown): string | null | StyleSpecification;
StyleLifecycleState
export interface StyleLifecycleState {
generation: number;
revision: number;
loaded: boolean;
}
StyleDataEvent
export interface StyleDataEvent {
type: 'styledata' | 'style.load';
dataType: 'style';
styleState: StyleLifecycleState;
}
immutableStyleEvent
export declare function immutableStyleEvent(value: StyleDataEvent): StyleDataEvent;
captureMaterialFadeDuration
export declare function captureMaterialFadeDuration(ms: unknown): number;
captureLabelFadeDuration
export declare function captureLabelFadeDuration(ms: unknown): number;
FeatureId
export type FeatureId = string | number;
Position
export type Position = [number, number] | [number, number, number];
GeoJSONGeometry
export type GeoJSONGeometry = {
type: 'Point';
coordinates: Position;
} | {
type: 'MultiPoint' | 'LineString';
coordinates: Position[];
} | {
type: 'MultiLineString' | 'Polygon';
coordinates: Position[][];
} | {
type: 'MultiPolygon';
coordinates: Position[][][];
} | {
type: 'GeometryCollection';
geometries: GeoJSONGeometry[];
};
GeoJSONFeature
export interface GeoJSONFeature {
type: 'Feature';
id?: FeatureId;
properties: Record<string, unknown> | null;
geometry: GeoJSONGeometry | null;
[member: string]: unknown;
}
GeoJSONFeatureCollection
export interface GeoJSONFeatureCollection {
type: 'FeatureCollection';
features: GeoJSONFeature[];
[member: string]: unknown;
}
GeoJSON
export type GeoJSON = GeoJSONGeometry | GeoJSONFeature | GeoJSONFeatureCollection;
ClusterPropertySpecification
export type ClusterPropertySpecification = ['+' | '-' | '*' | '/' | 'min' | 'max' | 'all' | 'any' | 'concat' | unknown[], unknown[] | number | boolean | string];
GetClusterOptions
export interface GetClusterOptions {
cluster: boolean;
clusterRadius: number;
clusterMaxZoom: number;
}
SetClusterOptions
export interface SetClusterOptions {
cluster?: boolean;
clusterRadius?: number;
clusterMaxZoom?: number;
}
LiveSourceOptions
export interface LiveSourceOptions {
fields: Record<string, 'string' | 'number' | 'boolean'>;
allowDelta?: boolean;
}
LivePoint
export interface LivePoint {
id: string;
coordinate: [number, number];
properties: Record<string, string | number | boolean | null>;
}
LiveUpdate
export type LiveUpdate = {
kind: 'snapshot';
epoch: string;
sequence: string;
points: LivePoint[];
} | {
kind: 'delta';
epoch: string;
baseSequence: string;
sequence: string;
upserts: LivePoint[];
deletes: string[];
};
LiveSourceState
export interface LiveSourceState {
initialized: boolean;
epoch: string | null;
sequence: string | null;
protocolRevision: string;
pointCount: number;
allowDelta: boolean;
fields: Record<string, 'string' | 'number' | 'boolean'>;
}
LiveUpdateResult
export interface LiveUpdateResult {
applied: boolean;
state: LiveSourceState;
dataRevision: string;
}
LiveSourceSnapshot
export interface LiveSourceSnapshot {
source: SourceIdentity;
state: LiveSourceState;
data: GeoJSONFeatureCollection;
}
LiveReceiverOptions
export interface LiveReceiverOptions {
owner?: SceneIdentity;
protocol?: 'gis-live-v1';
transport: {
type: 'http-poll';
url: string;
intervalMs?: number;
} | {
type: 'websocket';
url: string;
reconnectDelayMs?: number;
};
}
LiveReceiverIdentity
export interface LiveReceiverIdentity extends SourceIdentity {
receiverInstanceId: string;
}
LiveReceiverState
export interface LiveReceiverState {
owner?: SceneIdentity;
ownerState?: SceneStatus;
source: SourceIdentity;
receiverInstanceId: string;
transport: 'http-poll' | 'websocket';
connection?: 'connecting' | 'open' | 'retrying' | 'paused' | 'stopped';
status: 'running' | 'paused' | 'stopped';
loading: boolean;
intervalMs: number;
lastError: SourceLoadError | null;
dataRevision: string;
}
LiveReceiver
export interface LiveReceiver extends Readonly<LiveReceiverIdentity> {
getState(): Promise<LiveReceiverState>;
pause(): Promise<void>;
resume(): Promise<void>;
stop(): Promise<void>;
}
LiveSourceAPI
export interface LiveSourceAPI {
connectLive(options: LiveReceiverOptions): Promise<LiveReceiver>;
getLiveReceiver(): Promise<LiveReceiver | undefined>;
applyLiveUpdate(frame: LiveUpdate): Promise<LiveUpdateResult>;
getLiveState(): Promise<LiveSourceState>;
freezeLiveSnapshot(): Promise<LiveSourceSnapshot>;
}
GeoJSONSourceOptions
export interface GeoJSONSourceOptions {
sqsLive?: LiveSourceOptions;
type: 'geojson';
lineMetrics?: boolean;
data: GeoJSON | string;
attribution?: string;
promoteId?: string;
generateId?: boolean;
cluster?: boolean;
clusterRadius?: number;
clusterMaxZoom?: number;
clusterMinPoints?: number;
clusterProperties?: Record<string, ClusterPropertySpecification>;
}
GeoJSONFeatureDiff
export interface GeoJSONFeatureDiff {
id: FeatureId;
newGeometry?: GeoJSONGeometry | null;
removeAllProperties?: boolean;
removeProperties?: string[];
addOrUpdateProperties?: {
key: string;
value: unknown;
}[];
}
GeoJSONSourceDiff
export interface GeoJSONSourceDiff {
removeAll?: boolean;
remove?: FeatureId[];
add?: GeoJSONFeature[];
update?: GeoJSONFeatureDiff[];
}
SourceIdentity
export interface SourceIdentity {
id: string;
sourceInstanceId: string;
}
SourceInfo
export interface SourceInfo extends SourceIdentity {
sqsLiveReceiver?: LiveReceiverState;
sqsLive?: LiveSourceState;
type: 'geojson' | 'image' | 'video' | 'canvas' | 'vector' | 'raster' | 'raster-dem';
mediaState?: MediaState;
tileMetadata?: TileSourceMetadata;
tileState?: TileSourceState;
dataRevision: string;
stateRevision: string;
loaded: boolean;
loading: boolean;
hasData: boolean;
requestRevision: string;
loadError: SourceLoadError | null;
featureCount: number;
bounds: [number, number, number, number] | null;
attribution: string;
promoteId: string | Record<string, string> | null;
generateId: boolean;
lineMetrics: boolean;
cluster: boolean;
supportsUpdateData: boolean;
referenceCount: number;
}
GeoJSONSource
export interface GeoJSONSource extends Readonly<SourceIdentity> {
readonly sqs: LiveSourceAPI;
readonly type: 'geojson';
readonly dataRevision: string;
getData(): Promise<GeoJSON>;
setData(data: GeoJSON | string): Promise<void>;
updateData(diff: GeoJSONSourceDiff): Promise<void>;
getClusterOptions(): Promise<GetClusterOptions>;
setClusterOptions(options: SetClusterOptions): Promise<void>;
getClusterChildren(clusterId: number): Promise<QueriedSourceFeature[]>;
getClusterLeaves(clusterId: number, limit?: number, offset?: number): Promise<QueriedSourceFeature[]>;
getClusterExpansionZoom(clusterId: number): Promise<number>;
}
SourceChangeEvent
export interface SourceChangeEvent {
readonly sourceCount: number;
}
QuerySourceFeatureOptions
export interface QuerySourceFeatureOptions {
filter?: unknown[];
validate?: true;
sourceLayer?: string;
sqs?: {
offset?: number;
limit?: number;
sourceInstanceId?: string;
dataRevision?: string;
};
}
QueriedSourceFeature
export interface QueriedSourceFeature extends GeoJSONFeature {
sourceLayer?: string;
source: string;
sqs: {
sourceInstanceId: string;
dataRevision: string;
featureIndex: number;
};
}
FeatureStateTarget
export interface FeatureStateTarget {
source: string;
id: FeatureId;
sourceLayer?: string;
sqs?: {
sourceInstanceId?: string;
dataRevision?: string;
};
[member: string]: unknown;
}
FeatureState
export type FeatureState = Record<string, unknown>;
FeatureStateRemovalTarget
export type FeatureStateRemovalTarget = Omit<FeatureStateTarget, "id"> & {
source: string;
id?: FeatureId;
};
SourceLoadError
export interface SourceLoadError {
readonly code: string;
readonly message: string;
}
SourceLifecycleType
export type SourceLifecycleType = 'sourcedataloading' | 'sourcedata' | 'sourcedataabort' | 'error';
SourceLifecycleEvent
export interface SourceLifecycleEvent {
readonly sqsLiveReceiver?: LiveReceiverState;
readonly sqsLive?: LiveSourceState;
readonly type: SourceLifecycleType;
readonly sourceId: string;
readonly sourceInstanceId: string;
readonly dataType: 'source';
readonly sourceDataType: 'content' | 'metadata';
readonly isSourceLoaded: boolean;
readonly loading: boolean;
readonly hasData: boolean;
readonly dataRevision: string;
readonly requestRevision: string;
readonly loadError: SourceLoadError | null;
readonly error?: SourceLoadError;
}
immutableSourceEvent
export declare function immutableSourceEvent<T extends SourceNotice>(event: T): T;
immutableSourceInfo
export declare function immutableSourceInfo(info: SourceInfo): SourceInfo;
MediaCoordinates
export type MediaCoordinates = [[number, number], [number, number], [number, number], [number, number]];
MediaSourceOptions
export interface MediaSourceOptions {
type: 'image' | 'video';
coordinates: MediaCoordinates;
attribution?: string;
url?: string;
urls?: string[];
}
ImageSourceUpdate
export interface ImageSourceUpdate {
url: string;
coordinates?: MediaCoordinates;
}
CanvasSourceOptions
export interface CanvasSourceOptions {
type: 'canvas';
canvas: string | HTMLCanvasElement;
coordinates: MediaCoordinates;
animate?: boolean;
attribution?: string;
}
SourceOptions
export type SourceOptions = GeoJSONSourceOptions | MediaSourceOptions | CanvasSourceOptions | TileSourceOptions;
MediaState
export interface MediaState {
kind: 'image' | 'video' | 'canvas';
coordinates: MediaCoordinates;
revision: number;
frameSequence: number;
paused: boolean;
width: number;
height: number;
byteLength: number;
duration?: number;
currentTime?: number;
canvas?: string;
}
MediaFrame
export interface MediaFrame {
sequence: number;
width: number;
height: number;
data: Uint8Array;
}
MediaFrameResult
export interface MediaFrameResult {
applied: boolean;
state: SourceInfo;
}
MediaSourceBase
export interface MediaSourceBase extends Readonly<SourceIdentity> {
readonly dataRevision: string;
updateImage(options: ImageSourceUpdate): Promise<void>;
setCoordinates(coordinates: MediaCoordinates): Promise<void>;
play(): Promise<void>;
pause(): Promise<void>;
readonly sqs: {
getState(): Promise<MediaState>;
fail(reason: {
code: string;
message: string;
}): Promise<void>;
submitFrame(frame: MediaFrame): Promise<MediaFrameResult>;
};
}
MediaSource
export interface MediaSource extends MediaSourceBase {
readonly type: 'image' | 'video';
}
CanvasSource
export interface CanvasSource extends MediaSourceBase {
readonly type: 'canvas';
getCanvas(): HTMLCanvasElement;
}
MapSource
export type MapSource = GeoJSONSource | MediaSource | CanvasSource | TileSource;
TileSourceMetadata
export interface TileSourceMetadata {
tiles: string[];
minzoom: number;
maxzoom: number;
bounds: [number, number, number, number];
scheme: 'xyz' | 'tms';
attribution: string;
tileSize: number | null;
metadataLoaded: boolean;
volatile: boolean;
encoding?: 'mapbox' | 'terrarium' | 'custom';
}
TileSourceOptions
export interface TileSourceOptions {
type: 'vector' | 'raster' | 'raster-dem';
url?: string;
tiles?: string[];
minzoom?: number;
maxzoom?: number;
bounds?: [number, number, number, number];
scheme?: 'xyz' | 'tms';
attribution?: string;
tileSize?: 256 | 512;
encoding?: 'mvt' | 'mapbox' | 'terrarium' | 'custom';
redFactor?: number;
greenFactor?: number;
blueFactor?: number;
baseShift?: number;
promoteId?: string | Record<string, string>;
volatile?: boolean;
}
TileSource
export interface TileSource extends Readonly<SourceIdentity> {
readonly type: 'vector' | 'raster' | 'raster-dem';
readonly dataRevision: string;
setTiles(tiles: string[]): Promise<void>;
setUrl(url: string): Promise<void>;
readonly sqs: {
getTileMetadata(): Promise<TileSourceMetadata>;
};
}
TileSourceState
export interface TileSourceState {
visibleTiles: number;
readyTiles: number;
fallbackTiles: number;
pendingTiles: number;
cachedTiles: number;
byteLength: number;
}
TerrainSpecification
export interface TerrainSpecification {
source: string;
exaggeration?: number;
}
TerrainEvent
export interface TerrainEvent {
readonly type: 'terrain';
readonly terrain: Readonly<TerrainSpecification> | null;
}
SourceNotice
export type SourceNotice = SourceLifecycleEvent | TerrainEvent;
EditVertex
export interface EditVertex {
partIndex: number;
vertexIndex: number;
coordinate: [number, number];
closed: boolean;
}
EditState
export interface EditState {
layerId: number | null;
canUndo: boolean;
canRedo: boolean;
undoCount: number;
redoCount: number;
undoLabel: string | null;
redoLabel: string | null;
}
EditVertices
export interface EditVertices {
vertices: EditVertex[];
totalCount: number;
truncated: boolean;
}
EditCommand
export type EditCommand = {
method: 'begin';
layerId: number;
} | {
method: 'apply' | 'discard' | 'state' | 'undo' | 'redo' | 'getData';
} | {
method: 'draw';
geometry: GeoJSONGeometry;
properties?: Record<string, unknown>;
} | {
method: 'append';
features: GeoJSONFeature[];
} | {
method: 'replace';
features: GeoJSONFeature[];
label: string;
} | {
method: 'vertices';
feature: number;
limit?: number;
} | {
method: 'hitVertex' | 'hitSegment';
feature: number;
point: [number, number];
radius: number;
} | {
method: 'featuresInBox';
bounds: [number, number, number, number];
} | {
method: 'verticesInBox';
feature: number;
bounds: [number, number, number, number];
} | {
method: 'select' | 'deleteFeatures';
features: number[];
} | {
method: 'moveVertex';
feature: number;
vertex: EditVertex;
coordinate: [number, number];
topology?: boolean;
} | {
method: 'moveVertices';
feature: number;
vertices: EditVertex[];
from: [number, number];
to: [number, number];
} | {
method: 'insertVertex';
feature: number;
vertex: EditVertex;
coordinate: [number, number];
} | {
method: 'deleteVertices';
feature: number;
vertices: EditVertex[];
topology?: boolean;
} | {
method: 'translate';
features: number[];
from: [number, number];
to: [number, number];
} | {
method: 'setAttribute';
feature: number;
field: string;
value: string;
} | {
method: 'snap';
coordinate: [number, number];
radius: number;
vertex?: boolean;
segment?: boolean;
gridMeters?: number;
} | {
method: 'trace';
from: [number, number];
to: [number, number];
radius: number;
};
EditResult
export type EditResult = null | EditState | EditVertices | EditVertex | EditVertex[] | number[] | [number, number] | [number, number][] | GeoJSONFeatureCollection;
EditingAPI
export interface EditingAPI {
execute(command: EditCommand): Promise<EditResult>;
begin(layerId: number): Promise<null>;
apply(): Promise<null>;
discard(): Promise<null>;
state(): Promise<EditState>;
undo(): Promise<null>;
redo(): Promise<null>;
getData(): Promise<GeoJSONFeatureCollection>;
draw(geometry: GeoJSONGeometry, properties?: Record<string, unknown>): Promise<null>;
append(features: GeoJSONFeature[]): Promise<null>;
replace(features: GeoJSONFeature[], label: string): Promise<null>;
vertices(feature: number, limit?: number): Promise<EditVertices>;
hitVertex(feature: number, point: [number, number], radius: number): Promise<EditVertex | null>;
hitSegment(feature: number, point: [number, number], radius: number): Promise<EditVertex | null>;
featuresInBox(bounds: [number, number, number, number]): Promise<number[]>;
verticesInBox(feature: number, bounds: [number, number, number, number]): Promise<EditVertex[]>;
select(features: number[]): Promise<null>;
moveVertex(feature: number, vertex: EditVertex, coordinate: [number, number], topology?: boolean): Promise<null>;
moveVertices(feature: number, vertices: EditVertex[], from: [number, number], to: [number, number]): Promise<null>;
insertVertex(feature: number, vertex: EditVertex, coordinate: [number, number]): Promise<null>;
deleteVertices(feature: number, vertices: EditVertex[], topology?: boolean): Promise<null>;
deleteFeatures(features: number[]): Promise<null>;
translate(features: number[], from: [number, number], to: [number, number]): Promise<null>;
setAttribute(feature: number, field: string, value: string): Promise<null>;
snap(coordinate: [number, number], radius: number, options?: {
vertex?: boolean;
segment?: boolean;
gridMeters?: number;
}): Promise<[number, number] | null>;
trace(from: [number, number], to: [number, number], radius: number): Promise<[number, number][] | null>;
}
SceneIdentity
export interface SceneIdentity {
readonly id: string;
readonly sceneInstanceId: string;
}
SceneStatus
export type SceneStatus = 'draft' | 'running' | 'paused' | 'stopped';
SceneReceiver
export interface SceneReceiver {
readonly source: SourceIdentity;
readonly receiverInstanceId: string;
}
SceneClockSnapshot
export interface SceneClockSnapshot extends SceneIdentity {
readonly state: SceneStatus;
readonly elapsedMs: number;
}
SceneSnapshot
export interface SceneSnapshot extends SceneIdentity {
readonly name: string;
readonly state: SceneStatus;
readonly revision: string;
readonly resourceCount: number;
readonly receivers: readonly SceneReceiver[];
readonly sources: readonly SourceIdentity[];
readonly playbacks: readonly PlaybackIdentity[];
}
Scene
export interface Scene extends SceneIdentity {
getState(): Promise<SceneSnapshot>;
getClock(): Promise<SceneClockSnapshot>;
start(): Promise<void>;
pause(): Promise<void>;
resume(): Promise<void>;
stop(): Promise<void>;
attachSource(source: SourceIdentity): Promise<void>;
detachSource(source: SourceIdentity): Promise<void>;
}
ScenesAPI
export interface ScenesAPI {
create(options: {
id: string;
name?: string;
}): Promise<Scene>;
get(id: string): Promise<Scene | undefined>;
list(): Promise<readonly SceneSnapshot[]>;
remove(scene: SceneIdentity): Promise<void>;
}
SceneChangeEvent
export interface SceneChangeEvent {
readonly type: 'sqs.scenechange';
readonly reason: string;
readonly scene: SceneSnapshot;
}
immutableScene
export declare function immutableScene(value: SceneSnapshot): SceneSnapshot;
immutableSceneEvent
export declare function immutableSceneEvent(value: SceneChangeEvent): SceneChangeEvent;
bindScene
export declare function bindScene(handle: Scene, identity: SceneIdentity): Scene;
sceneIdentity
export declare function sceneIdentity(value: SceneIdentity): SceneIdentity;
PlaybackIdentity
export interface PlaybackIdentity {
readonly id: string;
readonly playbackInstanceId: string;
}
PlaybackState
export type PlaybackState = 'ready' | 'playing' | 'paused' | 'stopped' | 'completed' | 'failed';
PlaybackSnapshotBase
export interface PlaybackSnapshotBase extends PlaybackIdentity {
readonly owner: SceneIdentity;
readonly ownerState: SceneStatus;
readonly source: SourceIdentity;
readonly sourceRevision: string;
readonly state: PlaybackState;
readonly epoch: string;
readonly elapsedMs: number;
readonly positionMs: number;
readonly durationMs: number;
readonly loop: boolean;
readonly delayRemainingMs: number;
readonly error: {
readonly code: string;
readonly message: string;
} | null;
}
RoutePlaybackSnapshot
export interface RoutePlaybackSnapshot extends PlaybackSnapshotBase {
readonly kind: 'route';
readonly target: SourceIdentity;
readonly targetRevision: string;
readonly position: readonly [number, number];
readonly headingRadians: number;
}
LineFrameSnapshot
export interface LineFrameSnapshot {
readonly phase: number;
readonly reveal: number;
readonly opacity: number;
readonly widthScale: number;
readonly color: readonly [number, number, number, number];
}
LinePlaybackSnapshot
export interface LinePlaybackSnapshot extends PlaybackSnapshotBase {
readonly kind: 'line';
readonly layer: LayerIdentity;
readonly sourceStateRevision: string;
readonly frame: LineFrameSnapshot;
readonly visibleEffect: boolean;
readonly pattern?: {
readonly id: string;
readonly imageInstanceId: string;
readonly revision: string;
};
}
PlaybackSnapshot
export type PlaybackSnapshot = RoutePlaybackSnapshot | LinePlaybackSnapshot;
RoutePlaybackOptions
export interface RoutePlaybackOptions {
id: string;
source: SourceIdentity;
target: SourceIdentity;
duration?: number;
offsets?: readonly number[];
loop?: boolean;
delay?: number;
}
LineUnit
export type LineUnit = 'progress' | 'pixels';
LineEffect
export type LineEffect = {
type: 'flow';
id?: string;
unit?: LineUnit;
spacing?: number;
trailLength?: number;
fade?: 'linear' | 'none';
phase?: number;
} | {
type: 'dash';
id?: string;
unit?: LineUnit;
on: number;
gap: number;
} | {
type: 'reveal';
id?: string;
start?: number;
end?: number;
} | {
type: 'arrows';
id?: string;
unit?: LineUnit;
spacing?: number;
length?: number;
} | {
type: 'glow';
id?: string;
radius?: number;
intensity?: number;
} | {
type: 'pattern';
id?: string;
image: string;
unit?: LineUnit;
spacing?: number;
};
LineKeyframe
export interface LineKeyframe<T> {
offset: number;
value: T;
}
LineTracks
export interface LineTracks {
color?: readonly LineKeyframe<string>[];
opacity?: readonly LineKeyframe<number>[];
widthScale?: readonly LineKeyframe<number>[];
}
LineTiming
export interface LineTiming {
duration: number;
delay?: number;
loop?: boolean;
direction?: 'forward' | 'reverse' | 'alternate';
easing?: 'linear' | 'ease-in-out';
fill?: 'forwards' | 'none';
}
LinePlaybackOptions
export interface LinePlaybackOptions {
id: string;
layer: string | LayerIdentity;
timing: LineTiming;
effects: readonly LineEffect[];
tracks?: LineTracks;
stagger?: boolean;
cap?: 'butt' | 'round';
phaseField?: string;
speedField?: string;
}
Playback
export interface Playback<T extends PlaybackSnapshot = PlaybackSnapshot> extends PlaybackIdentity {
getState(): Promise<T>;
play(): Promise<void>;
pause(): Promise<void>;
stop(): Promise<void>;
seek(timeMs: number): Promise<void>;
finished(): Promise<T>;
}
PlaybacksAPI
export interface PlaybacksAPI {
get(id: string): Promise<Playback | undefined>;
list(): Promise<readonly PlaybackSnapshot[]>;
remove(playback: PlaybackIdentity): Promise<void>;
}
AnimationsAPI
export interface AnimationsAPI {
route(options: RoutePlaybackOptions, owner: {
owner: SceneIdentity;
}): Promise<Playback<RoutePlaybackSnapshot>>;
line(options: LinePlaybackOptions, owner: {
owner: SceneIdentity;
}): Promise<Playback<LinePlaybackSnapshot>>;
}
PlaybackChangeEvent
export interface PlaybackChangeEvent {
readonly type: 'sqs.playbackchange';
readonly reason: string;
readonly playback: PlaybackSnapshot;
}
GeoJSONLayerSpecification
export interface GeoJSONLayerSpecification {
id: string;
type: 'circle' | 'line' | 'fill' | 'fill-extrusion' | 'hillshade' | 'color-relief' | 'raster' | 'heatmap' | 'background' | 'symbol';
'source-layer'?: string;
source?: string | SourceOptions;
minzoom?: number;
maxzoom?: number;
paint?: Record<string, unknown>;
layout?: {
visibility?: 'visible' | 'none';
'icon-image'?: string | unknown[];
'icon-size'?: number | unknown[];
'icon-rotate'?: number | unknown[];
'icon-offset'?: [number, number] | unknown[];
'icon-anchor'?: 'center' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | unknown[];
'symbol-placement'?: 'point';
'icon-allow-overlap'?: boolean | unknown[];
'icon-ignore-placement'?: boolean | unknown[];
'icon-optional'?: boolean | unknown[];
'text-optional'?: boolean | unknown[];
'icon-padding'?: number | unknown[];
'symbol-sort-key'?: number | unknown[];
'symbol-z-order'?: 'auto' | 'source' | 'viewport-y';
'text-field'?: string | unknown[];
'text-size'?: number | unknown[];
'text-max-width'?: number | unknown[];
'text-line-height'?: number | unknown[];
'text-letter-spacing'?: number | unknown[];
'text-justify'?: 'auto' | 'left' | 'center' | 'right' | unknown[];
'text-transform'?: 'none' | 'uppercase' | 'lowercase' | unknown[];
'text-font'?: readonly string[];
'text-anchor'?: 'center' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | unknown[];
'text-offset'?: [number, number] | unknown[];
'text-rotate'?: number | unknown[];
'text-padding'?: number | unknown[];
'text-allow-overlap'?: boolean | unknown[];
'text-ignore-placement'?: boolean;
};
filter?: unknown[];
metadata?: Record<string, unknown>;
}
LayerIdentity
export interface LayerIdentity {
readonly id: string;
readonly layerInstanceId: string;
}
GeoJSONLayerInfo
export interface GeoJSONLayerInfo extends LayerIdentity {
readonly id: string;
readonly name: string;
readonly layerInstanceId: string;
readonly source: Readonly<SourceIdentity> | null;
readonly sourceRevision: string;
readonly cacheRevision: string;
readonly type: 'circle' | 'line' | 'fill' | 'fill-extrusion' | 'hillshade' | 'color-relief' | 'raster' | 'heatmap' | 'background' | 'symbol';
readonly specification: GeoJSONLayerSpecification;
readonly visible: boolean;
readonly featureCount: number;
readonly warningCount: number;
}
StyleLayersChangeEvent
export interface StyleLayersChangeEvent {
readonly layerCount: number;
readonly method: string;
readonly id: string;
}
QueryPixel
export type QueryPixel = [number, number] | {
x: number;
y: number;
};
QueryRenderedFeatureOptions
export interface QueryRenderedFeatureOptions {
layers?: string[];
filter?: unknown[];
validate?: true;
}
QueriedRenderedFeature
export interface QueriedRenderedFeature extends QueriedSourceFeature {
state: Record<string, unknown>;
layer: GeoJSONLayerSpecification;
sqs: {
sourceInstanceId: string;
dataRevision: string;
featureIndex: number;
layerInstanceId: string;
cacheRevision: string;
stateRevision: string;
};
}
MapImageData
export interface MapImageData {
width: number;
height: number;
data: Uint8Array | Uint8ClampedArray | readonly number[];
}
StyleImageInterface
export interface StyleImageInterface extends MapImageData {
onAdd?(map: import('./host.js').MapView, id: string): void;
render?(): boolean | undefined;
onRemove?(): void;
}
MapImageTextFit
export type MapImageTextFit = 'stretchOrShrink' | 'stretchOnly' | 'proportional';
MapImageStretchMetadata
export interface MapImageStretchMetadata {
readonly stretchX?: readonly (readonly [number, number])[];
readonly stretchY?: readonly (readonly [number, number])[];
readonly content?: readonly [number, number, number, number];
readonly textFitWidth?: MapImageTextFit;
readonly textFitHeight?: MapImageTextFit;
}
MapImageOptions
export interface MapImageOptions extends MapImageStretchMetadata {
pixelRatio?: number;
sdf?: boolean;
}
MapImageSnapshot
export interface MapImageSnapshot extends MapImageStretchMetadata {
readonly data: {
readonly width: number;
readonly height: number;
readonly data: Uint8Array;
};
readonly pixelRatio: number;
readonly sdf: boolean;
}
MapImageInfo
export interface MapImageInfo extends MapImageStretchMetadata {
readonly id: string;
readonly source: 'runtime' | 'sprite';
readonly imageInstanceId: string;
readonly revision: string;
readonly width: number;
readonly height: number;
readonly byteLength: number;
readonly pixelRatio: number;
readonly sdf: boolean;
}
ImagesChangeEvent
export interface ImagesChangeEvent {
readonly method: 'addImage' | 'updateImage' | 'removeImage';
readonly id: string;
readonly imageCount: number;
readonly runtimeByteLength: number;
}
captureImage
export declare function captureImage(image: MapImageData): {
width: number;
height: number;
data: number[];
};
captureImageOptions
export declare function captureImageOptions(options: MapImageOptions): MapImageOptions;
imageInfo
export declare function imageInfo(value: MapImageInfo | null): MapImageInfo | undefined;
imageSnapshot
export declare function imageSnapshot(value: MapImageSnapshot | null): MapImageSnapshot | undefined;
immutableImageEvent
export declare function immutableImageEvent(event: ImagesChangeEvent): ImagesChangeEvent;
MapStyleImageMissingEvent
export interface MapStyleImageMissingEvent {
readonly type: 'styleimagemissing';
readonly id: string;
readonly styleGeneration: string;
}
immutableMissingImageEvent
export declare function immutableMissingImageEvent(event: MapStyleImageMissingEvent): MapStyleImageMissingEvent;
MapImageLoadResult
export interface MapImageLoadResult {
readonly data: {
readonly width: number;
readonly height: number;
readonly data: Uint8Array;
};
}
MapImageLoadOptions
export interface MapImageLoadOptions {
signal?: AbortSignal;
}
imageLoadResult
export declare function imageLoadResult(value: {
data: {
width: number;
height: number;
data: ArrayLike<number>;
};
}): MapImageLoadResult;
imageLoadUrl
export declare function imageLoadUrl(value: unknown): string;
PointerEventType
export type PointerEventType = typeof POINTER_EVENT_TYPES[number];
MapLayerSelector
export type MapLayerSelector = string | readonly string[];
PointerInput
export interface PointerInput {
type: PointerEventType;
point: {
x: number;
y: number;
};
layers?: readonly string[];
pointerType?: 'mouse' | 'pen' | 'touch';
button?: number;
buttons?: number;
altKey?: boolean;
ctrlKey?: boolean;
metaKey?: boolean;
shiftKey?: boolean;
}
PointerSnapshot
export interface PointerSnapshot {
readonly type: PointerEventType;
readonly point: Readonly<{
x: number;
y: number;
}>;
readonly lngLat: Readonly<{
lng: number;
lat: number;
}> | null;
readonly features: readonly QueriedRenderedFeature[];
readonly cameraState: MapCameraState;
readonly input: Readonly<{
pointerType: 'mouse' | 'pen' | 'touch';
button: number;
buttons: number;
altKey: boolean;
ctrlKey: boolean;
metaKey: boolean;
shiftKey: boolean;
}>;
}
MapPointerEvent
export interface MapPointerEvent extends PointerSnapshot {
readonly target: import('./host.js').MapView;
readonly mapInstanceId: string;
readonly sequence: number;
}
MapEventSubscription
export type MapEventSubscription = (() => void) & {
readonly unsubscribe: () => void;
};
AttributionItem
export interface AttributionItem {
readonly scope: 'style' | 'common' | 'host';
readonly kind: 'style' | 'vector' | 'geojson' | 'raster' | 'terrain-rgb' | 'raster-dem';
readonly sourceId: string | null;
readonly sourceInstanceId: string | null;
readonly layerIds: readonly string[];
readonly text: string;
}
AttributionSnapshot
export interface AttributionSnapshot {
readonly text: string;
readonly items: readonly AttributionItem[];
}
AttributionChangeEvent
export interface AttributionChangeEvent {
readonly type: 'sqs.attributionschange';
readonly attributions: AttributionSnapshot;
}
AttributionErrorEvent
export interface AttributionErrorEvent {
readonly type: 'error';
readonly context: 'attributions';
readonly error: Readonly<{
code: string;
message: string;
}>;
readonly message: string;
}
AttributionEvent
export type AttributionEvent = AttributionChangeEvent | AttributionErrorEvent;
GestureName
export type GestureName = 'dragPan' | 'scrollZoom' | 'doubleClickZoom' | 'keyboard' | 'touchZoomRotate' | 'touchPitch';
GesturePolicy
export interface GesturePolicy {
readonly dragPan: boolean;
readonly scrollZoom: boolean;
readonly doubleClickZoom: boolean;
readonly keyboard: boolean;
readonly keyboardRotation: boolean;
readonly touchZoomRotate: boolean;
readonly touchPitch: boolean;
readonly touchRotation: boolean;
}
GestureHandler
export interface GestureHandler {
enable(): Promise<void>;
disable(): Promise<void>;
isEnabled(): Promise<boolean>;
isActive(): Promise<boolean>;
}
GestureChangeEvent
export interface GestureChangeEvent {
readonly type: 'sqs.gestureschange';
readonly gestures: GesturePolicy;
}
ModelPlacement
export interface ModelPlacement {
lngLat: readonly [number, number];
elevationM: number;
verticalReference: string;
headingDeg?: number;
scale?: number;
visible?: boolean;
}
ModelState
export interface ModelState {
readonly placement: Readonly<Required<ModelPlacement>>;
readonly bounds: readonly [number, number, number, number, number, number];
readonly meshCount: number;
readonly triangleCount: number;
readonly sourceBytes: number;
readonly rendered: boolean;
}
Rust entry point
In the same core checkout, run cargo doc -p sqs-map-camera -p sqs-map -p sqs-map-capi -p sqs-map-script --no-deps and open target/doc/sqs_map/index.html. Native rendering and JavaScript boundaries are documented in the native API and scripting guides. No unpublished online Rustdoc URL is advertised. Native Rust display density documents logical/physical pixels and the complete example.