@xingm/vmap-cesium-toolbar 0.0.3-alpha.3 → 0.0.3-alpha.4
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/dist/hooks/useOverlayHelper.d.ts +2 -0
- package/dist/index.es.js +732 -654
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +8 -8
- package/dist/index.umd.js.map +1 -1
- package/dist/libs/CesiumOverlayService.d.ts +7 -25
- package/dist/libs/drawHelper/DrawCircle.d.ts +1 -0
- package/dist/libs/drawHelper/DrawHint.d.ts +3 -3
- package/dist/libs/overlay-edit/OverlayHighlight.d.ts +40 -0
- package/dist/package.json +46 -0
- package/dist/style.css +162 -0
- package/package.json +1 -1
|
@@ -36,6 +36,7 @@ export declare class CesiumOverlayService {
|
|
|
36
36
|
/** 构造参数(用于开关 hover handler 等运行时策略) */
|
|
37
37
|
private readonly options;
|
|
38
38
|
private overlayEditor;
|
|
39
|
+
private overlayHighlight;
|
|
39
40
|
private lastHoverTargets;
|
|
40
41
|
private hoverPickRAF;
|
|
41
42
|
private hoverPickPos;
|
|
@@ -44,10 +45,6 @@ export declare class CesiumOverlayService {
|
|
|
44
45
|
private lastHoverPickTime;
|
|
45
46
|
private lastHoverPickPos;
|
|
46
47
|
private bulkUpdateDepth;
|
|
47
|
-
private static readonly DEFAULT_HIGHLIGHT_COLOR;
|
|
48
|
-
private static readonly DEFAULT_HIGHLIGHT_FILL_ALPHA;
|
|
49
|
-
private static readonly DEFAULT_HIGHLIGHT_GLOW_POWER;
|
|
50
|
-
private static readonly GLOW_OUTLINE_ROOT_ID_PROP;
|
|
51
48
|
private static readonly HOVER_PICK_MIN_INTERVAL_MS;
|
|
52
49
|
private static readonly HOVER_PICK_MIN_MOVE_PX;
|
|
53
50
|
private static readonly HOVER_SUSPEND_AFTER_MUTATION_MS;
|
|
@@ -70,17 +67,6 @@ export declare class CesiumOverlayService {
|
|
|
70
67
|
* 需要映射回 overlayMap 内的根覆盖物 id。
|
|
71
68
|
*/
|
|
72
69
|
private normalizeOverlayPickId;
|
|
73
|
-
private getEntityPropertyString;
|
|
74
|
-
private mapGlowOutlineEntityToRoot;
|
|
75
|
-
private getClosedPositions;
|
|
76
|
-
private generateEllipseOutlinePositions;
|
|
77
|
-
/**
|
|
78
|
-
* 确保发光轮廓效果
|
|
79
|
-
* @param root - 根覆盖物实体
|
|
80
|
-
* @param color - 发光颜色
|
|
81
|
-
*/
|
|
82
|
-
private ensureGlowOutline;
|
|
83
|
-
private removeGlowOutline;
|
|
84
70
|
private resolveOverlayByPickId;
|
|
85
71
|
private resolvePickedOverlayEntity;
|
|
86
72
|
readonly marker: MapMarker;
|
|
@@ -122,6 +108,12 @@ export declare class CesiumOverlayService {
|
|
|
122
108
|
* 设置实体点击处理器
|
|
123
109
|
*/
|
|
124
110
|
private setupEntityClickHandler;
|
|
111
|
+
/**
|
|
112
|
+
* 开启或是关闭覆盖物的Hover高亮(鼠标移入高亮,移出取消)。
|
|
113
|
+
* - 开启后:覆盖物会触发高亮,且高亮状态会在鼠标移出时取消。
|
|
114
|
+
* - 关闭后:覆盖物不再触发 hover 高亮。
|
|
115
|
+
*/
|
|
116
|
+
toggleOverlayHoverHighlight(enabled: boolean): void;
|
|
125
117
|
/**
|
|
126
118
|
* 开启/关闭覆盖物编辑模式。
|
|
127
119
|
* - 开启后:点击覆盖物会进入编辑,并显示可拖拽控制点。
|
|
@@ -143,16 +135,6 @@ export declare class CesiumOverlayService {
|
|
|
143
135
|
private setupEntityHoverHandler;
|
|
144
136
|
private getPropertyValue;
|
|
145
137
|
private getNumberProperty;
|
|
146
|
-
private resolveHighlightOptions;
|
|
147
|
-
private getActiveHighlightOptions;
|
|
148
|
-
private setOverlayHighlightReason;
|
|
149
|
-
private applyOverlayHighlightStyle;
|
|
150
|
-
/**
|
|
151
|
-
* 恢复覆盖物的高亮样式
|
|
152
|
-
* @param entity - 覆盖物实体对象
|
|
153
|
-
* @returns 无返回值
|
|
154
|
-
*/
|
|
155
|
-
private restoreOverlayHighlightStyle;
|
|
156
138
|
/**
|
|
157
139
|
* 生成唯一ID
|
|
158
140
|
*/
|
|
@@ -17,16 +17,16 @@ export declare class DrawHintHelper {
|
|
|
17
17
|
private drawHintOverrideUntil;
|
|
18
18
|
constructor(entities: Cesium.EntityCollection, getState: () => DrawHintState, translate: (key: string, params?: Record<string, any>) => string);
|
|
19
19
|
handleSceneModeChanged(): void;
|
|
20
|
-
setOverride(
|
|
20
|
+
setOverride(options: Cesium.LabelGraphics | Cesium.LabelGraphics.ConstructorOptions, ms?: number): void;
|
|
21
21
|
updatePosition(position: Cesium.Cartesian3): void;
|
|
22
22
|
refreshTextOnly(): void;
|
|
23
23
|
clear(): void;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* 获取绘图提示文本的公共方法
|
|
26
26
|
* 根据当前的绘图状态和模式返回相应的提示信息
|
|
27
27
|
* @returns {string} 返回对应的提示文本,如果不在绘图状态则返回空字符串
|
|
28
28
|
*/
|
|
29
|
-
|
|
29
|
+
getDrawHintText(): string;
|
|
30
30
|
private toHintDisplayPosition;
|
|
31
31
|
}
|
|
32
32
|
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Entity } from '../../../node_modules/cesium';
|
|
2
|
+
import { DrawEntity } from '../drawHelper';
|
|
3
|
+
import { OverlayEntity } from '../overlay/types';
|
|
4
|
+
import { MapCircle } from '../overlay/MapCircle';
|
|
5
|
+
import { MapPolygon } from '../overlay/MapPolygon';
|
|
6
|
+
import { MapRectangle } from '../overlay/MapRectangle';
|
|
7
|
+
import * as Cesium from "cesium";
|
|
8
|
+
export interface OverlayHighlightHost {
|
|
9
|
+
getEntities(): Cesium.EntityCollection;
|
|
10
|
+
getOverlayById(id: string): (DrawEntity & OverlayEntity) | undefined;
|
|
11
|
+
getPropertyValue<T>(prop: any, fallback: T): T;
|
|
12
|
+
getNumberProperty(prop: any, fallback: number): number;
|
|
13
|
+
getCircle(): MapCircle;
|
|
14
|
+
getPolygon(): MapPolygon;
|
|
15
|
+
getRectangle(): MapRectangle;
|
|
16
|
+
}
|
|
17
|
+
export declare class OverlayHighlight {
|
|
18
|
+
private readonly host;
|
|
19
|
+
private static readonly DEFAULT_HIGHLIGHT_COLOR;
|
|
20
|
+
private static readonly DEFAULT_HIGHLIGHT_FILL_ALPHA;
|
|
21
|
+
private static readonly DEFAULT_HIGHLIGHT_GLOW_POWER;
|
|
22
|
+
private static readonly GLOW_OUTLINE_ROOT_ID_PROP;
|
|
23
|
+
private readonly entities;
|
|
24
|
+
constructor(host: OverlayHighlightHost);
|
|
25
|
+
mapGlowOutlineEntityToRoot(entity: Cesium.Entity): (DrawEntity & OverlayEntity) | null;
|
|
26
|
+
setOverlayHighlightReason(targets: Entity[], reason: "click" | "hover", enabled: boolean): void;
|
|
27
|
+
toggleOverlayHighlight(entity: OverlayEntity, reason?: "click" | "hover"): void;
|
|
28
|
+
setOverlayHighlight(entityOrId: OverlayEntity | string, enabled: boolean, reason?: "click" | "hover"): boolean;
|
|
29
|
+
private getEntityPropertyString;
|
|
30
|
+
private getPropertyValue;
|
|
31
|
+
private getNumberProperty;
|
|
32
|
+
private resolveHighlightOptions;
|
|
33
|
+
private getActiveHighlightOptions;
|
|
34
|
+
private getClosedPositions;
|
|
35
|
+
private generateEllipseOutlinePositions;
|
|
36
|
+
private ensureGlowOutline;
|
|
37
|
+
private removeGlowOutline;
|
|
38
|
+
private applyOverlayHighlightStyle;
|
|
39
|
+
private restoreOverlayHighlightStyle;
|
|
40
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xingm/vmap-cesium-toolbar",
|
|
3
|
+
"version": "0.0.3-alpha.4",
|
|
4
|
+
"description": "A powerful Cesium map toolbar plugin with drawing, measurement, and interaction features",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "index.es.js",
|
|
7
|
+
"module": "index.es.js",
|
|
8
|
+
"types": "index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"index.es.js",
|
|
11
|
+
"index.umd.js",
|
|
12
|
+
"index.d.ts",
|
|
13
|
+
"style.css",
|
|
14
|
+
"README.md",
|
|
15
|
+
"geojson"
|
|
16
|
+
],
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"import": "./index.es.js",
|
|
20
|
+
"default": "./index.es.js"
|
|
21
|
+
},
|
|
22
|
+
"./style": "./style.css"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"vue": "^3.0.0"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"cesium",
|
|
29
|
+
"map",
|
|
30
|
+
"toolbar",
|
|
31
|
+
"drawing",
|
|
32
|
+
"measurement",
|
|
33
|
+
"vue3",
|
|
34
|
+
"typescript"
|
|
35
|
+
],
|
|
36
|
+
"author": "pengxueyou",
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "git+https://github.com/BenXueYou/vmap-cesium-tool.git"
|
|
41
|
+
},
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/BenXueYou/vmap-cesium-tool/issues"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://github.com/BenXueYou/vmap-cesium-tool#readme"
|
|
46
|
+
}
|
package/dist/style.css
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/* VMap Cesium Toolbar Plugin Styles */
|
|
2
|
+
|
|
3
|
+
/* 工具栏基础样式 */
|
|
4
|
+
.cesium-map-toolbar {
|
|
5
|
+
position: absolute;
|
|
6
|
+
background: rgba(255, 255, 255, 0.95);
|
|
7
|
+
border: 1px solid #e0e0e0;
|
|
8
|
+
border-radius: 6px;
|
|
9
|
+
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
|
10
|
+
padding: 8px;
|
|
11
|
+
z-index: 1000;
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
gap: 8px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* 工具栏按钮样式 */
|
|
18
|
+
.cesium-toolbar-button {
|
|
19
|
+
width: 40px;
|
|
20
|
+
height: 40px;
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: center;
|
|
24
|
+
background: rgba(66, 133, 244, 0.4);
|
|
25
|
+
color: white;
|
|
26
|
+
border: none;
|
|
27
|
+
border-radius: 4px;
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
font-size: 14px;
|
|
30
|
+
font-weight: bold;
|
|
31
|
+
transition: all 0.2s ease;
|
|
32
|
+
user-select: none;
|
|
33
|
+
position: relative;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.cesium-toolbar-button:hover {
|
|
37
|
+
background: rgba(51, 103, 214, 0.9);
|
|
38
|
+
transform: scale(1.05);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* 搜索容器样式 */
|
|
42
|
+
.search-container {
|
|
43
|
+
position: absolute;
|
|
44
|
+
background: white;
|
|
45
|
+
border: 1px solid #e0e0e0;
|
|
46
|
+
border-radius: 4px;
|
|
47
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
48
|
+
padding: 8px;
|
|
49
|
+
min-width: 200px;
|
|
50
|
+
z-index: 1001;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.search-container input {
|
|
54
|
+
padding: 6px 8px;
|
|
55
|
+
border: 1px solid #ddd;
|
|
56
|
+
border-radius: 3px;
|
|
57
|
+
font-size: 14px;
|
|
58
|
+
outline: none;
|
|
59
|
+
width: 100%;
|
|
60
|
+
box-sizing: border-box;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.search-results {
|
|
64
|
+
margin-top: 8px;
|
|
65
|
+
max-height: 200px;
|
|
66
|
+
overflow-y: auto;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.search-results > div {
|
|
70
|
+
padding: 8px;
|
|
71
|
+
border-bottom: 1px solid #f0f0f0;
|
|
72
|
+
cursor: pointer;
|
|
73
|
+
transition: background-color 0.2s;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.search-results > div:hover {
|
|
77
|
+
background-color: #f5f5f5;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* 测量菜单样式 */
|
|
81
|
+
.measurement-menu,
|
|
82
|
+
.layers-menu {
|
|
83
|
+
position: absolute;
|
|
84
|
+
background: white;
|
|
85
|
+
border: 1px solid #e0e0e0;
|
|
86
|
+
border-radius: 4px;
|
|
87
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
88
|
+
padding: 4px 0;
|
|
89
|
+
min-width: 120px;
|
|
90
|
+
z-index: 1001;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.layers-menu {
|
|
94
|
+
padding: 8px;
|
|
95
|
+
min-width: 200px;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.measurement-menu > div,
|
|
99
|
+
.layers-menu > div {
|
|
100
|
+
padding: 8px 12px;
|
|
101
|
+
cursor: pointer;
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
gap: 8px;
|
|
105
|
+
transition: background-color 0.2s;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.measurement-menu > div:hover,
|
|
109
|
+
.layers-menu > div:hover {
|
|
110
|
+
background-color: #f5f5f5;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* 图层菜单项样式 */
|
|
114
|
+
.layers-menu .map-type-item {
|
|
115
|
+
display: flex;
|
|
116
|
+
align-items: center;
|
|
117
|
+
gap: 8px;
|
|
118
|
+
padding: 6px;
|
|
119
|
+
cursor: pointer;
|
|
120
|
+
border-radius: 3px;
|
|
121
|
+
transition: background-color 0.2s;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.layers-menu .map-type-item:hover {
|
|
125
|
+
background-color: #f5f5f5;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.layers-menu .map-type-item.selected {
|
|
129
|
+
background-color: #e3f2fd;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.layers-menu .map-type-thumbnail {
|
|
133
|
+
width: 20px;
|
|
134
|
+
height: 20px;
|
|
135
|
+
border-radius: 2px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.layers-menu .map-type-checkmark {
|
|
139
|
+
color: #1976d2;
|
|
140
|
+
font-weight: bold;
|
|
141
|
+
margin-left: auto;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* 响应式设计 */
|
|
145
|
+
@media (max-width: 768px) {
|
|
146
|
+
.cesium-map-toolbar {
|
|
147
|
+
padding: 6px;
|
|
148
|
+
gap: 6px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.cesium-toolbar-button {
|
|
152
|
+
width: 36px;
|
|
153
|
+
height: 36px;
|
|
154
|
+
font-size: 12px;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.search-container,
|
|
158
|
+
.measurement-menu,
|
|
159
|
+
.layers-menu {
|
|
160
|
+
min-width: 180px;
|
|
161
|
+
}
|
|
162
|
+
}
|
package/package.json
CHANGED