@yituengine/keymap 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +148 -0
- package/dist/engine.js +1 -0
- package/dist/types/core/Assets.d.ts +11 -0
- package/dist/types/core/Classification.d.ts +17 -0
- package/dist/types/core/Flatten.d.ts +74 -0
- package/dist/types/core/Status.d.ts +3 -0
- package/dist/types/core/pathAnim.d.ts +27 -0
- package/dist/types/core/transformFun.d.ts +16 -0
- package/dist/types/draw/baseDraw.d.ts +74 -0
- package/dist/types/draw/drawCircle.d.ts +44 -0
- package/dist/types/draw/drawPoint.d.ts +30 -0
- package/dist/types/draw/drawPolygon.d.ts +35 -0
- package/dist/types/draw/drawPolyline.d.ts +35 -0
- package/dist/types/draw/index.d.ts +17 -0
- package/dist/types/effect/cloud.d.ts +34 -0
- package/dist/types/effect/fog.d.ts +44 -0
- package/dist/types/effect/fogPro.d.ts +46 -0
- package/dist/types/effect/index.d.ts +32 -0
- package/dist/types/effect/lensflare.d.ts +38 -0
- package/dist/types/effect/rainy.d.ts +47 -0
- package/dist/types/effect/snowCover.d.ts +50 -0
- package/dist/types/effect/snowFall.d.ts +38 -0
- package/dist/types/event/index.d.ts +12 -0
- package/dist/types/event/menu.d.ts +110 -0
- package/dist/types/event/mousePick.d.ts +57 -0
- package/dist/types/graphic/baseGraphic.d.ts +131 -0
- package/dist/types/graphic/billboardGraphic.d.ts +75 -0
- package/dist/types/graphic/circleGraphic.d.ts +103 -0
- package/dist/types/graphic/customPopupGraphic.d.ts +75 -0
- package/dist/types/graphic/index.d.ts +32 -0
- package/dist/types/graphic/modelGraphic.d.ts +90 -0
- package/dist/types/graphic/polygonGraphic.d.ts +124 -0
- package/dist/types/graphic/polylineGraphic.d.ts +100 -0
- package/dist/types/graphic/popupGraphic.d.ts +85 -0
- package/dist/types/layer/graphicLayer.d.ts +96 -0
- package/dist/types/layer/heatmapLayer/heatmapRenderer.d.ts +39 -0
- package/dist/types/layer/heatmapLayer.d.ts +113 -0
- package/dist/types/layer/index.d.ts +14 -0
- package/dist/types/layer/tilesetLayer.d.ts +107 -0
- package/dist/types/main.d.ts +68 -0
- package/dist/types/map/defaultInteractions.d.ts +26 -0
- package/dist/types/map/index.d.ts +254 -0
- package/dist/types/material/LightingFlow.d.ts +63 -0
- package/dist/types/material/PolylineDashed.d.ts +68 -0
- package/dist/types/material/TextureFlow.d.ts +94 -0
- package/dist/types/material/Wave.d.ts +75 -0
- package/dist/types/material/index.d.ts +20 -0
- package/dist/types/measure/baseMeasure.d.ts +93 -0
- package/dist/types/measure/index.d.ts +18 -0
- package/dist/types/measure/measureArea.d.ts +46 -0
- package/dist/types/measure/measureCutFill.d.ts +69 -0
- package/dist/types/measure/measureDistance.d.ts +50 -0
- package/dist/types/measure/measureHeight.d.ts +47 -0
- package/dist/types/primitive/ClassificationPrimitive.d.ts +72 -0
- package/dist/types/primitive/Tube.d.ts +38 -0
- package/dist/types/primitive/Wall.d.ts +47 -0
- package/dist/types/primitive/basePrimitive.d.ts +42 -0
- package/dist/types/primitive/index.d.ts +16 -0
- package/dist/types/types/general.d.ts +94 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/types/public.d.ts +11 -0
- package/dist/types/utils/CoordTransform.d.ts +26 -0
- package/dist/types/utils/controlPoint.d.ts +10 -0
- package/dist/types/utils/cutFillAnalysis.d.ts +38 -0
- package/dist/types/utils/graphic.d.ts +45 -0
- package/dist/types/utils/midPoint.d.ts +11 -0
- package/dist/types/utils/rightMenu.d.ts +1 -0
- package/dist/types/utils/tools.d.ts +38 -0
- package/docs/guide/draw-measure.md +97 -0
- package/docs/guide/graphic.md +136 -0
- package/docs/guide/index.md +29 -0
- package/docs/guide/menu.md +101 -0
- package/docs/guide/quick-start.md +74 -0
- package/package.json +58 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type KeyMap from '../map';
|
|
2
|
+
import * as Cesium from 'cesium';
|
|
3
|
+
/** 积雪覆盖效果配置项。 */
|
|
4
|
+
export interface SnowCoverEffectOptions {
|
|
5
|
+
/** 积雪颜色,支持 CSS 颜色字符串。 */
|
|
6
|
+
color?: string;
|
|
7
|
+
/** 积雪覆盖强度,后处理阶段会将大于 `1.0` 的值限制为 `1.0`。 */
|
|
8
|
+
intensity?: number;
|
|
9
|
+
/** 是否启用积雪强度渐入动画。 */
|
|
10
|
+
isAnim?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 积雪覆盖屏幕后处理效果。
|
|
14
|
+
*
|
|
15
|
+
* 根据场景深度和法线方向混合积雪颜色,可选择以定时器渐入方式提升覆盖强度。
|
|
16
|
+
*/
|
|
17
|
+
declare class SnowCoverEffect {
|
|
18
|
+
/** 积雪颜色。 */
|
|
19
|
+
snowColor: Cesium.Color;
|
|
20
|
+
/** 积雪覆盖强度。 */
|
|
21
|
+
intensity: number;
|
|
22
|
+
/** 是否启用积雪强度渐入动画。 */
|
|
23
|
+
isAnim: boolean;
|
|
24
|
+
private map;
|
|
25
|
+
private snowCoverStage;
|
|
26
|
+
private timer;
|
|
27
|
+
/**
|
|
28
|
+
* 创建积雪覆盖效果。
|
|
29
|
+
*
|
|
30
|
+
* @param options - 积雪覆盖效果配置项。
|
|
31
|
+
*/
|
|
32
|
+
constructor(options?: SnowCoverEffectOptions);
|
|
33
|
+
/**
|
|
34
|
+
* 将积雪覆盖后处理阶段添加到地图场景中。
|
|
35
|
+
*
|
|
36
|
+
* @param map - 地图实例。
|
|
37
|
+
*/
|
|
38
|
+
add(map: KeyMap): void;
|
|
39
|
+
/** 从地图场景中移除并销毁积雪覆盖后处理阶段。 */
|
|
40
|
+
destroy(): void;
|
|
41
|
+
/** 按当前目标强度启动积雪覆盖渐入动画。 */
|
|
42
|
+
snowCoverAnim(): void;
|
|
43
|
+
/**
|
|
44
|
+
* 返回积雪覆盖效果使用的 GLSL 片元着色器源码。
|
|
45
|
+
*
|
|
46
|
+
* @returns Cesium 后处理阶段使用的 shader 字符串。
|
|
47
|
+
*/
|
|
48
|
+
snowCover(): string;
|
|
49
|
+
}
|
|
50
|
+
export default SnowCoverEffect;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type KeyMap from '../map';
|
|
2
|
+
/** 降雪效果配置项。 */
|
|
3
|
+
export interface SnowFallEffectOptions {
|
|
4
|
+
/** 雪花下落动画速度,默认 `1.0`。 */
|
|
5
|
+
speed?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 降雪屏幕后处理效果。
|
|
9
|
+
*
|
|
10
|
+
* 通过 Cesium `PostProcessStage` 在画面上叠加动态雪花下落效果。
|
|
11
|
+
*/
|
|
12
|
+
declare class SnowFallEffect {
|
|
13
|
+
/** 雪花下落动画速度。 */
|
|
14
|
+
speed: number;
|
|
15
|
+
private map;
|
|
16
|
+
private snowFallStage;
|
|
17
|
+
/**
|
|
18
|
+
* 创建降雪效果。
|
|
19
|
+
*
|
|
20
|
+
* @param options - 降雪效果配置项。
|
|
21
|
+
*/
|
|
22
|
+
constructor(options?: SnowFallEffectOptions);
|
|
23
|
+
/**
|
|
24
|
+
* 将降雪后处理阶段添加到地图场景中。
|
|
25
|
+
*
|
|
26
|
+
* @param map - 地图实例。
|
|
27
|
+
*/
|
|
28
|
+
add(map: KeyMap): void;
|
|
29
|
+
/** 从地图场景中移除并销毁降雪后处理阶段。 */
|
|
30
|
+
destroy(): void;
|
|
31
|
+
/**
|
|
32
|
+
* 返回降雪效果使用的 GLSL 片元着色器源码。
|
|
33
|
+
*
|
|
34
|
+
* @returns Cesium 后处理阶段使用的 shader 字符串。
|
|
35
|
+
*/
|
|
36
|
+
snowFall(): string;
|
|
37
|
+
}
|
|
38
|
+
export default SnowFallEffect;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import MousePick from './mousePick';
|
|
2
|
+
import Menu from './menu';
|
|
3
|
+
export { default as MousePick } from './mousePick';
|
|
4
|
+
export { default as Menu } from './menu';
|
|
5
|
+
export type { MenuContext, MenuItem, MenuPositionedEvent } from './menu';
|
|
6
|
+
/** SDK 内置地图事件交互实例类型。 */
|
|
7
|
+
export type EventType = MousePick | Menu;
|
|
8
|
+
declare const _default: {
|
|
9
|
+
MousePick: typeof MousePick;
|
|
10
|
+
Menu: typeof Menu;
|
|
11
|
+
};
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type KeyMap from '../map';
|
|
2
|
+
import type { Asset, WGS84Pos } from '../types';
|
|
3
|
+
import * as Cesium from 'cesium';
|
|
4
|
+
type MenuOptions = {
|
|
5
|
+
menuId?: string;
|
|
6
|
+
};
|
|
7
|
+
/** 右键菜单使用的 Cesium 屏幕定位事件。 */
|
|
8
|
+
export type MenuPositionedEvent = Cesium.ScreenSpaceEventHandler.PositionedEvent & {
|
|
9
|
+
/** 可选的事件传播阻止方法,存在时会在菜单打开前调用。 */
|
|
10
|
+
readonly stopPropagation?: () => void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 右键菜单回调上下文。
|
|
14
|
+
*
|
|
15
|
+
* 菜单项的动态文本、显示条件、禁用条件和点击回调都会收到该上下文。
|
|
16
|
+
*/
|
|
17
|
+
export type MenuContext = {
|
|
18
|
+
/** 触发菜单的原始屏幕事件。 */
|
|
19
|
+
readonly event: MenuPositionedEvent;
|
|
20
|
+
/** 右键拾取位置对应的 WGS84 坐标;未拾取到地表时为 `null`。 */
|
|
21
|
+
readonly coordinate: WGS84Pos | null;
|
|
22
|
+
/** 右键拾取到的 Cesium 世界坐标;未拾取到地表时为 `null`。 */
|
|
23
|
+
readonly cartesian: Cesium.Cartesian3 | null;
|
|
24
|
+
/** 当前菜单绑定的地图实例。 */
|
|
25
|
+
readonly map: KeyMap;
|
|
26
|
+
/** 菜单使用的 DOM 元素。 */
|
|
27
|
+
readonly menu: HTMLElement;
|
|
28
|
+
/** 根据拾取对象解析出的 SDK 资源对象。 */
|
|
29
|
+
readonly specObj: Asset | null | undefined;
|
|
30
|
+
/** Cesium 原始拾取结果。 */
|
|
31
|
+
readonly pickedObj: unknown;
|
|
32
|
+
};
|
|
33
|
+
/** 右键菜单项配置。 */
|
|
34
|
+
export type MenuItem = {
|
|
35
|
+
/** 菜单项唯一标识;重复添加同名项会替换已有项。 */
|
|
36
|
+
readonly id: string;
|
|
37
|
+
/** 菜单项文本,支持根据当前上下文动态生成。 */
|
|
38
|
+
readonly label: string | ((context: MenuContext) => string);
|
|
39
|
+
/** 菜单项排序值,默认按 `0` 处理。 */
|
|
40
|
+
readonly order?: number;
|
|
41
|
+
/** 菜单项是否显示,支持根据当前上下文动态判断。 */
|
|
42
|
+
readonly show?: boolean | ((context: MenuContext) => boolean);
|
|
43
|
+
/** 菜单项是否禁用,支持根据当前上下文动态判断。 */
|
|
44
|
+
readonly disabled?: boolean | ((context: MenuContext) => boolean);
|
|
45
|
+
/** 菜单项点击回调。 */
|
|
46
|
+
readonly onClick: (context: MenuContext) => void;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* 地图右键上下文菜单。
|
|
50
|
+
*
|
|
51
|
+
* 绑定到 {@link KeyMap} 后监听画布右键事件,按当前拾取位置和拾取对象渲染菜单项,并在有效地表位置显示临时锚点图标。
|
|
52
|
+
*/
|
|
53
|
+
export default class Menu {
|
|
54
|
+
private layer;
|
|
55
|
+
/** 菜单使用的 Cesium 屏幕事件处理器。 */
|
|
56
|
+
handler: Cesium.ScreenSpaceEventHandler | null;
|
|
57
|
+
private items;
|
|
58
|
+
private currentContext;
|
|
59
|
+
private ownsMenu;
|
|
60
|
+
/** 菜单 DOM 元素;可以来自外部 `menuId`,也可以由 SDK 创建。 */
|
|
61
|
+
menu: HTMLElement | null;
|
|
62
|
+
/** 最近一次右键拾取位置对应的 WGS84 坐标。 */
|
|
63
|
+
coordinate: WGS84Pos | null;
|
|
64
|
+
private anchorLayer;
|
|
65
|
+
private anchorGraphic;
|
|
66
|
+
private readonly handleCanvasPointerDown;
|
|
67
|
+
/**
|
|
68
|
+
* 创建右键菜单实例。
|
|
69
|
+
*
|
|
70
|
+
* @param opt - 菜单配置项;传入 `menuId` 时会复用已有 DOM 元素。
|
|
71
|
+
*/
|
|
72
|
+
constructor(opt?: MenuOptions);
|
|
73
|
+
/**
|
|
74
|
+
* 将菜单绑定到地图实例并注册右键、左键、滚轮和中键事件。
|
|
75
|
+
*
|
|
76
|
+
* @param layer - 地图实例。
|
|
77
|
+
*/
|
|
78
|
+
register(layer: KeyMap): void;
|
|
79
|
+
/** 隐藏菜单,并清理当前上下文、坐标和菜单锚点图标。 */
|
|
80
|
+
hide(): void;
|
|
81
|
+
/**
|
|
82
|
+
* 添加或替换菜单项。
|
|
83
|
+
*
|
|
84
|
+
* 支持传入单个菜单项或菜单项数组;当 `id` 已存在时会替换旧项。若菜单当前已打开,会立即重新渲染。
|
|
85
|
+
*
|
|
86
|
+
* @param item - 要添加的菜单项或菜单项数组。
|
|
87
|
+
*/
|
|
88
|
+
addItem(item: MenuItem | readonly MenuItem[]): void;
|
|
89
|
+
private setItem;
|
|
90
|
+
/**
|
|
91
|
+
* 按菜单项 id 移除菜单项。
|
|
92
|
+
*
|
|
93
|
+
* 支持传入单个 id 或 id 数组。若菜单当前已打开,会立即重新渲染。
|
|
94
|
+
*
|
|
95
|
+
* @param id - 要移除的菜单项 id 或 id 数组。
|
|
96
|
+
*/
|
|
97
|
+
removeItem(id: string | readonly string[]): void;
|
|
98
|
+
/** 清空所有菜单项并隐藏菜单。 */
|
|
99
|
+
clearItems(): void;
|
|
100
|
+
private ensureMenuElement;
|
|
101
|
+
private renderItems;
|
|
102
|
+
private resolveMenuFlag;
|
|
103
|
+
private getPickedId;
|
|
104
|
+
private showMenuAt;
|
|
105
|
+
private showAnchor;
|
|
106
|
+
private destroyAnchorLayer;
|
|
107
|
+
/** 销毁菜单,移除事件监听、清空菜单项和状态,并移除 SDK 创建的菜单元素与锚点图层。 */
|
|
108
|
+
destroy(): void;
|
|
109
|
+
}
|
|
110
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Asset, MousePickHandler } from '../types';
|
|
2
|
+
import type KeyMap from '../map';
|
|
3
|
+
import * as Cesium from 'cesium';
|
|
4
|
+
/**
|
|
5
|
+
* 地图左键拾取事件管理器。
|
|
6
|
+
*
|
|
7
|
+
* 注册到 {@link KeyMap} 后监听画布左键事件,记录原始 Cesium 拾取结果、WGS84 坐标和对应 SDK 资源,并依次触发自定义拾取回调。
|
|
8
|
+
*/
|
|
9
|
+
export default class MousePick {
|
|
10
|
+
private map;
|
|
11
|
+
/** 当前拾取事件使用的 Cesium 屏幕事件处理器。 */
|
|
12
|
+
handler: Cesium.ScreenSpaceEventHandler | null;
|
|
13
|
+
/** 已注册的自定义拾取回调列表。 */
|
|
14
|
+
funCache: MousePickHandler[];
|
|
15
|
+
/** 最近一次拾取到的 WGS84 坐标;未拾取到位置时为 `null`。 */
|
|
16
|
+
coordinate: {
|
|
17
|
+
lng: number;
|
|
18
|
+
lat: number;
|
|
19
|
+
alt: number;
|
|
20
|
+
} | null;
|
|
21
|
+
/** 最近一次 Cesium 原始拾取结果。 */
|
|
22
|
+
pickedObj: any;
|
|
23
|
+
/** 最近一次拾取结果解析到的 SDK 资源。 */
|
|
24
|
+
pickedAsset: Asset | null;
|
|
25
|
+
/** 上一次拾取结果解析到的 SDK 资源。 */
|
|
26
|
+
lastPickedAsset: Asset | null;
|
|
27
|
+
/**
|
|
28
|
+
* 将拾取管理器绑定到地图实例。
|
|
29
|
+
*
|
|
30
|
+
* 绑定后会注册左键事件,并在每次点击时更新拾取状态、解析 SDK 资源并触发回调。
|
|
31
|
+
*
|
|
32
|
+
* @param map - 地图实例。
|
|
33
|
+
*/
|
|
34
|
+
register(map: KeyMap): void;
|
|
35
|
+
/** 销毁拾取管理器,移除事件处理器并清空拾取状态和回调列表。 */
|
|
36
|
+
destroy(): void;
|
|
37
|
+
/**
|
|
38
|
+
* 从当前 Cesium 拾取结果中解析 SDK 资源 id。
|
|
39
|
+
*
|
|
40
|
+
* @returns 当前拾取对象对应的资源 id;无法解析时返回 `undefined`。
|
|
41
|
+
*/
|
|
42
|
+
getPickedId(): any;
|
|
43
|
+
/**
|
|
44
|
+
* 添加自定义左键拾取回调。
|
|
45
|
+
*
|
|
46
|
+
* @param fn - 拾取回调函数。
|
|
47
|
+
*/
|
|
48
|
+
addfun(fn: MousePickHandler): void;
|
|
49
|
+
/**
|
|
50
|
+
* 移除一个已注册的拾取回调。
|
|
51
|
+
*
|
|
52
|
+
* @param fn - 要移除的拾取回调函数。
|
|
53
|
+
*/
|
|
54
|
+
removefun(fn: MousePickHandler): void;
|
|
55
|
+
/** 清空所有自定义拾取回调。 */
|
|
56
|
+
clearfun(): void;
|
|
57
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import * as Cesium from 'cesium';
|
|
2
|
+
import { GraphicLayer } from '../layer';
|
|
3
|
+
import { PopupGraphicOptions } from './popupGraphic';
|
|
4
|
+
import { CustomPopupGraphicOptions } from './customPopupGraphic';
|
|
5
|
+
import { GraphicType } from '.';
|
|
6
|
+
/**
|
|
7
|
+
* 图形资产的公共契约。
|
|
8
|
+
*
|
|
9
|
+
* 所有可添加到 `GraphicLayer` 的图形都应具备基础身份信息、Cesium 实体引用和生命周期方法。
|
|
10
|
+
*/
|
|
11
|
+
export interface Graphic {
|
|
12
|
+
/** 图形资产唯一 id,用于 `KeyMap.Assets` 查询、删除和图层登记。 */
|
|
13
|
+
id: string;
|
|
14
|
+
/** 图形资产名称,未传入时通常由类名和 id 自动生成。 */
|
|
15
|
+
name: string;
|
|
16
|
+
/** 图形类型标识,通常等于具体图形类名。 */
|
|
17
|
+
readonly type: string;
|
|
18
|
+
/** 图形锚点位置,常用于弹窗、标签、飞行定位或屏幕投影。 */
|
|
19
|
+
position: Cesium.Cartesian3 | null;
|
|
20
|
+
/** 图形所属业务图层,添加到图层前为 `null`。 */
|
|
21
|
+
layer: GraphicLayer | null;
|
|
22
|
+
/** 图形对应的 Cesium Entity,添加到地图前为 `null`。 */
|
|
23
|
+
entity: Cesium.Entity | null;
|
|
24
|
+
/** 将图形添加到指定图层。 */
|
|
25
|
+
add(layer: GraphicLayer): void;
|
|
26
|
+
/** 销毁图形并从图层、资产索引和 Cesium 数据源中移除。 */
|
|
27
|
+
destroy(): void;
|
|
28
|
+
/** 显示图形。 */
|
|
29
|
+
show(): void;
|
|
30
|
+
/** 隐藏图形。 */
|
|
31
|
+
hide(): void;
|
|
32
|
+
/** 将相机定位到图形对应的 Cesium Entity。 */
|
|
33
|
+
zoomTo(): void;
|
|
34
|
+
/** 将相机飞行到图形的锚点位置。 */
|
|
35
|
+
flyTo(): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 图形构造参数的公共基础字段。
|
|
39
|
+
*
|
|
40
|
+
* 具体图形会在此基础上追加 Cesium Graphic 构造参数和业务扩展参数。
|
|
41
|
+
*/
|
|
42
|
+
export interface BaseGraphicOptions {
|
|
43
|
+
/** 自定义资产 id;不传时自动生成。 */
|
|
44
|
+
id?: string;
|
|
45
|
+
/** 自定义资产名称;不传时自动使用 `类型_id`。 */
|
|
46
|
+
name?: string;
|
|
47
|
+
/** 图形锚点位置。 */
|
|
48
|
+
position?: Cesium.Cartesian3;
|
|
49
|
+
/** 内置弹窗配置,点击图形时可由默认交互打开。 */
|
|
50
|
+
popup?: PopupGraphicOptions;
|
|
51
|
+
/** 自定义 DOM 弹窗配置,点击图形时可由默认交互打开。 */
|
|
52
|
+
customPopup?: CustomPopupGraphicOptions;
|
|
53
|
+
/** Cesium Label 配置,会随图形一起挂到 Entity 上。 */
|
|
54
|
+
label?: Cesium.LabelGraphics.ConstructorOptions;
|
|
55
|
+
/** 图形被默认点击交互命中时触发的业务回调。 */
|
|
56
|
+
onClick?: () => void;
|
|
57
|
+
/** 开启后仅描边参与点击与悬停拾取,面填充不响应(适用于区域类图形的边框交互)。 */
|
|
58
|
+
pickOutlineOnly?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Entity 图形基类。
|
|
62
|
+
*
|
|
63
|
+
* `BaseGraphic` 负责统一 id/name/type、锚点位置、弹窗、标签、显示隐藏和定位能力。
|
|
64
|
+
* 具体图形类负责实现 `add()` 与 `destroy()`,并把对应的 Cesium Graphic 挂到 Entity 上。
|
|
65
|
+
*/
|
|
66
|
+
export default abstract class BaseGraphic implements Graphic {
|
|
67
|
+
/** 图形资产唯一 id。 */
|
|
68
|
+
id: string;
|
|
69
|
+
/** 图形资产名称。 */
|
|
70
|
+
name: string;
|
|
71
|
+
/** 图形类型标识,默认由具体子类名生成。 */
|
|
72
|
+
readonly type: string;
|
|
73
|
+
/** 图形锚点位置。 */
|
|
74
|
+
position: Cesium.Cartesian3 | null;
|
|
75
|
+
/** 图形所属图层。 */
|
|
76
|
+
layer: GraphicLayer | null;
|
|
77
|
+
/** 图形对应的 Cesium Entity。 */
|
|
78
|
+
entity: (Cesium.Entity & {
|
|
79
|
+
parentAsset?: GraphicType;
|
|
80
|
+
}) | null;
|
|
81
|
+
/** 内置弹窗配置。 */
|
|
82
|
+
popup: PopupGraphicOptions | null;
|
|
83
|
+
/** 自定义 DOM 弹窗配置。 */
|
|
84
|
+
customPopup: CustomPopupGraphicOptions | null;
|
|
85
|
+
/** 图形标签配置生成的 Cesium LabelGraphics。 */
|
|
86
|
+
label: Cesium.LabelGraphics | null;
|
|
87
|
+
/** 图形点击回调。 */
|
|
88
|
+
onClick: (() => void) | undefined;
|
|
89
|
+
/** 是否仅描边参与点击与悬停拾取。 */
|
|
90
|
+
pickOutlineOnly: boolean;
|
|
91
|
+
/** 主图形的视距显示条件,供标签和 SDK 自建附属实体复用。 */
|
|
92
|
+
protected distanceDisplayCondition: Cesium.Property | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* 创建图形基础实例。
|
|
95
|
+
*
|
|
96
|
+
* 构造时会初始化 id、name、position、popup、label 和 onClick,Cesium Entity 会在 `add()` 时创建或获取。
|
|
97
|
+
*
|
|
98
|
+
* @param opt 图形公共基础参数。
|
|
99
|
+
*/
|
|
100
|
+
constructor(opt: BaseGraphicOptions);
|
|
101
|
+
/** 同步主图形视距显示条件到标签,并缓存给子类创建附属实体时复用。 */
|
|
102
|
+
protected syncDistanceDisplayCondition(distanceDisplayCondition: Cesium.Property | undefined): void;
|
|
103
|
+
/** 获取主图形视距显示条件,供子类创建 outline、hover outline 等附属实体。 */
|
|
104
|
+
protected getDistanceDisplayCondition(): Cesium.Property | undefined;
|
|
105
|
+
/** 将图形添加到指定图层。 */
|
|
106
|
+
abstract add(layer: GraphicLayer): void;
|
|
107
|
+
/** 销毁图形并释放相关资源。 */
|
|
108
|
+
abstract destroy(): void;
|
|
109
|
+
/**
|
|
110
|
+
* 将相机定位到当前图形 Entity。
|
|
111
|
+
*
|
|
112
|
+
* 默认使用俯视角和固定距离;具体子类可以覆盖该行为。
|
|
113
|
+
*/
|
|
114
|
+
zoomTo(): void;
|
|
115
|
+
/**
|
|
116
|
+
* 将相机飞行到图形锚点位置。
|
|
117
|
+
*
|
|
118
|
+
* 依赖 `position`,若图形没有设置锚点位置则不会执行飞行。
|
|
119
|
+
*/
|
|
120
|
+
flyTo(): void;
|
|
121
|
+
/** 显示当前图形 Entity。 */
|
|
122
|
+
show(): void;
|
|
123
|
+
/** 隐藏当前图形 Entity。 */
|
|
124
|
+
hide(): void;
|
|
125
|
+
/**
|
|
126
|
+
* 销毁当前图形关联的内置弹窗或自定义弹窗。
|
|
127
|
+
*
|
|
128
|
+
* 子类 `destroy()` 通常会先调用该方法,再移除自身 Entity。
|
|
129
|
+
*/
|
|
130
|
+
destroyPopup(): void;
|
|
131
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import BaseGraphic, { BaseGraphicOptions } from './baseGraphic';
|
|
2
|
+
import { GraphicLayer } from '../layer';
|
|
3
|
+
import * as Cesium from 'cesium';
|
|
4
|
+
/**
|
|
5
|
+
* Billboard 图形构造参数。
|
|
6
|
+
*
|
|
7
|
+
* 继承 Cesium `BillboardGraphics` 参数,并追加易图引擎的图形基础字段。
|
|
8
|
+
*/
|
|
9
|
+
export interface BillboardGraphicOptions extends Cesium.BillboardGraphics.ConstructorOptions, BaseGraphicOptions {
|
|
10
|
+
/** 拖拽编辑结束后触发,参数为更新后的点位。 */
|
|
11
|
+
onChanged?: (position: Cesium.Cartesian3) => void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 点位 Billboard 图形。
|
|
15
|
+
*
|
|
16
|
+
* 用于在地图上显示图片标记。添加到 `GraphicLayer` 后会创建 Cesium Entity,支持显示隐藏、定位、
|
|
17
|
+
* 点击回调、弹窗和单控制点拖拽编辑。
|
|
18
|
+
*/
|
|
19
|
+
declare class BillboardGraphic extends BaseGraphic {
|
|
20
|
+
/** 图形类型标识。 */
|
|
21
|
+
readonly type: 'BillboardGraphic';
|
|
22
|
+
/** Cesium BillboardGraphics 实例。 */
|
|
23
|
+
graphic: Cesium.BillboardGraphics;
|
|
24
|
+
/** 拖拽编辑结束后的业务回调。 */
|
|
25
|
+
onChanged: ((position: Cesium.Cartesian3) => void) | undefined;
|
|
26
|
+
private changedDuringDrag;
|
|
27
|
+
private controlPoints;
|
|
28
|
+
/**
|
|
29
|
+
* 创建 Billboard 图形。
|
|
30
|
+
*
|
|
31
|
+
* @param opt Billboard 图形配置。
|
|
32
|
+
*/
|
|
33
|
+
constructor(opt: BillboardGraphicOptions);
|
|
34
|
+
/**
|
|
35
|
+
* 将 Billboard 添加到图层。
|
|
36
|
+
*
|
|
37
|
+
* `position` 是必填项,添加后 Entity 会登记到图层和全局资产管理器。
|
|
38
|
+
*
|
|
39
|
+
* @param layer 目标图层。
|
|
40
|
+
*/
|
|
41
|
+
add(layer: GraphicLayer): void;
|
|
42
|
+
/** 进入编辑模式,显示唯一的点位控制点。 */
|
|
43
|
+
showHandler(): void;
|
|
44
|
+
/** 退出编辑模式,移除控制点。 */
|
|
45
|
+
clearHandler(): void;
|
|
46
|
+
private showControlPoints;
|
|
47
|
+
private clearControlPoints;
|
|
48
|
+
/**
|
|
49
|
+
* 响应控制点拖拽移动。
|
|
50
|
+
*
|
|
51
|
+
* 默认交互会调用该方法更新 Billboard 位置。
|
|
52
|
+
*
|
|
53
|
+
* @param index 控制点索引,Billboard 只接受 `0`。
|
|
54
|
+
* @param newPosition 控制点移动到的新位置。
|
|
55
|
+
*/
|
|
56
|
+
onControlPointMoved(index: number, newPosition: Cesium.Cartesian3): void;
|
|
57
|
+
/**
|
|
58
|
+
* 控制点拖拽结束回调。
|
|
59
|
+
*
|
|
60
|
+
* 如果拖拽过程中位置发生变化,会触发 `onChanged`。
|
|
61
|
+
*/
|
|
62
|
+
onControlPointDragEnd(): void;
|
|
63
|
+
/**
|
|
64
|
+
* 移动 Billboard 到新位置。
|
|
65
|
+
*
|
|
66
|
+
* @param position 新的 Cesium Cartesian3 位置。
|
|
67
|
+
*/
|
|
68
|
+
moveTo(position: Cesium.Cartesian3): void;
|
|
69
|
+
/** 销毁 Billboard Entity、编辑控制点和关联弹窗。 */
|
|
70
|
+
destroy(): void;
|
|
71
|
+
}
|
|
72
|
+
declare namespace BillboardGraphic {
|
|
73
|
+
type ConstructorOptions = BillboardGraphicOptions;
|
|
74
|
+
}
|
|
75
|
+
export default BillboardGraphic;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import BaseGraphic, { BaseGraphicOptions } from './baseGraphic';
|
|
2
|
+
import * as Cesium from 'cesium';
|
|
3
|
+
import { GraphicLayer } from '../layer';
|
|
4
|
+
/**
|
|
5
|
+
* 圆形图形构造参数。
|
|
6
|
+
*
|
|
7
|
+
* 圆形内部使用 Cesium `EllipseGraphics` 表达,并额外维护圆心、半径和编辑描边。
|
|
8
|
+
*/
|
|
9
|
+
export interface CircleGraphicOptions extends Cesium.EllipseGraphics.ConstructorOptions, BaseGraphicOptions {
|
|
10
|
+
/** 圆心位置。 */
|
|
11
|
+
center: Cesium.Cartesian3;
|
|
12
|
+
/** 圆半径,单位为米。 */
|
|
13
|
+
radius: number;
|
|
14
|
+
/** 圆形标签配置。 */
|
|
15
|
+
label?: Cesium.LabelGraphics.ConstructorOptions;
|
|
16
|
+
/** 圆心或半径拖拽编辑结束后触发。 */
|
|
17
|
+
onChanged?: (center: Cesium.Cartesian3, radius: number) => void;
|
|
18
|
+
/** 常态描边宽度,传入 `0` 可关闭常态描边。 */
|
|
19
|
+
outlineWidth?: number;
|
|
20
|
+
/** 常态描边颜色,优先级低于 `outlineMaterial`。 */
|
|
21
|
+
outlineColor?: Cesium.Color;
|
|
22
|
+
/** 常态描边材质,优先级高于 `outlineColor`。 */
|
|
23
|
+
outlineMaterial?: Cesium.PolylineGraphics.ConstructorOptions['material'];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 可编辑圆形图形。
|
|
27
|
+
*
|
|
28
|
+
* 图形本体使用 Cesium Ellipse,SDK 额外创建 Polyline 描边以支持稳定的高亮和自定义线材质。
|
|
29
|
+
* 编辑模式下会显示圆心控制点和半径控制点。
|
|
30
|
+
*/
|
|
31
|
+
declare class CircleGraphic extends BaseGraphic {
|
|
32
|
+
/** 图形类型标识。 */
|
|
33
|
+
readonly type: 'CircleGraphic';
|
|
34
|
+
/** 圆心位置。 */
|
|
35
|
+
center: Cesium.Cartesian3;
|
|
36
|
+
/** 圆半径,单位为米。 */
|
|
37
|
+
radius: number;
|
|
38
|
+
/** Cesium EllipseGraphics 实例。 */
|
|
39
|
+
graphic: Cesium.EllipseGraphics;
|
|
40
|
+
/** 圆心或半径更新后的业务回调。 */
|
|
41
|
+
onChanged: ((center: Cesium.Cartesian3, radius: number) => void) | undefined;
|
|
42
|
+
private changedDuringDrag;
|
|
43
|
+
private controlPoints;
|
|
44
|
+
private isHovering;
|
|
45
|
+
private hoverOutlineEntity;
|
|
46
|
+
private outlineEntity;
|
|
47
|
+
private outlineWidth;
|
|
48
|
+
private outlineColor;
|
|
49
|
+
private outlineMaterial;
|
|
50
|
+
private outlinePositionsProperty;
|
|
51
|
+
/**
|
|
52
|
+
* 创建圆形图形。
|
|
53
|
+
*
|
|
54
|
+
* @param opt 圆形图形配置。
|
|
55
|
+
*/
|
|
56
|
+
constructor(opt: CircleGraphicOptions);
|
|
57
|
+
/**
|
|
58
|
+
* 将圆形添加到图层。
|
|
59
|
+
*
|
|
60
|
+
* 添加后会创建圆形 Entity、设置圆心锚点,并创建常态描边。
|
|
61
|
+
*
|
|
62
|
+
* @param layer 目标图层。
|
|
63
|
+
*/
|
|
64
|
+
add(layer: GraphicLayer): void;
|
|
65
|
+
private showOutline;
|
|
66
|
+
private clearOutline;
|
|
67
|
+
private extractOutlineColor;
|
|
68
|
+
/** 进入编辑模式,显示圆心控制点和半径控制点。 */
|
|
69
|
+
showHandler(): void;
|
|
70
|
+
/** 退出编辑模式,移除圆心和半径控制点。 */
|
|
71
|
+
clearHandler(): void;
|
|
72
|
+
private showControlPoints;
|
|
73
|
+
/** 圆心正东方向 radius 米处的坐标点(与 generateCirclePoints angle=0 公式一致) */
|
|
74
|
+
private getEastRadiusPoint;
|
|
75
|
+
/** 显示鼠标悬停高亮描边。 */
|
|
76
|
+
onMouseMoveIn(): void;
|
|
77
|
+
/** 隐藏鼠标悬停高亮描边。 */
|
|
78
|
+
onMouseMoveOut(): void;
|
|
79
|
+
private showHoverOutline;
|
|
80
|
+
private clearHoverOutline;
|
|
81
|
+
/**
|
|
82
|
+
* 响应控制点拖拽移动。
|
|
83
|
+
*
|
|
84
|
+
* `index` 为 `0` 时整体平移圆形,为 `1` 时更新半径。
|
|
85
|
+
*
|
|
86
|
+
* @param index 控制点索引。
|
|
87
|
+
* @param newPosition 控制点移动到的新位置。
|
|
88
|
+
*/
|
|
89
|
+
onControlPointMoved(index: number, newPosition: Cesium.Cartesian3): void;
|
|
90
|
+
/** 拖圆心:整体平移(圆心 + 半径点 + ellipse + outline) */
|
|
91
|
+
private moveCircleTo;
|
|
92
|
+
private resizeCircleFromEdge;
|
|
93
|
+
private syncOutlinePositions;
|
|
94
|
+
/** 控制点拖拽结束回调,圆心或半径变化后触发 `onChanged`。 */
|
|
95
|
+
onControlPointDragEnd(): void;
|
|
96
|
+
private clearControlPoints;
|
|
97
|
+
/** 销毁圆形 Entity、描边、悬停高亮、编辑控制点和关联弹窗。 */
|
|
98
|
+
destroy(): void;
|
|
99
|
+
}
|
|
100
|
+
declare namespace CircleGraphic {
|
|
101
|
+
type ConstructorOptions = CircleGraphicOptions;
|
|
102
|
+
}
|
|
103
|
+
export default CircleGraphic;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import * as Cesium from 'cesium';
|
|
2
|
+
import BaseGraphic, { BaseGraphicOptions } from './baseGraphic';
|
|
3
|
+
import { DistanceDisplayCondition } from '../types';
|
|
4
|
+
import { GraphicLayer } from '../layer';
|
|
5
|
+
/**
|
|
6
|
+
* 自定义 DOM 弹窗构造参数。
|
|
7
|
+
*
|
|
8
|
+
* 业务侧提供完整 DOM 容器,SDK 负责根据地图位置更新容器显示状态和屏幕位置。
|
|
9
|
+
*/
|
|
10
|
+
export interface CustomPopupGraphicOptions extends BaseGraphicOptions {
|
|
11
|
+
/** 业务侧提供的弹窗 DOM 容器。 */
|
|
12
|
+
container: HTMLElement;
|
|
13
|
+
/** 弹窗可视距离范围,超过范围时自动隐藏。 */
|
|
14
|
+
distance?: DistanceDisplayCondition;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 自定义 DOM 弹窗图形。
|
|
18
|
+
*
|
|
19
|
+
* 适合业务项目自行渲染复杂弹窗内容,SDK 只负责把 DOM 挂到页面并在每帧 postRender 中跟随地图锚点定位。
|
|
20
|
+
*/
|
|
21
|
+
declare class CustomPopupGraphic extends BaseGraphic {
|
|
22
|
+
/** 图形类型标识。 */
|
|
23
|
+
readonly type: 'CustomPopupGraphic';
|
|
24
|
+
/** 弹窗可视距离范围。 */
|
|
25
|
+
distance: DistanceDisplayCondition;
|
|
26
|
+
/** 弹窗 DOM 容器。 */
|
|
27
|
+
container: HTMLElement;
|
|
28
|
+
/** 弹窗是否处于业务关闭状态。 */
|
|
29
|
+
isClosed: boolean;
|
|
30
|
+
/** 地图容器左侧相对屏幕左侧的偏移。 */
|
|
31
|
+
left: number;
|
|
32
|
+
/**
|
|
33
|
+
* 创建自定义 DOM 弹窗。
|
|
34
|
+
*
|
|
35
|
+
* @param opt 自定义弹窗配置。
|
|
36
|
+
*/
|
|
37
|
+
constructor(opt: CustomPopupGraphicOptions);
|
|
38
|
+
/**
|
|
39
|
+
* 将自定义弹窗添加到图层并挂载 DOM。
|
|
40
|
+
*
|
|
41
|
+
* @param layer 目标图层。
|
|
42
|
+
*/
|
|
43
|
+
add(layer: GraphicLayer): void;
|
|
44
|
+
/** 销毁弹窗 DOM、postRender 监听和图层登记。 */
|
|
45
|
+
destroy(): void;
|
|
46
|
+
/** 注册 Cesium postRender 监听,用于每帧更新弹窗位置。 */
|
|
47
|
+
addListener(): void;
|
|
48
|
+
/** 移除 postRender 监听并隐藏弹窗。 */
|
|
49
|
+
clearListener(): void;
|
|
50
|
+
/** 显示弹窗。 */
|
|
51
|
+
show(): void;
|
|
52
|
+
/** 隐藏弹窗。 */
|
|
53
|
+
hide(): void;
|
|
54
|
+
/**
|
|
55
|
+
* 更新弹窗锚点或 DOM 容器。
|
|
56
|
+
*
|
|
57
|
+
* @param opt 可选更新项。
|
|
58
|
+
* @param opt.position 新锚点位置。
|
|
59
|
+
* @param opt.container 新弹窗 DOM 容器。
|
|
60
|
+
*/
|
|
61
|
+
updateLabel(opt?: {
|
|
62
|
+
position?: Cesium.Cartesian3;
|
|
63
|
+
container?: HTMLElement;
|
|
64
|
+
}): void;
|
|
65
|
+
/**
|
|
66
|
+
* Cesium postRender 回调。
|
|
67
|
+
*
|
|
68
|
+
* 根据锚点屏幕坐标、相机距离和关闭状态更新 DOM 显隐与位置。
|
|
69
|
+
*/
|
|
70
|
+
Postshow(): void;
|
|
71
|
+
}
|
|
72
|
+
declare namespace CustomPopupGraphic {
|
|
73
|
+
type ConstructorOptions = CustomPopupGraphicOptions;
|
|
74
|
+
}
|
|
75
|
+
export default CustomPopupGraphic;
|