diff --git a/src/views/MapView.vue b/src/views/MapView.vue index 20d29a5..fdcb681 100644 --- a/src/views/MapView.vue +++ b/src/views/MapView.vue @@ -1,64 +1,192 @@ + + + diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 365b24f..c8bd138 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -40,6 +40,12 @@ declare namespace AMap { destroy(): void on(event: string, handler: (...args: any[]) => void): void off(event: string, handler: (...args: any[]) => void): void + setStatus(status: Partial<{ doubleClickZoom: boolean; dragEnable: boolean; zoomEnable: boolean }>): void + getStatus(): { doubleClickZoom: boolean; dragEnable: boolean; zoomEnable: boolean } + setDefaultCursor(cursor: string): void + getDefaultCursor(): string + getCenter(): { lng: number; lat: number } + lngLatToContainer(lnglat: { lng: number; lat: number }): { x: number; y: number } } class Geocoder { @@ -97,6 +103,143 @@ declare namespace AMap { class MarkerClusterer { constructor(map: Map, markers: any[], opts?: Record) } + + // ── 覆盖物基类 ── + class Overlay { + setMap(map: Map | null): void + getMap(): Map | null + destroy(): void + show(): void + hide(): void + } + + // ── 点标记 ── + interface MarkerOptions { + position?: [number, number] + content?: string + icon?: string | Icon + offset?: Pixel + draggable?: boolean + zIndex?: number + [key: string]: any + } + + class Marker extends Overlay { + constructor(opts?: MarkerOptions) + setPosition(position: [number, number]): void + getPosition(): { lng: number; lat: number } + on(event: string, handler: (...args: any[]) => void): void + off(event: string, handler: (...args: any[]) => void): void + } + + // ── 像素偏移 ── + class Pixel { + constructor(x: number, y: number) + } + + // ── 图标 ── + interface IconOptions { + size?: [number, number] + image?: string + imageSize?: [number, number] + imageOffset?: [number, number] + } + class Icon { + constructor(opts?: IconOptions) + } + + // ── 多边形 ── + interface PolygonOptions { + path?: [number, number][] + fillColor?: string + fillOpacity?: number + strokeColor?: string + strokeWeight?: number + strokeOpacity?: number + strokeStyle?: 'solid' | 'dashed' + zIndex?: number + [key: string]: any + } + + class Polygon extends Overlay { + constructor(opts?: PolygonOptions) + setPath(path: [number, number][]): void + getPath(): [number, number][] + } + + // ── 折线(绘制围栏时连线预览)── + interface PolylineOptions { + path?: [number, number][] + strokeColor?: string + strokeWeight?: number + strokeOpacity?: number + strokeStyle?: 'solid' | 'dashed' + borderWeight?: number + zIndex?: number + [key: string]: any + } + + class Polyline extends Overlay { + constructor(opts?: PolylineOptions) + setPath(path: [number, number][]): void + getPath(): [number, number][] + } + + // ── 圆形 ── + interface CircleOptions { + center?: [number, number] + radius?: number + fillColor?: string + fillOpacity?: number + strokeColor?: string + strokeWeight?: number + strokeOpacity?: number + zIndex?: number + [key: string]: any + } + + class Circle extends Overlay { + constructor(opts?: CircleOptions) + setCenter(center: [number, number]): void + getCenter(): { lng: number; lat: number } + setRadius(radius: number): void + getRadius(): number + contains(point: [number, number]): boolean + } + + // ── 几何计算工具 ── + namespace GeometryUtil { + function isPointInRing(point: { lng: number; lat: number }, path: [number, number][]): boolean + function distance(p1: [number, number], p2: [number, number]): number + } + + // ── 鼠标绘制工具 ── + interface MouseToolOptions { + [key: string]: any + } + class MouseTool { + constructor(map: Map, opts?: MouseToolOptions) + polygon(opts?: Record): void + circle(opts?: Record): void + rectangle(opts?: Record): void + close(): void + on(event: string, handler: (...args: any[]) => void): void + off(event: string, handler: (...args: any[]) => void): void + } + + // ── 信息窗体 ── + interface InfoWindowOptions { + content?: string + position?: [number, number] + offset?: Pixel + [key: string]: any + } + class InfoWindow extends Overlay { + constructor(opts?: InfoWindowOptions) + open(map: Map, position?: [number, number]): void + close(): void + setContent(content: string): void + } } declare module '*.vue' {