/** * BaseMapService - 地图服务抽象基类 * * @deprecated 请使用 `BaseMap` (lib/base-map.ts) 替代。 * 新的 BaseMap 类提供了更清晰的抽象接口设计。 * * 迁移指南: * 1. 将 `extends BaseMapService` 改为 `extends BaseMap` * 2. 实现 BaseMap 中的抽象方法 * 3. 使用 `handleCameraChanged` 替代直接的相机变化处理 * * @example * ```ts * // 旧写法 * export default class MyMapService extends BaseMapService { ... } * * // 新写法 * import BaseMap from '../lib/base-map'; * export default class MyMapService extends BaseMap { ... } * ``` */ import type { Bounds, ICoordinateSystemService, IGlobalConfigService, ILngLat, IMapCamera, IMapConfig, IMapService, IMercator, IPoint, IStatusOptions, IViewport, L7Container, MapStyleConfig, MapStyleName } from '@antv/l7-core'; import { type ISimpleMapCoord, type Map } from '@antv/l7-map'; export default abstract class BaseMapService implements IMapService { version: string; map: Map & T; simpleMapCoord: ISimpleMapCoord; bgColor: string; protected abstract viewport: IViewport | unknown; /** * Zoom 偏移量,用于对齐不同地图的显示层级 * 子类可以覆盖此值以指定特定的偏移量 * @default 0 */ protected zoomOffset: number; protected readonly config: Partial; protected readonly configService: IGlobalConfigService; protected readonly coordinateSystemService: ICoordinateSystemService; protected eventEmitter: any; protected evtCbProxyMap: globalThis.Map void, (...args: any[]) => void>>; /** * 在地图实例初始化之前缓存的事件处理器,init 完成后自动重放绑定 */ protected pendingHandlers: Array<{ type: string; handler: (...args: any[]) => void; }>; constructor(container: L7Container); protected markerContainer: HTMLElement; protected cameraChangedCallback: (viewport: IViewport) => void; protected $mapContainer: HTMLElement | null; setBgColor(color: string): void; addMarkerContainer(): void; getMarkerContainer(): HTMLElement; getOverlayContainer(): HTMLElement | undefined; getCanvasOverlays(): HTMLElement | null | undefined; on(type: string, handle: (...args: any[]) => void): void; off(type: string, handle: (...args: any[]) => void): void; getContainer(): HTMLElement | null; getMapCanvasContainer(): HTMLElement; getSize(): [number, number]; getType(): string; getZoom(): number; setZoom(zoom: number): Map & T; getCenter(): ILngLat; setCenter(lnglat: [number, number]): void; getPitch(): number; getRotation(): number; getBounds(): Bounds; getMinZoom(): number; getMaxZoom(): number; setRotation(rotation: number): void; zoomIn(option?: any, eventData?: any): void; zoomOut(option?: any, eventData?: any): void; setPitch(pitch: number): Map & T; panTo(p: [number, number]): void; panBy(x?: number, y?: number): void; fitBounds(bound: Bounds, fitBoundsOptions?: any): void; setMaxZoom(max: number): void; setMinZoom(min: number): void; setMapStatus(option: Partial): void; setZoomAndCenter(zoom: number, center: [number, number]): void; setMapStyle(style: any): void; meterToCoord(center: [number, number], outer: [number, number]): number; pixelToLngLat(pixel: [number, number]): ILngLat; lngLatToPixel(lnglat: [number, number]): IPoint; containerToLngLat(pixel: [number, number]): ILngLat; lngLatToContainer(lnglat: [number, number]): IPoint; abstract lngLatToMercator(lnglat: [number, number], altitude: number): IMercator; abstract getModelMatrix(lnglat: [number, number], altitude: number, rotate: [number, number, number], scale: [number, number, number], origin: IMercator): number[]; getMapStyle(): string; getMapStyleConfig(): MapStyleConfig; getMapStyleValue(name: MapStyleName): any; abstract init(): Promise; /** * 地图实例初始化完成后,重放缓存的事件绑定 * 子类在 init() 末尾应调用此方法 */ protected bindPendingEvents(): void; destroy(): void; emit(name: string, ...args: any[]): void; once(name: string, ...args: any[]): void; getMapContainer(): HTMLElement | null; exportMap(type: 'jpg' | 'png'): string; onCameraChanged(callback: (viewport: IViewport) => void): void; protected handleCameraChanged: (e?: any) => void; protected creatMapContainer(id: string | HTMLDivElement): HTMLDivElement; updateView(viewOption: Partial): void; protected updateCoordinateSystemService(): void; }