From 09256b2808449e11c27feda5639a412c2d825c49 Mon Sep 17 00:00:00 2001 From: cirry <812852553@qq.com> Date: Sun, 21 Jun 2026 22:56:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AB=98=E5=BE=B7=E5=9C=B0=E5=9B=BE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=94=B5=E5=AD=90=E5=9B=B4=E6=A0=8F=E5=92=8C=E8=80=81?= =?UTF-8?q?=E4=BA=BA=E5=87=BA=E6=9D=A5=E7=94=B5=E5=AD=90=E5=9B=B4=E6=A0=8F?= =?UTF-8?q?=E4=B9=8B=E5=90=8E=E7=9A=84=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/MapView.vue | 773 ++++++++++++++++++++++++++++++------------ src/vite-env.d.ts | 143 ++++++++ 2 files changed, 708 insertions(+), 208 deletions(-) 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' {