SSukha 地图开发者文档

地图与覆盖物 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 {};