@xingm/vmap-cesium-toolbar 0.0.1-beta.1 → 0.0.1-beta.3
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/README.md +169 -615
- package/dist/index.js +487 -277
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +18 -18
- package/dist/index.umd.js.map +1 -1
- package/dist/package.json +4 -4
- package/package.json +5 -6
- package/dist/README.md +0 -585
package/README.md
CHANGED
|
@@ -1,404 +1,115 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @xingm/vmap-cesium-toolbar
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
一个功能强大的 Cesium 地图工具栏组件,提供搜索、测量、绘制、2D/3D切换、图层管理等功能。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 特性
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- 🗺️ **完整的地图工具栏** - 搜索、测量、绘制、图层切换等功能
|
|
8
|
+
- 📏 **精确测量工具** - 支持距离、面积、高度测量
|
|
9
|
+
- ✏️ **绘制功能** - 支持点、线、面绘制和编辑
|
|
10
|
+
- 🔄 **2D/3D切换** - 无缝切换2D和3D视图模式
|
|
11
|
+
- 🎨 **可定制样式** - 支持自定义按钮样式和布局
|
|
12
|
+
- 📱 **响应式设计** - 适配不同屏幕尺寸
|
|
13
|
+
- 🚀 **TypeScript支持** - 完整的类型定义
|
|
14
|
+
- ⚡ **Vue 3兼容** - 原生支持Vue 3项目
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
- [CesiumMapLoader.ts](#cesiummaploaderts)
|
|
11
|
-
- [CesiumMapToolbar.ts](#cesiummaptoolbarts)
|
|
16
|
+
## 安装
|
|
12
17
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
## CesiumMapHelper.ts
|
|
16
|
-
|
|
17
|
-
### 概述
|
|
18
|
-
|
|
19
|
-
Cesium绘图辅助工具类,提供绘制点、线、多边形、矩形、视锥体等功能,支持编辑和删除操作。
|
|
20
|
-
|
|
21
|
-
### 类定义
|
|
22
|
-
|
|
23
|
-
```typescript
|
|
24
|
-
class DrawHelper
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### 构造函数
|
|
28
|
-
|
|
29
|
-
```typescript
|
|
30
|
-
constructor(viewer: Cesium.Viewer)
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**参数:**
|
|
34
|
-
|
|
35
|
-
- `viewer` (Cesium.Viewer): Cesium Viewer 实例
|
|
36
|
-
|
|
37
|
-
**示例:**
|
|
38
|
-
|
|
39
|
-
```typescript
|
|
40
|
-
import DrawHelper from './libs/CesiumMapHelper';
|
|
41
|
-
|
|
42
|
-
const drawHelper = new DrawHelper(viewer);
|
|
18
|
+
```bash
|
|
19
|
+
npm install @xingm/vmap-cesium-toolbar cesium
|
|
43
20
|
```
|
|
44
21
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
#### 1. 绘制线条
|
|
48
|
-
|
|
49
|
-
```typescript
|
|
50
|
-
startDrawingLine(): void
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
开始绘制线条模式。支持多点折线绘制。
|
|
54
|
-
|
|
55
|
-
**使用示例:**
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
drawHelper.startDrawingLine();
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
#### 2. 绘制多边形
|
|
62
|
-
|
|
63
|
-
```typescript
|
|
64
|
-
startDrawingPolygon(): void
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
开始绘制多边形模式。绘制带淡绿色填充的多边形区域。
|
|
68
|
-
|
|
69
|
-
**使用示例:**
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
drawHelper.startDrawingPolygon();
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
#### 3. 绘制矩形
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
startDrawingRectangle(): void
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
开始绘制矩形模式。
|
|
82
|
-
|
|
83
|
-
**使用示例:**
|
|
84
|
-
|
|
85
|
-
```typescript
|
|
86
|
-
drawHelper.startDrawingRectangle();
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
#### 4. 绘制视锥体
|
|
90
|
-
|
|
91
|
-
```typescript
|
|
92
|
-
drawFrustum(options?: FrustumOptions): void
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**参数:**
|
|
96
|
-
|
|
97
|
-
- `options` (FrustumOptions, 可选): 视锥体配置选项
|
|
98
|
-
|
|
99
|
-
**FrustumOptions 接口:**
|
|
22
|
+
## 快速开始
|
|
100
23
|
|
|
101
|
-
|
|
102
|
-
interface FrustumOptions {
|
|
103
|
-
position?: Cartesian3; // 视锥体位置
|
|
104
|
-
orientation?: Quaternion; // 视锥体方向
|
|
105
|
-
fov?: number; // 视野角度 (1-179度)
|
|
106
|
-
aspectRatio?: number; // 宽高比
|
|
107
|
-
near?: number; // 近平面距离
|
|
108
|
-
far?: number; // 远平面距离
|
|
109
|
-
fillColor?: Color; // 填充颜色
|
|
110
|
-
outlineColor?: Color; // 轮廓颜色
|
|
111
|
-
onRightClick?: (position: Cartesian3) => void; // 右键点击回调
|
|
112
|
-
}
|
|
113
|
-
```
|
|
24
|
+
### 基本使用
|
|
114
25
|
|
|
115
|
-
|
|
26
|
+
```javascript
|
|
27
|
+
import { CesiumMapToolbar, initCesium } from '@xingm/vmap-cesium-toolbar';
|
|
28
|
+
import '@xingm/vmap-cesium-toolbar/style';
|
|
116
29
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
aspectRatio: 1.5,
|
|
121
|
-
near: 10,
|
|
122
|
-
far: 2000,
|
|
123
|
-
fillColor: Cesium.Color.GREEN.withAlpha(0.3),
|
|
124
|
-
outlineColor: Cesium.Color.WHITE,
|
|
125
|
-
onRightClick: (pos) => {
|
|
126
|
-
console.log('视锥体被右键点击:', pos);
|
|
127
|
-
}
|
|
30
|
+
// 初始化Cesium
|
|
31
|
+
const viewer = initCesium('cesiumContainer', {
|
|
32
|
+
terrainProvider: Cesium.createWorldTerrain()
|
|
128
33
|
});
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
#### 5. 结束绘制
|
|
132
|
-
|
|
133
|
-
```typescript
|
|
134
|
-
endDrawing(): void
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
结束当前绘制操作。
|
|
138
|
-
|
|
139
|
-
#### 6. 清除所有
|
|
140
|
-
|
|
141
|
-
```typescript
|
|
142
|
-
clearAll(): void
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
清除所有已绘制的实体。
|
|
146
|
-
|
|
147
|
-
#### 7. 清除视锥体
|
|
148
|
-
|
|
149
|
-
```typescript
|
|
150
|
-
clearFrustum(): void
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
清除所有视锥体相关图形。
|
|
154
|
-
|
|
155
|
-
#### 8. 删除指定实体
|
|
156
|
-
|
|
157
|
-
```typescript
|
|
158
|
-
removeEntity(entity: Cesium.Entity): void
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
**参数:**
|
|
162
34
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
#### 9. 获取已完成实体
|
|
166
|
-
|
|
167
|
-
```typescript
|
|
168
|
-
getFinishedEntities(): Cesium.Entity[]
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
返回所有已完成的绘制实体数组。
|
|
172
|
-
|
|
173
|
-
### 事件回调
|
|
174
|
-
|
|
175
|
-
#### 设置开始绘制回调
|
|
176
|
-
|
|
177
|
-
```typescript
|
|
178
|
-
onDrawStart(callback: () => void): void
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
#### 设置结束绘制回调
|
|
182
|
-
|
|
183
|
-
```typescript
|
|
184
|
-
onDrawEnd(callback: (entity: Cesium.Entity | null) => void): void
|
|
35
|
+
// 创建工具栏
|
|
36
|
+
const toolbar = new CesiumMapToolbar(viewer, document.getElementById('toolbar'));
|
|
185
37
|
```
|
|
186
38
|
|
|
187
|
-
|
|
39
|
+
### Vue 3 项目中使用
|
|
188
40
|
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
|
|
41
|
+
```vue
|
|
42
|
+
<template>
|
|
43
|
+
<div id="cesiumContainer"></div>
|
|
44
|
+
<div id="toolbar"></div>
|
|
45
|
+
</template>
|
|
192
46
|
|
|
193
|
-
|
|
47
|
+
<script setup>
|
|
48
|
+
import { onMounted } from 'vue';
|
|
49
|
+
import { CesiumMapToolbar, initCesium } from '@xingm/vmap-cesium-toolbar';
|
|
50
|
+
import '@xingm/vmap-cesium-toolbar/style';
|
|
194
51
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
console.log('开始绘制');
|
|
198
|
-
});
|
|
52
|
+
let viewer;
|
|
53
|
+
let toolbar;
|
|
199
54
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
});
|
|
55
|
+
onMounted(() => {
|
|
56
|
+
// 初始化Cesium
|
|
57
|
+
viewer = initCesium('cesiumContainer', {
|
|
58
|
+
terrainProvider: Cesium.createWorldTerrain()
|
|
59
|
+
});
|
|
207
60
|
|
|
208
|
-
|
|
209
|
-
|
|
61
|
+
// 创建工具栏
|
|
62
|
+
toolbar = new CesiumMapToolbar(viewer, document.getElementById('toolbar'));
|
|
210
63
|
});
|
|
64
|
+
</script>
|
|
211
65
|
```
|
|
212
66
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
destroy(): void
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
销毁工具实例,清理所有事件监听器和资源。
|
|
220
|
-
|
|
221
|
-
---
|
|
67
|
+
## 主要组件
|
|
222
68
|
|
|
223
|
-
|
|
69
|
+
### CesiumMapToolbar
|
|
224
70
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
Cesium地图加载器,提供地图初始化、地形配置、图层管理等功能。
|
|
228
|
-
|
|
229
|
-
### 主要函数
|
|
230
|
-
|
|
231
|
-
#### 1. 初始化Cesium地图
|
|
232
|
-
|
|
233
|
-
```typescript
|
|
234
|
-
async function initCesium(
|
|
235
|
-
containerId: string,
|
|
236
|
-
options: InitOptions,
|
|
237
|
-
mapCenter?: MapCenter
|
|
238
|
-
): Promise<{ viewer: CesiumViewer; initialCenter: MapCenter }>
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
**参数:**
|
|
242
|
-
|
|
243
|
-
- `containerId` (string): 地图容器DOM元素ID
|
|
244
|
-
- `options` (InitOptions): 地图初始化配置
|
|
245
|
-
- `mapCenter` (MapCenter, 可选): 地图中心点配置
|
|
246
|
-
|
|
247
|
-
**InitOptions 接口:**
|
|
248
|
-
|
|
249
|
-
```typescript
|
|
250
|
-
interface InitOptions {
|
|
251
|
-
terrain?: Terrain; // 地形配置
|
|
252
|
-
terrainProvider?: TerrainProvider; // 地形提供者
|
|
253
|
-
mapType?: string; // 地图类型
|
|
254
|
-
imageryProvider?: UrlTemplateImageryProvider; // 自定义影像图层
|
|
255
|
-
imageryLayers?: ImageryLayerCollection; // 自定义影像图层集合
|
|
256
|
-
terrainShadows?: ShadowMode; // 地形阴影
|
|
257
|
-
contextOptions?: ContextOptions; // 上下文选项
|
|
258
|
-
scene3DOnly?: boolean; // 是否只使用3D场景
|
|
259
|
-
selectionIndicator?: boolean; // 选择指示器
|
|
260
|
-
navigationHelpButton?: boolean; // 导航帮助按钮
|
|
261
|
-
fullscreenButton?: boolean; // 全屏按钮
|
|
262
|
-
geocoder?: boolean; // 地理编码器
|
|
263
|
-
homeButton?: boolean; // 主页按钮
|
|
264
|
-
infoBox?: boolean; // 信息框
|
|
265
|
-
sceneModePicker?: boolean; // 场景模式选择器
|
|
266
|
-
timeline?: boolean; // 时间轴
|
|
267
|
-
animation?: boolean; // 动画
|
|
268
|
-
baseLayerPicker?: boolean; // 基础图层选择器
|
|
269
|
-
navigationInstructionsInitiallyVisible?: boolean; // 导航指令初始可见
|
|
270
|
-
clock?: Clock; // 时钟
|
|
271
|
-
sceneMode?: SceneMode; // 场景模式
|
|
272
|
-
screenSpaceEventHandler?: ScreenSpaceEventHandler; // 屏幕空间事件处理器
|
|
273
|
-
useDefaultRenderLoop?: boolean; // 使用默认渲染循环
|
|
274
|
-
targetFrameRate?: number; // 目标帧率
|
|
275
|
-
showRenderLoopErrors?: boolean; // 显示渲染循环错误
|
|
276
|
-
automaticallyTrackDataSourceClocks?: boolean; // 自动跟踪数据源时钟
|
|
277
|
-
dataSources?: DataSourceCollection; // 数据源集合
|
|
278
|
-
creationTime?: number; // 创建时间
|
|
279
|
-
useBrowserRecommendedResolution?: boolean; // 使用浏览器推荐分辨率
|
|
280
|
-
resolutionScale?: number; // 分辨率缩放
|
|
281
|
-
orderIndependentTransparency?: boolean; // 无序透明度
|
|
282
|
-
shadows?: boolean; // 阴影
|
|
283
|
-
terrainExaggeration?: number; // 地形夸张系数
|
|
284
|
-
maximumScreenSpaceError?: number; // 最大屏幕空间误差
|
|
285
|
-
maximumNumberOfLoadedTiles?: number; // 最大加载瓦片数量
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
**MapCenter 接口:**
|
|
290
|
-
|
|
291
|
-
```typescript
|
|
292
|
-
interface MapCenter {
|
|
293
|
-
latitude: number; // 纬度
|
|
294
|
-
longitude: number; // 经度
|
|
295
|
-
height: number; // 高度
|
|
296
|
-
pitch?: number; // 俯仰角
|
|
297
|
-
heading?: number; // 航向角
|
|
298
|
-
}
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
**返回值:**
|
|
302
|
-
|
|
303
|
-
- `viewer`: Cesium Viewer 实例
|
|
304
|
-
- `initialCenter`: 初始中心点配置
|
|
305
|
-
|
|
306
|
-
**使用示例:**
|
|
307
|
-
|
|
308
|
-
```typescript
|
|
309
|
-
import { initCesium } from './libs/CesiumMapLoader';
|
|
310
|
-
|
|
311
|
-
const { viewer, initialCenter } = await initCesium("cesiumContainer", {
|
|
312
|
-
terrain: Cesium.Terrain.fromWorldTerrain(),
|
|
313
|
-
animation: false,
|
|
314
|
-
baseLayerPicker: false,
|
|
315
|
-
fullscreenButton: false,
|
|
316
|
-
geocoder: false,
|
|
317
|
-
homeButton: false,
|
|
318
|
-
infoBox: false,
|
|
319
|
-
sceneModePicker: false,
|
|
320
|
-
selectionIndicator: false,
|
|
321
|
-
timeline: false,
|
|
322
|
-
navigationHelpButton: false,
|
|
323
|
-
scene3DOnly: false,
|
|
324
|
-
}, {
|
|
325
|
-
longitude: 120.2052342,
|
|
326
|
-
latitude: 30.2489634,
|
|
327
|
-
height: 1000,
|
|
328
|
-
pitch: -60,
|
|
329
|
-
heading: 0
|
|
330
|
-
});
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
#### 2. 创建天地图
|
|
71
|
+
主要工具栏组件,提供完整的地图操作功能。
|
|
334
72
|
|
|
335
73
|
```typescript
|
|
336
|
-
|
|
74
|
+
const toolbar = new CesiumMapToolbar(
|
|
75
|
+
viewer, // Cesium Viewer实例
|
|
76
|
+
container, // 工具栏容器元素
|
|
77
|
+
config, // 配置选项(可选)
|
|
78
|
+
callbacks, // 回调函数(可选)
|
|
79
|
+
initialCenter // 初始中心点(可选)
|
|
80
|
+
);
|
|
337
81
|
```
|
|
338
82
|
|
|
339
|
-
|
|
83
|
+
### CesiumMapHelper
|
|
340
84
|
|
|
341
|
-
|
|
85
|
+
地图辅助工具类,提供绘制和测量功能。
|
|
342
86
|
|
|
343
87
|
```typescript
|
|
344
|
-
|
|
345
|
-
url: string; // 瓦片URL模板
|
|
346
|
-
subdomains: string[]; // 子域名数组
|
|
347
|
-
minimumLevel: number; // 最小缩放级别
|
|
348
|
-
maximumLevel: number; // 最大缩放级别
|
|
349
|
-
credit: string; // 版权信息
|
|
350
|
-
}
|
|
351
|
-
```
|
|
88
|
+
import { CesiumMapHelper } from '@xingm/vmap-cesium-toolbar';
|
|
352
89
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
function createGaoDeMap(): UrlTemplateImageryProvider
|
|
90
|
+
const helper = new CesiumMapHelper(viewer);
|
|
91
|
+
helper.startDrawing('line'); // 开始绘制线条
|
|
92
|
+
helper.startMeasurement('distance'); // 开始距离测量
|
|
357
93
|
```
|
|
358
94
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
---
|
|
95
|
+
### CesiumMapLoader
|
|
362
96
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
### 概述
|
|
366
|
-
|
|
367
|
-
Cesium地图工具栏类,提供搜索、测量、2D/3D切换、图层切换、定位、缩放、全屏等功能。
|
|
368
|
-
|
|
369
|
-
### 类定义
|
|
97
|
+
Cesium初始化工具,简化Cesium的配置和初始化。
|
|
370
98
|
|
|
371
99
|
```typescript
|
|
372
|
-
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
### 构造函数
|
|
100
|
+
import { CesiumMapLoader } from '@xingm/vmap-cesium-toolbar';
|
|
376
101
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
search?: SearchCallback;
|
|
384
|
-
measurement?: MeasurementCallback;
|
|
385
|
-
zoom?: ZoomCallback;
|
|
386
|
-
},
|
|
387
|
-
initialCenter?: { longitude: number; latitude: number; height: number }
|
|
388
|
-
)
|
|
102
|
+
const viewer = CesiumMapLoader.init('container', {
|
|
103
|
+
terrainProvider: Cesium.createWorldTerrain(),
|
|
104
|
+
imageryProvider: new Cesium.OpenStreetMapImageryProvider({
|
|
105
|
+
url: 'https://a.tile.openstreetmap.org/'
|
|
106
|
+
})
|
|
107
|
+
});
|
|
389
108
|
```
|
|
390
109
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
- `viewer` (Viewer): Cesium Viewer 实例
|
|
394
|
-
- `container` (HTMLElement): 地图容器元素
|
|
395
|
-
- `config` (ToolbarConfig, 可选): 工具栏配置
|
|
396
|
-
- `callbacks` (对象, 可选): 回调函数配置
|
|
397
|
-
- `initialCenter` (对象, 可选): 初始中心点
|
|
398
|
-
|
|
399
|
-
### 配置接口
|
|
110
|
+
## 配置选项
|
|
400
111
|
|
|
401
|
-
|
|
112
|
+
### 工具栏配置
|
|
402
113
|
|
|
403
114
|
```typescript
|
|
404
115
|
interface ToolbarConfig {
|
|
@@ -408,308 +119,151 @@ interface ToolbarConfig {
|
|
|
408
119
|
backgroundColor?: string; // 背景色
|
|
409
120
|
borderColor?: string; // 边框色
|
|
410
121
|
borderRadius?: number; // 圆角半径
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
#### SearchCallback
|
|
418
|
-
|
|
419
|
-
```typescript
|
|
420
|
-
interface SearchCallback {
|
|
421
|
-
onSearch?: (query: string) => Promise<SearchResult[]>;
|
|
422
|
-
onSelect?: (result: SearchResult) => void;
|
|
122
|
+
showSearch?: boolean; // 显示搜索框
|
|
123
|
+
showMeasurement?: boolean; // 显示测量工具
|
|
124
|
+
showDrawing?: boolean; // 显示绘制工具
|
|
125
|
+
showLayerControl?: boolean; // 显示图层控制
|
|
126
|
+
show2D3DToggle?: boolean; // 显示2D/3D切换
|
|
423
127
|
}
|
|
424
128
|
```
|
|
425
129
|
|
|
426
|
-
|
|
130
|
+
### 回调函数
|
|
427
131
|
|
|
428
132
|
```typescript
|
|
429
|
-
interface
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
133
|
+
interface ToolbarCallbacks {
|
|
134
|
+
search?: (query: string) => void;
|
|
135
|
+
measurement?: (type: string, result: any) => void;
|
|
136
|
+
drawing?: (type: string, entity: Entity) => void;
|
|
137
|
+
zoom?: (level: number) => void;
|
|
433
138
|
}
|
|
434
139
|
```
|
|
435
140
|
|
|
436
|
-
|
|
141
|
+
## 功能说明
|
|
437
142
|
|
|
438
|
-
|
|
439
|
-
interface ZoomCallback {
|
|
440
|
-
onZoomIn?: (beforeLevel: number, afterLevel: number) => void;
|
|
441
|
-
onZoomOut?: (beforeLevel: number, afterLevel: number) => void;
|
|
442
|
-
}
|
|
443
|
-
```
|
|
143
|
+
### 搜索功能
|
|
444
144
|
|
|
445
|
-
|
|
145
|
+
支持地名搜索和坐标定位:
|
|
446
146
|
|
|
447
|
-
```
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
}
|
|
147
|
+
```javascript
|
|
148
|
+
// 搜索回调
|
|
149
|
+
const callbacks = {
|
|
150
|
+
search: (query) => {
|
|
151
|
+
console.log('搜索:', query);
|
|
152
|
+
// 实现搜索逻辑
|
|
153
|
+
}
|
|
154
|
+
};
|
|
455
155
|
```
|
|
456
156
|
|
|
457
|
-
###
|
|
157
|
+
### 测量工具
|
|
458
158
|
|
|
459
|
-
|
|
159
|
+
支持多种测量类型:
|
|
460
160
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
161
|
+
- **距离测量** - 测量两点间距离
|
|
162
|
+
- **面积测量** - 测量多边形面积
|
|
163
|
+
- **高度测量** - 测量点的高度信息
|
|
464
164
|
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
165
|
+
```javascript
|
|
166
|
+
// 测量回调
|
|
167
|
+
const callbacks = {
|
|
168
|
+
measurement: (type, result) => {
|
|
169
|
+
console.log('测量结果:', type, result);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
469
172
|
```
|
|
470
173
|
|
|
471
|
-
|
|
174
|
+
### 绘制功能
|
|
472
175
|
|
|
473
|
-
|
|
474
|
-
resetToInitialLocation(): void
|
|
475
|
-
```
|
|
176
|
+
支持多种绘制类型:
|
|
476
177
|
|
|
477
|
-
|
|
178
|
+
- **点绘制** - 在地图上标记点
|
|
179
|
+
- **线绘制** - 绘制线条
|
|
180
|
+
- **面绘制** - 绘制多边形区域
|
|
478
181
|
|
|
479
|
-
```
|
|
480
|
-
|
|
182
|
+
```javascript
|
|
183
|
+
// 绘制回调
|
|
184
|
+
const callbacks = {
|
|
185
|
+
drawing: (type, entity) => {
|
|
186
|
+
console.log('绘制完成:', type, entity);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
481
189
|
```
|
|
482
190
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
工具栏包含以下8个按钮:
|
|
486
|
-
|
|
487
|
-
1. **🔍 搜索按钮**
|
|
488
|
-
- 鼠标悬停显示搜索框
|
|
489
|
-
- 支持地址搜索
|
|
490
|
-
- 点击搜索结果自动定位
|
|
191
|
+
## 样式定制
|
|
491
192
|
|
|
492
|
-
|
|
493
|
-
- 悬停显示:测面积、测距、清除
|
|
494
|
-
- 测距:支持多点折线,显示每段距离和总距离
|
|
495
|
-
- 测面积:绘制淡绿色填充多边形,显示面积
|
|
193
|
+
组件提供了完整的CSS变量支持,可以轻松定制样式:
|
|
496
194
|
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
5. **🎯 定位按钮**
|
|
506
|
-
- 复位到地图初始中心点
|
|
507
|
-
- 平滑飞行动画
|
|
508
|
-
|
|
509
|
-
6. **🔍+ 放大按钮**
|
|
510
|
-
- 地图放大
|
|
511
|
-
- 支持缩放回调
|
|
512
|
-
|
|
513
|
-
7. **🔍- 缩小按钮**
|
|
514
|
-
- 地图缩小
|
|
515
|
-
- 支持缩放回调
|
|
516
|
-
|
|
517
|
-
8. **⛶ 全屏按钮**
|
|
518
|
-
- 进入/退出全屏模式
|
|
519
|
-
- 自动检测全屏状态
|
|
520
|
-
|
|
521
|
-
### 使用示例
|
|
522
|
-
|
|
523
|
-
#### 基本使用
|
|
524
|
-
|
|
525
|
-
```typescript
|
|
526
|
-
import { CesiumMapToolbar } from './libs/CesiumMapToolbar';
|
|
527
|
-
|
|
528
|
-
const toolbar = new CesiumMapToolbar(
|
|
529
|
-
viewer,
|
|
530
|
-
container,
|
|
531
|
-
{
|
|
532
|
-
position: 'bottom-right',
|
|
533
|
-
buttonSize: 45,
|
|
534
|
-
buttonSpacing: 10,
|
|
535
|
-
backgroundColor: 'rgba(255, 255, 255, 0.95)',
|
|
536
|
-
borderColor: '#4285f4',
|
|
537
|
-
borderRadius: 8,
|
|
538
|
-
zIndex: 1000
|
|
539
|
-
},
|
|
540
|
-
{
|
|
541
|
-
search: {
|
|
542
|
-
onSearch: async (query: string) => {
|
|
543
|
-
// 实现搜索逻辑
|
|
544
|
-
return await searchAPI(query);
|
|
545
|
-
},
|
|
546
|
-
onSelect: (result) => {
|
|
547
|
-
console.log('选择了:', result);
|
|
548
|
-
}
|
|
549
|
-
},
|
|
550
|
-
measurement: {
|
|
551
|
-
onDistanceComplete: (positions, distance) => {
|
|
552
|
-
console.log('测距完成:', distance);
|
|
553
|
-
},
|
|
554
|
-
onAreaComplete: (positions, area) => {
|
|
555
|
-
console.log('测面积完成:', area);
|
|
556
|
-
},
|
|
557
|
-
onClear: () => {
|
|
558
|
-
console.log('清除测量');
|
|
559
|
-
}
|
|
560
|
-
},
|
|
561
|
-
zoom: {
|
|
562
|
-
onZoomIn: (before, after) => {
|
|
563
|
-
console.log('放大:', before, '->', after);
|
|
564
|
-
},
|
|
565
|
-
onZoomOut: (before, after) => {
|
|
566
|
-
console.log('缩小:', before, '->', after);
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
},
|
|
570
|
-
{
|
|
571
|
-
longitude: 120.2052342,
|
|
572
|
-
latitude: 30.2489634,
|
|
573
|
-
height: 1000
|
|
574
|
-
}
|
|
575
|
-
);
|
|
195
|
+
```css
|
|
196
|
+
:root {
|
|
197
|
+
--toolbar-bg-color: #ffffff;
|
|
198
|
+
--toolbar-border-color: #e0e0e0;
|
|
199
|
+
--toolbar-button-size: 40px;
|
|
200
|
+
--toolbar-button-spacing: 8px;
|
|
201
|
+
--toolbar-border-radius: 4px;
|
|
202
|
+
}
|
|
576
203
|
```
|
|
577
204
|
|
|
578
|
-
|
|
205
|
+
## 示例项目
|
|
579
206
|
|
|
580
|
-
|
|
581
|
-
toolbar.setInitialCenter({
|
|
582
|
-
longitude: 116.3974,
|
|
583
|
-
latitude: 39.9093,
|
|
584
|
-
height: 1000
|
|
585
|
-
});
|
|
586
|
-
```
|
|
207
|
+
### 基本使用示例
|
|
587
208
|
|
|
588
|
-
|
|
209
|
+
```bash
|
|
210
|
+
# 克隆项目
|
|
211
|
+
git clone https://github.com/your-username/vmap-cesium-toolbar.git
|
|
212
|
+
cd vmap-cesium-toolbar
|
|
589
213
|
|
|
590
|
-
|
|
591
|
-
|
|
214
|
+
# 查看基本示例
|
|
215
|
+
cd examples/basic-usage
|
|
216
|
+
# 在浏览器中打开 index.html
|
|
592
217
|
```
|
|
593
218
|
|
|
594
|
-
###
|
|
219
|
+
### Vue 3 示例
|
|
595
220
|
|
|
596
|
-
|
|
221
|
+
```bash
|
|
222
|
+
cd examples/vue3-usage
|
|
223
|
+
npm install
|
|
224
|
+
npm run dev
|
|
225
|
+
```
|
|
597
226
|
|
|
598
|
-
|
|
599
|
-
2. **天地图-三维** (3d)
|
|
600
|
-
3. **天地图-影像** (imagery) - 默认
|
|
601
|
-
4. **天地图-地形** (terrain)
|
|
227
|
+
## API 文档
|
|
602
228
|
|
|
603
|
-
|
|
229
|
+
详细的API文档请参考:
|
|
604
230
|
|
|
605
|
-
|
|
231
|
+
- [CesiumMapToolbar API](./doc/CesiumMapToolbar_API.md)
|
|
232
|
+
- [CesiumMapHelper API](./doc/CesiumMapHelper_API.md)
|
|
233
|
+
- [CesiumMapLoader API](./doc/CesiumMapLoader_API.md)
|
|
606
234
|
|
|
607
|
-
|
|
608
|
-
/* 自定义工具栏样式 */
|
|
609
|
-
.cesium-map-toolbar {
|
|
610
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
|
|
611
|
-
border: 2px solid #fff !important;
|
|
612
|
-
}
|
|
235
|
+
## 依赖要求
|
|
613
236
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
color: #fff !important;
|
|
617
|
-
border: 1px solid rgba(255, 255, 255, 0.3) !important;
|
|
618
|
-
}
|
|
237
|
+
- **Cesium**: ^1.100.0
|
|
238
|
+
- **Vue**: ^3.0.0 (可选,用于Vue项目)
|
|
619
239
|
|
|
620
|
-
|
|
621
|
-
background: rgba(255, 255, 255, 0.3) !important;
|
|
622
|
-
transform: scale(1.1) !important;
|
|
623
|
-
}
|
|
624
|
-
```
|
|
240
|
+
## 浏览器支持
|
|
625
241
|
|
|
626
|
-
|
|
242
|
+
- Chrome 60+
|
|
243
|
+
- Firefox 55+
|
|
244
|
+
- Safari 12+
|
|
245
|
+
- Edge 79+
|
|
627
246
|
|
|
628
|
-
|
|
629
|
-
2. **地图类型**:天地图需要有效的token,请替换示例中的 `your_token`
|
|
630
|
-
3. **全屏功能**:需要用户手势触发,某些浏览器可能有限制
|
|
631
|
-
4. **测量精度**:面积计算使用球面几何,适合大范围测量
|
|
632
|
-
5. **内存管理**:记得在组件销毁时调用 `destroy()` 方法
|
|
247
|
+
## 许可证
|
|
633
248
|
|
|
634
|
-
|
|
249
|
+
MIT License
|
|
635
250
|
|
|
636
|
-
##
|
|
251
|
+
## 贡献
|
|
637
252
|
|
|
638
|
-
|
|
639
|
-
import { initCesium } from './libs/CesiumMapLoader';
|
|
640
|
-
import { CesiumMapToolbar } from './libs/CesiumMapToolbar';
|
|
641
|
-
import DrawHelper from './libs/CesiumMapHelper';
|
|
642
|
-
|
|
643
|
-
// 初始化地图
|
|
644
|
-
const { viewer, initialCenter } = await initCesium("cesiumContainer", {
|
|
645
|
-
terrain: Cesium.Terrain.fromWorldTerrain(),
|
|
646
|
-
animation: false,
|
|
647
|
-
baseLayerPicker: false,
|
|
648
|
-
fullscreenButton: false,
|
|
649
|
-
geocoder: false,
|
|
650
|
-
homeButton: false,
|
|
651
|
-
infoBox: false,
|
|
652
|
-
sceneModePicker: false,
|
|
653
|
-
selectionIndicator: false,
|
|
654
|
-
timeline: false,
|
|
655
|
-
navigationHelpButton: false,
|
|
656
|
-
scene3DOnly: false,
|
|
657
|
-
});
|
|
658
|
-
|
|
659
|
-
// 创建绘图助手
|
|
660
|
-
const drawHelper = new DrawHelper(viewer);
|
|
661
|
-
drawHelper.onDrawEnd((entity) => {
|
|
662
|
-
console.log('绘制完成:', entity);
|
|
663
|
-
});
|
|
664
|
-
|
|
665
|
-
// 创建工具栏
|
|
666
|
-
const container = document.getElementById("cesiumContainer");
|
|
667
|
-
const toolbar = new CesiumMapToolbar(
|
|
668
|
-
viewer,
|
|
669
|
-
container,
|
|
670
|
-
{
|
|
671
|
-
position: 'bottom-right',
|
|
672
|
-
buttonSize: 45,
|
|
673
|
-
backgroundColor: 'rgba(255, 255, 255, 0.95)',
|
|
674
|
-
},
|
|
675
|
-
{
|
|
676
|
-
search: {
|
|
677
|
-
onSearch: async (query) => {
|
|
678
|
-
// 实现搜索逻辑
|
|
679
|
-
return [];
|
|
680
|
-
},
|
|
681
|
-
onSelect: (result) => {
|
|
682
|
-
console.log('定位到:', result.name);
|
|
683
|
-
}
|
|
684
|
-
},
|
|
685
|
-
measurement: {
|
|
686
|
-
onDistanceComplete: (positions, distance) => {
|
|
687
|
-
console.log(`测距完成,总距离: ${distance.toFixed(2)} 米`);
|
|
688
|
-
},
|
|
689
|
-
onAreaComplete: (positions, area) => {
|
|
690
|
-
console.log(`测面积完成,面积: ${area.toFixed(2)} 平方公里`);
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
},
|
|
694
|
-
initialCenter
|
|
695
|
-
);
|
|
253
|
+
欢迎提交 Issue 和 Pull Request!
|
|
696
254
|
|
|
697
|
-
|
|
698
|
-
function cleanup() {
|
|
699
|
-
toolbar.destroy();
|
|
700
|
-
drawHelper.destroy();
|
|
701
|
-
}
|
|
702
|
-
```
|
|
255
|
+
## 更新日志
|
|
703
256
|
|
|
704
|
-
|
|
257
|
+
### v0.0.1-beta.2
|
|
705
258
|
|
|
706
|
-
|
|
259
|
+
- 新增高度测量功能
|
|
260
|
+
- 优化标签显示逻辑
|
|
261
|
+
- 修复3D模式下标签位置问题
|
|
262
|
+
- 改进绘制工具的用户体验
|
|
707
263
|
|
|
708
|
-
###
|
|
264
|
+
### v0.0.1-beta.1
|
|
709
265
|
|
|
710
266
|
- 初始版本发布
|
|
711
|
-
-
|
|
712
|
-
-
|
|
713
|
-
-
|
|
714
|
-
- 可配置的样式选项
|
|
715
|
-
- 完善的错误处理和资源管理
|
|
267
|
+
- 基础工具栏功能
|
|
268
|
+
- 搜索、测量、绘制功能
|
|
269
|
+
- Vue 3 支持
|