地图与覆盖物 API
JS 0.1.0-alpha.37 · 2026-10-09。来源为当前源码生成的 TypeScript 声明。优先使用 load() 返回的 Namespace;底层类的 Client 参数由绑定构造器注入,业务不需自行创建。private/protected 成员不属于公开接入。
map
import { ThemeMode, ResolvedTheme } from './theme';
import { MoveOptions, MovePath } from './move-animation';
import * as maplibregl from 'maplibre-gl';
import { Client, Evented, LngLat, LngLatLike, Pixel, Size, Bounds } from './core';
export interface MapStatus {
dragEnable?: boolean;
zoomEnable?: boolean;
rotateEnable?: boolean;
pitchEnable?: boolean;
doubleClickZoom?: boolean;
scrollWheel?: boolean;
}
export interface MapOptions extends MapStatus {
theme?: ThemeMode;
center?: LngLatLike;
zoom?: number;
rotation?: number;
pitch?: number;
resizeEnable?: boolean;
viewMode?: '2D' | '3D';
}
export declare class Map extends Evented {
clearInfoWindow(): this;
setTheme(mode: ThemeMode): this;
getTheme(): ThemeMode;
getResolvedTheme(): ResolvedTheme;
/** WGS84 location from the host's existing location/navigation stream. Null uses map centre. */
setThemeLocation(value: LngLatLike | null): this;
getStatus(): {
dragEnable: boolean;
zoomEnable: boolean;
rotateEnable: boolean;
pitchEnable: boolean;
doubleClickZoom: boolean;
scrollWheel: boolean;
};
setStatus(value: MapStatus): this;
readonly ready: Promise<void>;
constructor(container: string | HTMLElement, options: MapOptions, client: Client);
setCenter(value: LngLatLike): this;
getCenter(): LngLat;
getContainer(): HTMLElement;
getSize(): Size;
getBounds(): Bounds;
setBounds(bounds: Bounds, immediately?: boolean): this;
lngLatToContainer(value: LngLatLike): Pixel;
containerToLngLat(value: Pixel | [number, number]): LngLat;
panTo(value: LngLatLike): this;
panBy(x: number, y: number): this;
zoomIn(): this;
zoomOut(): this;
setZoom(value: number): this;
getZoom(): number;
setZoomAndCenter(zoom: number, center: LngLatLike): this;
setRotation(value: number): this;
getRotation(): number;
setPitch(value: number): this;
getPitch(): number;
add(overlays: Overlay | Overlay[]): this;
remove(overlays: Overlay | Overlay[]): this;
clearMap(): this;
getAllOverlays(type?: 'marker' | 'polyline' | 'polygon' | 'circle'): Overlay[];
setFitView(overlays?: Overlay[], immediately?: boolean, avoid?: [number, number, number, number], maxZoom?: number): void;
addControl(control: Control): this;
removeControl(control: Control): this;
resize(): void;
destroy(): void;
}
export declare abstract class Overlay extends Evented {
constructor(options?: {
visible?: boolean;
extData?: unknown;
});
setExtData(value: unknown): this;
getExtData(): unknown;
show(): this;
hide(): this;
getVisible(): boolean;
getMap(): Map | null;
setMap(map: Map | null): this;
abstract positions(): LngLat[];
remove(): void;
destroy(): void;
}
export type MarkerAnchor = 'center' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
export interface MarkerOptions {
position: LngLatLike;
map?: Map;
title?: string;
content?: string | HTMLElement;
draggable?: boolean;
visible?: boolean;
extData?: unknown;
icon?: string;
offset?: Pixel | [number, number];
anchor?: MarkerAnchor;
angle?: number;
zIndex?: number;
}
export declare class Marker extends Overlay {
moveTo(position: LngLatLike, options?: MoveOptions | number): this;
moveAlong(path: MovePath, options?: MoveOptions | number): this;
pauseMove(): this;
resumeMove(): this;
stopMove(): this;
setMap(map: Map | null): this;
constructor(options: MarkerOptions);
getPosition(): LngLat;
setPosition(p: LngLatLike): this;
setTitle(value: string): this;
getTitle(): string;
setDraggable(value: boolean): this;
getDraggable(): boolean;
setOffset(value: Pixel | [number, number]): this;
getOffset(): Pixel;
setAnchor(value: MarkerAnchor): this;
getAnchor(): MarkerAnchor;
setAngle(value: number): this;
getAngle(): number;
setzIndex(value: number): this;
getzIndex(): number;
setIcon(value: string): this;
getIcon(): string | undefined;
setContent(value: string | HTMLElement): this;
getContent(): string | HTMLElement | undefined;
positions(): LngLat[];
}
export interface PathOptions {
path: LngLatLike[];
map?: Map;
strokeColor?: string;
strokeWeight?: number;
strokeOpacity?: number;
fillColor?: string;
fillOpacity?: number;
visible?: boolean;
extData?: unknown;
}
export declare class Polyline extends Overlay {
constructor(options: PathOptions);
getPath(): LngLat[];
setPath(path: LngLatLike[]): this;
getLength(): number;
getBounds(): Bounds | null;
positions(): LngLat[];
setOptions(options: Partial<PathOptions>): this;
getOptions(): PathOptions;
}
export declare class Polygon extends Polyline {
getArea(): number;
contains(position: LngLatLike): boolean;
}
export interface CircleOptions extends Omit<PathOptions, 'path'> {
center: LngLatLike;
radius: number;
}
export declare class Circle extends Polygon {
constructor(options: CircleOptions);
getCenter(): LngLat;
getRadius(): number;
getArea(): number;
contains(position: LngLatLike): boolean;
setCenter(center: LngLatLike): this;
setRadius(radius: number): this;
}
export interface InfoWindowOptions {
content?: string | HTMLElement;
position?: LngLatLike;
offset?: Pixel | [number, number];
size?: Size | [number, number];
closeWhenClickMap?: boolean;
}
export declare class InfoWindow extends Evented {
constructor(options?: InfoWindowOptions);
/** Strings remain plain text for existing applications; pass an HTMLElement for rich content. */
setContent(content: string | HTMLElement): this;
getContent(): string | HTMLElement;
setPosition(position: LngLatLike): this;
getPosition(): LngLat | undefined;
setOffset(offset: Pixel | [number, number]): this;
getOffset(): Pixel;
setSize(size: Size | [number, number]): this;
getSize(): Size;
getIsOpen(): boolean;
open(map: Map, position?: LngLatLike): this;
close(): this;
destroy(): void;
}
export interface ControlOptions {
position?: 'LT' | 'RT' | 'LB' | 'RB';
offset?: Pixel | [number, number];
visible?: boolean;
}
export declare class Control extends Evented {
constructor(control: maplibregl.IControl, options?: ControlOptions);
getMap(): Map | null;
show(): this;
hide(): this;
setMap(map: Map | null): this;
destroy(): void;
}
export declare class Scale extends Control {
constructor(options?: ControlOptions);
}
export declare class ToolBar extends Control {
constructor(options?: ControlOptions);
}
move-animation
import { LngLat, LngLatLike } from './core';
export interface MoveOptions {
duration?: number;
speed?: number;
autoRotation?: boolean;
circlable?: boolean;
delay?: number;
}
export type MovePath = (LngLatLike | {
position: LngLatLike;
duration: number;
})[];
interface MovingMarker {
setPosition(p: LngLatLike): unknown;
setAngle(angle: number): unknown;
emit(type: string, event?: object): unknown;
getPosition(): LngLat;
}
/** Time-based movement; paused time never advances the route. */
export declare class MoveAnimation {
constructor(marker: MovingMarker);
moveTo(position: LngLatLike, options?: MoveOptions | number): this;
moveAlong(path: MovePath, options?: MoveOptions | number): this;
pause(): void;
resume(): void;
stop(): void;
}
export {};