@ino-cesium/common 0.0.1-5.beta.1

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 ADDED
@@ -0,0 +1,6 @@
1
+ # @ino-cesium/common 公共方法
2
+
3
+ 公共方法
4
+
5
+
6
+
@@ -0,0 +1,669 @@
1
+ import * as Cesium from 'cesium';
2
+ import { FeatureCollection, Point, GeoJsonProperties, LineString, Polygon } from 'geojson';
3
+
4
+ interface ISetViewByLngLatOptions {
5
+ lng: number;
6
+ lat: number;
7
+ height?: number;
8
+ viewer: Cesium.Viewer;
9
+ }
10
+ interface ISetViewByPositionOptions {
11
+ position: Cesium.Cartesian3;
12
+ viewer: Cesium.Viewer;
13
+ }
14
+ interface ICamearView {
15
+ destination: Cesium.Cartesian3;
16
+ orientation: {
17
+ heading: number;
18
+ pitch: number;
19
+ roll: number;
20
+ };
21
+ }
22
+ interface ICesiumEventListener {
23
+ LEFT_CLICK?: (e: any) => void;
24
+ LEFT_POSITION?: (e: any) => void;
25
+ MOVE_POSITION?: (e: any) => void;
26
+ PICK_FEATURE?: (pickModel: any, feature: any) => void;
27
+ MOVE_PICK_FEATURE?: (pickModel: any, feature: any) => void;
28
+ }
29
+ type DeepPartial<T> = {
30
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
31
+ };
32
+
33
+ interface ISkyBoxSources {
34
+ positiveX: string;
35
+ negativeX: string;
36
+ positiveY: string;
37
+ negativeY: string;
38
+ positiveZ: string;
39
+ negativeZ: string;
40
+ }
41
+ interface ISkyBoxOptions {
42
+ viewer: Cesium.Viewer;
43
+ sources?: ISkyBoxSources;
44
+ }
45
+ interface ISkyBoxOnGroundOptions extends ISkyBoxOptions {
46
+ height?: number;
47
+ }
48
+ interface IYawPitchRoll {
49
+ yaw: number;
50
+ pitch: number;
51
+ roll: number;
52
+ offsetYaw?: number;
53
+ }
54
+
55
+ type types_DeepPartial<T> = DeepPartial<T>;
56
+ type types_ICamearView = ICamearView;
57
+ type types_ICesiumEventListener = ICesiumEventListener;
58
+ type types_ISetViewByLngLatOptions = ISetViewByLngLatOptions;
59
+ type types_ISetViewByPositionOptions = ISetViewByPositionOptions;
60
+ type types_ISkyBoxOnGroundOptions = ISkyBoxOnGroundOptions;
61
+ type types_ISkyBoxOptions = ISkyBoxOptions;
62
+ type types_ISkyBoxSources = ISkyBoxSources;
63
+ type types_IYawPitchRoll = IYawPitchRoll;
64
+ declare namespace types {
65
+ export type { types_DeepPartial as DeepPartial, types_ICamearView as ICamearView, types_ICesiumEventListener as ICesiumEventListener, types_ISetViewByLngLatOptions as ISetViewByLngLatOptions, types_ISetViewByPositionOptions as ISetViewByPositionOptions, types_ISkyBoxOnGroundOptions as ISkyBoxOnGroundOptions, types_ISkyBoxOptions as ISkyBoxOptions, types_ISkyBoxSources as ISkyBoxSources, types_IYawPitchRoll as IYawPitchRoll };
66
+ }
67
+
68
+ /**
69
+ * 初始化Cesium
70
+ * @param eleId DOM元素ID
71
+ * @param options Viewer.ConstructorOptions
72
+ */
73
+ declare const initCesium: (eleId: string, options?: Cesium.Viewer.ConstructorOptions & {
74
+ token?: string;
75
+ }) => Cesium.Viewer;
76
+ /**
77
+ * 修改地球透明度
78
+ * @param value 0-1
79
+ * @param viewer
80
+ */
81
+ declare const setGlobeOpatity: (value: number, viewer: Cesium.Viewer) => void;
82
+ declare const setCesiumForAutoFitScale: (value: number) => void;
83
+ declare const getCesiumForAutoFitScale: () => number;
84
+ declare const DefaultViewerOptions: Cesium.Viewer.ConstructorOptions;
85
+
86
+ /**
87
+ * 设置中心点
88
+ * @param options.lng 精度
89
+ * @param options.lat 纬度
90
+ * @param options.height 高度
91
+ * @param options.viewer Cesium Viewer 实例
92
+ */
93
+ declare const setViewToLnglat: (options: ISetViewByLngLatOptions) => void;
94
+ /**
95
+ * 飞行至中心点
96
+ * @param options.lng 精度
97
+ * @param options.lat 纬度
98
+ * @param options.height 高度
99
+ * @param options.viewer Cesium Viewer 实例
100
+ */
101
+ declare const flyToLnglat: (options: ISetViewByLngLatOptions) => void;
102
+ /**
103
+ * 飞行至中心点
104
+ * @param options.lng 精度
105
+ * @param options.lat 纬度
106
+ * @param options.height 高度
107
+ * @param options.viewer Cesium Viewer 实例
108
+ */
109
+ declare const flyToPosition: (options: ISetViewByPositionOptions) => void;
110
+ /**
111
+ * 获取相机视图
112
+ * @param viewer
113
+ * @returns camearView
114
+ *
115
+ * camearView: {
116
+ * destination: Cartesian3,
117
+ * orientation: {
118
+ * heading: number
119
+ * pitch: number
120
+ * roll: number
121
+ * }
122
+ * }
123
+ */
124
+ declare function getCameraView(viewer: Cesium.Viewer): ICamearView;
125
+ /**
126
+ *
127
+ * @param camearView
128
+ * camearView: {
129
+ * destination: Cartesian3
130
+ * orientation: {
131
+ * heading: number
132
+ * pitch: number
133
+ * roll: number
134
+ * }
135
+ * }
136
+ * @param viewer
137
+ */
138
+ declare function flyToCameraView(camearView: ICamearView, viewer: Cesium.Viewer): void;
139
+ /**
140
+ * 飞行至数据源
141
+ * @param dataScourceId 数据源id
142
+ * @param viewer Cesium Viewer 实例
143
+ */
144
+ declare function flyToDataSource(dataScourceId: string, viewer: Cesium.Viewer): void;
145
+ /**
146
+ * 飞行至影像图层
147
+ * @param imagery 影像图层
148
+ * @param viewer Cesium Viewer 实例
149
+ */
150
+ declare function flyToImagery(imagery: Cesium.ImageryLayer, viewer: Cesium.Viewer): void;
151
+ /**
152
+ * 飞行至3dtile
153
+ * @param {}tileset 3dtile
154
+ * @param viewer Cesium Viewer 实例
155
+ */
156
+ declare function flyToCesium3DTile(tileset: Cesium.Cesium3DTileset, viewer: Cesium.Viewer): void;
157
+ /**
158
+ * 飞行至球体
159
+ * @param sphere 球体
160
+ * @param viewer
161
+ */
162
+ declare function flyToFromSphere(sphere: number[], viewer: Cesium.Viewer): void;
163
+ /**
164
+ * 闪烁模型
165
+ * @param model
166
+ */
167
+ declare function twinkleModel(model: any): void;
168
+
169
+ /**
170
+ * 初始化cesium事件
171
+ * @param viewer
172
+ * @param eventListener
173
+ */
174
+ declare const initCesiumEvent: (viewer: Cesium.Viewer, eventListener: ICesiumEventListener) => void;
175
+
176
+ declare const numberId: () => string;
177
+ declare const setInoCesiumBaseUrl: (url: string) => void;
178
+ declare const getInoCesiumBaseUrl: () => string;
179
+
180
+ declare class Tooltip {
181
+ static tooltip: Tooltip | null;
182
+ private _title;
183
+ private _div;
184
+ private _message;
185
+ constructor(viewer: Cesium.Viewer);
186
+ showAt(position: Cesium.Cartesian2, message: string): void;
187
+ setVisible(visible: boolean): void;
188
+ static createToolTip(viewer: Cesium.Viewer): Tooltip;
189
+ destroy(): void;
190
+ }
191
+
192
+ declare class Popup {
193
+ static popup: Popup | null;
194
+ private _div;
195
+ private viewer;
196
+ private offset;
197
+ private position;
198
+ constructor(viewer: Cesium.Viewer, element: HTMLElement, offset?: Cesium.Cartesian2);
199
+ showAt(position: Cesium.Cartesian3): void;
200
+ setVisible(visible: boolean): void;
201
+ renderPosition(): void;
202
+ static createPupup(viewer: Cesium.Viewer, element: HTMLElement, offset?: Cesium.Cartesian2): Popup;
203
+ destroy(): void;
204
+ }
205
+
206
+ /**
207
+ * 生成随机点输入geojosn 格式
208
+ * @param count 点数量
209
+ * @param lngRange 精度范围
210
+ * @param latRange 纬度范围
211
+ * @returns
212
+ */
213
+ declare const randomPointToGeoJson: (count: number, lngRange?: number[], latRange?: number[]) => FeatureCollection<Point, GeoJsonProperties>;
214
+ declare function randomColor(): string;
215
+ declare const randomPolylineToGeoJson: (count: number, lngRange?: number[], latRange?: number[]) => FeatureCollection<LineString, GeoJsonProperties>;
216
+ declare const randomPolygonToGeoJson: (count: number, lngRange?: number[], latRange?: number[]) => FeatureCollection<Polygon, GeoJsonProperties>;
217
+
218
+ /**
219
+ * 创建鹰眼图
220
+ * @param eleId
221
+ * @param mainViewer
222
+ */
223
+ declare const createEagleEye: (eleId: string, mainViewer: Cesium.Viewer) => {
224
+ viewer: Cesium.Viewer;
225
+ open: () => void;
226
+ close: () => void;
227
+ };
228
+
229
+ /**
230
+ * 计算空间距离
231
+ * @param {Cartesian3} start - 起始点
232
+ * @param {Cartesian3} end - 结束点
233
+ * @returns {number} - 两点之间的空间距离
234
+ */
235
+ declare const calcSpaceDistance: (start: Cesium.Cartesian3, end: Cesium.Cartesian3) => number;
236
+ /**
237
+ * 计算空间距离-多点
238
+ * @param {Cartesian3[]} positions - 点集
239
+ */
240
+ declare function calcSpaceDistances(positions: Cesium.Cartesian3[]): number;
241
+ /**
242
+ * 计算贴地距离-两点
243
+ * @param {Cartesian3} start - 起始点
244
+ * @param {Cartesian3} end - 结束点
245
+ * @param {ellipsoid} Cesium.Ellipsoid
246
+ */
247
+ declare function calcGeodesicDistance(start: Cesium.Cartesian3, end: Cesium.Cartesian3, ellipsoid?: Cesium.Ellipsoid): number;
248
+ /**
249
+ * 计算贴地距离-多点
250
+ * @param {Cartesian3[]} positions - 点集
251
+ * @returns {number} - 总距离
252
+ */
253
+ declare function calcGeodesicDistances(positions: Cesium.Cartesian3[]): number;
254
+ /**
255
+ * 计算质心
256
+ * turf Centroid
257
+ * @param {Cartesian3[]} positions - 点集
258
+ * @returns {Cartesian3} - 质心点
259
+ */
260
+ declare const calcPoistionCenter: (positions: Cesium.Cartesian3[]) => Cesium.Cartesian3;
261
+ /**
262
+ * 计算面积
263
+ * @param {Cartesian3[]} positions - 点集
264
+ * @returns {number} - 面积 单位:平方米
265
+ */
266
+ declare function calcArea(positions: Array<Cesium.Cartesian3>): number;
267
+ /**
268
+ * 计算三角形面积
269
+ * @param {Cartesian3} vertexA - 三角形顶点A
270
+ * @param {Cartesian3} vertexB - 三角形顶点B
271
+ * @param {Cartesian3} vertexC - 三角形顶点C
272
+ * @returns {number} - 三角形面积
273
+ */
274
+ declare const calcTriangleArea: (vertexA: Cesium.Cartesian3, vertexB: Cesium.Cartesian3, vertexC: Cesium.Cartesian3) => number;
275
+ /**
276
+ * 计算地形高度
277
+ * @param {TerrainProvider} terrainProvider - 地形提供者
278
+ * @param {Cartesian3[]} positions - 点集
279
+ * @returns {Cartesian3[]} - 地形高度点集
280
+ */
281
+ declare const calcTerrainHeightFromPositions: (terrainProvider: Cesium.TerrainProvider, positions: Cesium.Cartesian3[]) => Promise<Cesium.Cartographic[]>;
282
+ /**
283
+ * 计算场景高度
284
+ * @param {TerrainProvider} viewer
285
+ * @param {Cartesian3[]} positions - 点集
286
+ * @returns {Cartesian3[]} - 地形高度点集
287
+ */
288
+ declare const calcSceneHeightFromPositions: (viewer: Cesium.Viewer, positions: Cesium.Cartesian3[]) => Promise<Cesium.Cartesian3[]>;
289
+ /**
290
+ * 计算抛物线点集,
291
+ * @param {Cartesian3} startPoint - 开始节点
292
+ * @param {Cartesian3} endPoint - 结束节点
293
+ * @param {number} angularityFactor - 曲率
294
+ * @param {number} numOfSingleLine - 点集数量
295
+ * @returns {Cartesian3[]} - 点集
296
+ */
297
+ declare const clacPositionsForParabola: (startPoint: Cesium.Cartesian3, endPoint: Cesium.Cartesian3, angularityFactor: number, numOfSingleLine: number) => Cesium.Cartesian3[];
298
+ /**
299
+ * 计算缩放级别,
300
+ * 把当前相机高度转为缩放级别
301
+ * @param {Camera} camera - 相机
302
+ */
303
+ declare const calcZoomFromCameraHeight: (camera: Cesium.Camera) => number;
304
+ /**
305
+ * 计算相机高度
306
+ * 把缩放级别转为相机高度
307
+ * @无效
308
+ */
309
+ declare const calcCameraHeightFromZoom: (zoom: number) => number;
310
+ /**
311
+ * 计算插值点集
312
+ * @param positions Cartesian3[]
313
+ * @param number 插值点数量
314
+ * @returns Cartesian3[]
315
+ */
316
+ declare const calcLerpPosition: (positions: Cesium.Cartesian3[], number: number) => Cesium.Cartesian3[];
317
+
318
+ declare abstract class BasePrimitive<T> {
319
+ protected _primitive: CusPrimitive;
320
+ protected _promise: Promise<T>;
321
+ protected appearance: Cesium.Appearance | undefined;
322
+ protected geometryInstance: Cesium.Appearance | undefined;
323
+ protected drawCommand: any;
324
+ needUpdate: boolean;
325
+ constructor();
326
+ update(frameState: any): void;
327
+ then(onFulfilled?: any): Promise<T>;
328
+ catch(onRejected?: any): Promise<T>;
329
+ abstract getPrimitive(): CusPrimitive;
330
+ isDestroyed(): boolean;
331
+ destroy(): void;
332
+ }
333
+ type CusPrimitive = Cesium.Primitive | Cesium.GroundPrimitive | Cesium.PointPrimitiveCollection | Cesium.GroundPolylinePrimitive | Cesium.LabelCollection | Cesium.PrimitiveCollection | undefined;
334
+
335
+ /**
336
+ * 线材质基类
337
+ */
338
+ declare abstract class BaseMaterialProperty {
339
+ protected _definitionChanged: Cesium.Event<(...args: any[]) => void>;
340
+ get definitionChanged(): Cesium.Event<(...args: any[]) => void>;
341
+ get isConstant(): boolean;
342
+ abstract getType(): string;
343
+ abstract getValue(time: Cesium.JulianDate, result: any): any;
344
+ abstract equals(other: any): boolean;
345
+ abstract init(): void;
346
+ }
347
+
348
+ /**
349
+ * 把点集合转为顺时针
350
+ */
351
+ declare const makePositionsForClockwise: (positions: Cesium.Cartesian3[]) => Cesium.Cartesian3[];
352
+ /**
353
+ * 把点集合转为逆时针
354
+ */
355
+ declare const makePositionsForAntiClockwise: (positions: Cesium.Cartesian3[]) => Cesium.Cartesian3[];
356
+ /**
357
+ * 把笛卡尔坐标数组转为经纬度数组
358
+ */
359
+ declare const makePositionsToLnglats: (positions: Cesium.Cartesian3[]) => Cesium.Cartographic[];
360
+ /**
361
+ * 把笛卡尔坐标转为经纬度
362
+ */
363
+ declare const makePositiontoLnglat: (position: Cesium.Cartesian3) => Cesium.Cartographic;
364
+ /**
365
+ * 把经纬度数组转为笛卡尔坐标数组
366
+ */
367
+ declare const makeLnglatsToPositions: (lnglats: Cesium.Cartographic[]) => Cesium.Cartesian3[];
368
+ /**
369
+ * 把经纬度转为笛卡尔坐标
370
+ */
371
+ declare const makeLnglatToPosition: (lnglat: Cesium.Cartographic) => Cesium.Cartesian3;
372
+ /**
373
+ * 点集闭合成面 首位相接
374
+ */
375
+ declare const makePositionsClose: (positions: Cesium.Cartesian3[]) => Cesium.Cartesian3[];
376
+ /**
377
+ * 把经纬度数组转为点数据的geojson集合
378
+ * @param lnglats
379
+ * @returns GeoJSON.FeatureCollection
380
+ */
381
+ declare const makeLnglatsToPointGeojson: (lnglats: Cesium.Cartographic[]) => GeoJSON.FeatureCollection;
382
+ /**
383
+ * 把经纬度数组转为线数据的geojson集合
384
+ * @param lnglats
385
+ * @returns GeoJSON.FeatureCollection
386
+ */
387
+ declare const makeLnglatsToLineGeojson: (lnglats: Cesium.Cartographic[]) => GeoJSON.FeatureCollection;
388
+ /**
389
+ * 把经纬度数组转为面数据的geojson集合
390
+ * @param lnglats
391
+ * @returns GeoJSON.FeatureCollection
392
+ */
393
+ declare const makeLnglatsToPolygonGeojson: (lnglats: Cesium.Cartographic[]) => GeoJSON.FeatureCollection;
394
+ /**
395
+ * 把yawPitchRoll转为headingPitchRoll
396
+ * 航空中的参数和cesium中的参数有区别 角度转弧度
397
+ * @param yawPitchRoll
398
+ */
399
+ declare const makeYawPitchRollToHeadingPitchRoll: (yawPitchRoll: IYawPitchRoll) => {
400
+ heading: number;
401
+ pitch: number;
402
+ roll: number;
403
+ };
404
+
405
+ /**
406
+ * 创建天空盒
407
+ * @param options
408
+ */
409
+ declare const createSkyBox: (options: ISkyBoxOptions) => Cesium.SkyBox;
410
+ /**
411
+ * 创建近地天空盒
412
+ * @param options
413
+ */
414
+ declare const createSkyBoxOnGround: (options: ISkyBoxOnGroundOptions) => void;
415
+
416
+ /**
417
+ * 漫游控制器
418
+ * @param viewer Cesium Viewer
419
+ *
420
+ */
421
+ declare const createRoamHandler: (viewer: Cesium.Viewer) => IRoamHandler;
422
+ interface IRoamOptions {
423
+ /**
424
+ * 唯一id, 默认为随机生成
425
+ */
426
+ id?: string;
427
+ /**
428
+ * 漫游路径
429
+ */
430
+ positions: Cesium.Cartesian3[];
431
+ /**
432
+ * 飞行器参数
433
+ */
434
+ flyParams: {
435
+ /**
436
+ * 漫游时间数组 以时间计算飞行速度 数组长度必须与漫游路径点数组长度相同
437
+ * 与spped二者取其一 时间优先
438
+ */
439
+ times?: number[];
440
+ /**
441
+ * 漫游速度 公里/每小时
442
+ * 与times二者取其一
443
+ */
444
+ speed?: number;
445
+ /**
446
+ * 飞行器的heading pitch roll
447
+ */
448
+ hpr?: IRoamItemHPR[];
449
+ };
450
+ /**
451
+ * 漫游目标 可跟随物体和漫游路线设置
452
+ */
453
+ entity: Cesium.Entity;
454
+ /**
455
+ * 是否循环
456
+ */
457
+ loop: boolean;
458
+ /**
459
+ * 漫游目标属性信息
460
+ */
461
+ attrs?: any;
462
+ }
463
+ /**
464
+ * 漫游控制器
465
+ */
466
+ interface IRoamHandler {
467
+ set: (options: IRoamOptions) => IRoamItem;
468
+ /**
469
+ * 漫游目标跟随
470
+ * @param roamItem
471
+ * @param isLock 是否锁定视角
472
+ */
473
+ tracked: (roamItem: IRoamItem, isLock: boolean) => void;
474
+ /**
475
+ * 通过entityId 设置漫游目标跟随
476
+ * @param id
477
+ * @param isLock 是否锁定视角
478
+ */
479
+ trackedByEntityId: (id: string, isLock: boolean) => void;
480
+ /**
481
+ * 停止漫游目标跟随
482
+ */
483
+ stopTracked: () => void;
484
+ remove: (roamItem: IRoamItem) => void;
485
+ frameRoam: (roamItem: IRoamItem, time: Cesium.JulianDate) => void;
486
+ removeAll: () => void;
487
+ Event: IRoamEvent;
488
+ lockCameraView: (roamItem: IRoamItem) => void;
489
+ /**
490
+ * 更新漫游目标姿态
491
+ * @param roamItem
492
+ * @param flyAttitude
493
+ */
494
+ updateRoamAttitude: (roamItem: IRoamItem, flyAttitude: FlyAttitude) => void;
495
+ }
496
+ interface IRoamItem extends IRoamOptions {
497
+ /**
498
+ * 漫游路径
499
+ */
500
+ property: Cesium.SampledPositionProperty;
501
+ /**
502
+ * 开始时间
503
+ */
504
+ startTime: Cesium.JulianDate | undefined;
505
+ /**
506
+ * 结束时间
507
+ */
508
+ stopTime: Cesium.JulianDate | undefined;
509
+ /**
510
+ * 漫游状态
511
+ */
512
+ status: RoamStatus;
513
+ }
514
+ interface IRoaming {
515
+ time: Cesium.JulianDate;
516
+ position: Cesium.Cartesian3 | undefined;
517
+ }
518
+ interface IRoamEvent {
519
+ /**
520
+ * 漫游开始
521
+ * @param roamItem
522
+ */
523
+ start?: (roamItem: IRoamItem) => void;
524
+ /**
525
+ * 漫游重新开始 调用reStart方法时或触发循环式触发
526
+ * @param roamItem
527
+ */
528
+ reStart?: (roamItem: IRoamItem) => void;
529
+ /**
530
+ * 漫游中
531
+ * @param roamItem
532
+ * @param roaming
533
+ */
534
+ roaming?: (roamItem: IRoamItem, roaming: IRoaming) => void;
535
+ /**
536
+ * 漫游结束
537
+ * @param roamItem
538
+ */
539
+ end?: (roamItem: IRoamItem) => void;
540
+ }
541
+ declare enum FlyAttitude {
542
+ UP = "UP",
543
+ DOWN = "DOWN",
544
+ LEFT = "left",
545
+ RIGHT = "right",
546
+ FRONT = "front",
547
+ BACK = "back"
548
+ }
549
+ declare enum RoamStatus {
550
+ END = "END",
551
+ START = "START",
552
+ ROAMING = "ROAMING"
553
+ }
554
+ interface IRoamItemHPR {
555
+ time: number;
556
+ heading: number;
557
+ pitch: number;
558
+ roll: number;
559
+ }
560
+
561
+ declare const createBottomStatusBar: (options: IBottomStatusBarOptions) => void;
562
+ interface IBottomStatusBarOptions {
563
+ viewer: Cesium.Viewer;
564
+ /**
565
+ * 显示方向角、俯仰角、侧翻角
566
+ */
567
+ hpr?: boolean;
568
+ /**
569
+ * 开启点击复制
570
+ * 复制当前中心经纬度和高度,相机视角
571
+ */
572
+ clickCopy?: boolean;
573
+ }
574
+
575
+ declare const createOpenAnim: (options: IOpenAnimOptions) => Promise<unknown>;
576
+ interface IOpenAnimOptions {
577
+ viewer: Cesium.Viewer;
578
+ center: {
579
+ lat: number;
580
+ lng: number;
581
+ height: number;
582
+ };
583
+ }
584
+
585
+ /**
586
+ * 网格8个顶点生成盒子面
587
+ * @param cartesianVertices 8个顶点
588
+ * @param color 网格颜色
589
+ * @param gridId 网格id
590
+ */
591
+ declare const makeGridToInstanceForBox: (cartesianVertices: any, color: Cesium.Color, gridId: string) => Cesium.GeometryInstance;
592
+ /**
593
+ * 网格8个顶点生成盒子边线
594
+ * @param cartesianVertices 8个顶点
595
+ * @param color 网格颜色
596
+ * @param gridId 网格id
597
+ */
598
+ declare const makeGridToInstanceForLine: (cartesianVertices: any, color: Cesium.Color, gridId: string) => Cesium.GeometryInstance;
599
+ /**
600
+ * 使用顶点极值创建盒子的八个点
601
+ * @param maxPoint
602
+ * @param minPoint
603
+ */
604
+ declare const makeGridFromElevationExtrema: (maxPoint: Cesium.Cartographic, minPoint: Cesium.Cartographic) => Cesium.Cartesian3[];
605
+ /**
606
+ * 使用底面和高度创建网格
607
+ * @param topLeft
608
+ * @param topRight
609
+ * @param bottomRight
610
+ * @param bottomLeft
611
+ * @param minHeight
612
+ * @param maxHeight
613
+ */
614
+ declare const mekeGridPolygonAndHeight: (topLeft: number, topRight: number, bottomRight: number, bottomLeft: number, minHeight: number, maxHeight: number) => Cesium.Cartesian3[];
615
+
616
+ /**
617
+ * 坐标转换工具库 - 实现了WGS84、GCJ02(火星坐标)和BD09(百度坐标)之间的相互转换
618
+ */
619
+ /**
620
+ * 坐标点接口定义
621
+ */
622
+ interface CoordinatePoint {
623
+ lng: number;
624
+ lat: number;
625
+ }
626
+ /**
627
+ * 坐标转换工具类
628
+ */
629
+ declare class CoordinateTransformer {
630
+ /**
631
+ * WGS84坐标转换为GCJ02坐标
632
+ * @param point WGS84坐标点
633
+ * @returns GCJ02坐标点
634
+ */
635
+ static wgs84ToGcj02(point: CoordinatePoint): CoordinatePoint;
636
+ /**
637
+ * GCJ02坐标转换为WGS84坐标
638
+ * @param point GCJ02坐标点
639
+ * @returns WGS84坐标点
640
+ */
641
+ static gcj02ToWgs84(point: CoordinatePoint): CoordinatePoint;
642
+ /**
643
+ * GCJ02坐标转换为BD09坐标
644
+ * @param point GCJ02坐标点
645
+ * @returns BD09坐标点
646
+ */
647
+ static gcj02ToBd09(point: CoordinatePoint): CoordinatePoint;
648
+ /**
649
+ * BD09坐标转换为GCJ02坐标
650
+ * @param point BD09坐标点
651
+ * @returns GCJ02坐标点
652
+ */
653
+ static bd09ToGcj02(point: CoordinatePoint): CoordinatePoint;
654
+ /**
655
+ * BD09坐标转换为WGS84坐标
656
+ * @param point BD09坐标点
657
+ * @returns WGS84坐标点
658
+ */
659
+ static bd09ToWgs84(point: CoordinatePoint): CoordinatePoint;
660
+ /**
661
+ * WGS84坐标转换为BD09坐标
662
+ * @param point WGS84坐标点
663
+ * @returns BD09坐标点
664
+ */
665
+ static wgs84ToBd09(point: CoordinatePoint): CoordinatePoint;
666
+ }
667
+
668
+ export { BaseMaterialProperty, BasePrimitive, types as Common, CoordinateTransformer, DefaultViewerOptions, FlyAttitude, Popup, RoamStatus, Tooltip, calcArea, calcCameraHeightFromZoom, calcGeodesicDistance, calcGeodesicDistances, calcLerpPosition, calcPoistionCenter, calcSceneHeightFromPositions, calcSpaceDistance, calcSpaceDistances, calcTerrainHeightFromPositions, calcTriangleArea, calcZoomFromCameraHeight, clacPositionsForParabola, createBottomStatusBar, createEagleEye, createOpenAnim, createRoamHandler, createSkyBox, createSkyBoxOnGround, flyToCameraView, flyToCesium3DTile, flyToDataSource, flyToFromSphere, flyToImagery, flyToLnglat, flyToPosition, getCameraView, getCesiumForAutoFitScale, getInoCesiumBaseUrl, initCesium, initCesiumEvent, makeGridFromElevationExtrema, makeGridToInstanceForBox, makeGridToInstanceForLine, makeLnglatToPosition, makeLnglatsToLineGeojson, makeLnglatsToPointGeojson, makeLnglatsToPolygonGeojson, makeLnglatsToPositions, makePositionsClose, makePositionsForAntiClockwise, makePositionsForClockwise, makePositionsToLnglats, makePositiontoLnglat, makeYawPitchRollToHeadingPitchRoll, mekeGridPolygonAndHeight, numberId, randomColor, randomPointToGeoJson, randomPolygonToGeoJson, randomPolylineToGeoJson, setCesiumForAutoFitScale, setGlobeOpatity, setInoCesiumBaseUrl, setViewToLnglat, twinkleModel };
669
+ export type { DeepPartial, ICamearView, ICesiumEventListener, IOpenAnimOptions, IRoamEvent, IRoamHandler, IRoamItem, IRoamItemHPR, IRoaming, ISetViewByLngLatOptions, ISetViewByPositionOptions, ISkyBoxOnGroundOptions, ISkyBoxOptions, ISkyBoxSources, IYawPitchRoll };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import*as e from"cesium";import{polygon as t,centroid as n}from"@turf/turf";var i=Object.freeze({__proto__:null});let o=1;const r=(t,n)=>{n||(n={token:""}),n.token&&(e.Ion.defaultAccessToken=n.token);const i={...l,...n},o=new e.Viewer(t,i);return o.scene.postProcessStages.fxaa.enabled=!0,o.scene.msaaSamples=8,console.log("%c%s","color: GREEN; font-size: 20px",`Cesium ${e.VERSION}`),o},s=(e,t)=>{t.scene.globe.translucency.enabled=!0,t.scene.globe.translucency.frontFaceAlpha=e,t.scene.globe.translucency.backFaceAlpha=e},a=e=>{o=e},c=()=>o,l={animation:!1,baseLayerPicker:!1,fullscreenButton:!1,geocoder:!1,homeButton:!1,infoBox:!0,sceneModePicker:!1,selectionIndicator:!1,timeline:!1,navigationHelpButton:!1,scene3DOnly:!0,navigation:!1,navigationInstructionsInitiallyVisible:!1,showRenderLoopErrors:!0,orderIndependentTranslucency:!1,contextOptions:{webgl:{alpha:!0}}},d=t=>{const{lng:n,lat:i,height:o,viewer:r}=t;r.scene.camera.setView({destination:e.Cartesian3.fromDegrees(n,i,o||1e4)})},p=t=>{const{lng:n,lat:i,height:o,viewer:r}=t;r.scene.camera.flyTo({destination:e.Cartesian3.fromDegrees(n,i,o||1e4)})},h=e=>{const{position:t,viewer:n}=e;n.scene.camera.flyTo({destination:t})};function u(t){const n=t.camera.heading,i=t.camera.pitch,o=t.camera.roll;return{destination:new e.Cartesian3(t.camera.position.x,t.camera.position.y,t.camera.position.z),orientation:{heading:n,pitch:i,roll:o}}}function m(e,t){e&&t.scene.camera.flyTo({...e})}function g(e,t){const n=t.dataSources.getByName(e);n.length>0&&t.flyTo(n[0])}function y(e,t){e&&t.flyTo(e)}function f(e,t){t.flyTo(e)}function v(t,n){const i=new e.Cartesian3(t[0],t[1],t[2]),o=new e.BoundingSphere(i,t[3]);n.camera.flyToBoundingSphere(o,{offset:new e.HeadingPitchRange(3.5,-.5,200),duration:2})}function C(e){e.show=!1,setTimeout(()=>{e.show=!0,setTimeout(()=>{e.show=!1,setTimeout(()=>{e.show=!0},300)},300)},300)}const M=(t,n)=>{const i=t.scene,o=new e.ScreenSpaceEventHandler(i.canvas);o.setInputAction(e=>{if(n.LEFT_POSITION){const o=i.pickPosition(e.position);_(e.position,o,n.LEFT_POSITION,t)}n.PICK_FEATURE&&w(t,e.position,n.PICK_FEATURE),t._element.style.cursor="default"},e.ScreenSpaceEventType.LEFT_CLICK),o.setInputAction(e=>{if(n.MOVE_POSITION){const o=i.pickPosition(e.endPosition);_(e.endPosition,o,n.MOVE_POSITION,t)}n.MOVE_PICK_FEATURE&&w(t,e.endPosition,n.MOVE_PICK_FEATURE)},e.ScreenSpaceEventType.MOUSE_MOVE)},w=(t,n,i)=>{const o=t.scene.pick(n),r={};if(o){if(t._element.style.cursor="pointer",o instanceof e.Cesium3DTileFeature){o.getPropertyIds().forEach(e=>{r[e]=o.getProperty(e)})}else o.id instanceof e.Entity?t._element.style.cursor="pointer":o.primitive&&Object.assign(r,o.primitive.properties);i(o,r)}else i(void 0,r)},_=(t,n,i,o)=>{n||(n=e.Cartesian3.fromDegrees(0,0,0));const r=e.Cartographic.fromCartesian(n);i({windowPosition:t,position:n,lnglat:{lng:e.Math.toDegrees(r.longitude),lat:e.Math.toDegrees(r.latitude),height:r.height},cameraView:u(o)})},b=()=>`${Date.now()}${Math.round(9999999999*Math.random()+1)}`;let T="/ino-cesium";const E=e=>{T=e},x=()=>T;class P{static tooltip;_title;_div;_message;constructor(e){const t=document.createElement("DIV");t.id="tooltip",t.className="twipsy right";const n=document.createElement("DIV");n.className="twipsy-inner",t.appendChild(n),this._div=t,this._title=n,this._message="";const i=e._element.getElementsByClassName("cesium-widget")[0];if(!i)throw new Error("The cesium-widget element has not finished loading yet, so the popup cannot be created!");i.appendChild(t),t.onmousemove=e=>{this.showAt({x:e.clientX,y:e.clientY},this._message)}}showAt(e,t){e&&t&&(this.setVisible(!0),this._title.innerHTML=t,this._div.style.left=`${e.x+10}px`,this._div.style.top=e.y-this._div.clientHeight/2+"px",this._message=t)}setVisible(e){this._div.style.display=e?"block":"none"}static createToolTip(e){return P.tooltip||(P.tooltip=new P(e)),P.tooltip}destroy(){P.tooltip&&(this._div&&this._div.parentNode.removeChild(this._div),P.tooltip=null)}}class D{static popup;_div;viewer;offset=new e.Cartesian2(140,150);position=e.Cartesian3.ZERO;constructor(e,t,n){this.viewer=e,n&&(this.offset=n),this._div=t,this._div.style.position="absolute",this._div.style.left="0",this._div.style.top="0",this._div.style.display="none";const i=e._element.getElementsByClassName("cesium-widget")[0];if(!i)throw new Error("The cesium-widget element has not finished loading yet, so the popup cannot be created!");i.appendChild(t),this.renderPosition()}showAt(e){this.position=e,e&&this.setVisible(!0)}setVisible(e){this._div.style.display=e?"block":"none"}renderPosition(){this.viewer.scene.postRender.addEventListener(()=>{if(!this.position.equals(e.Cartesian3.ZERO)){const e=this.viewer.scene.cartesianToCanvasCoordinates(this.position);this._div.style.left=e.x-this.offset.x+"px",this._div.style.top=e.y-this.offset.y+"px"}})}static createPupup(e,t,n){return D.popup||(D.popup=new D(e,t,n)),D.popup}destroy(){D.popup&&(this._div&&this._div.parentNode.removeChild(this._div),D.popup=null)}}const S=(e,t=[-180,180],n=[-90,90])=>{const i=[];for(let o=0;o<e;o++){const e=I(t),o=I(n);i.push({type:"Feature",geometry:{type:"Point",coordinates:[e,o]},properties:{}})}return{type:"FeatureCollection",features:i}};function I(e){const[t,n]=e;return Math.random()*(n-t)+t}function k(){return`rgba(${Math.round(255*Math.random())},${Math.round(255*Math.random())},${Math.round(255*Math.random())},${Math.random()})`}const R=(e,t=[-180,180],n=[-90,90])=>{const i=[];for(let o=0;o<e;o++){const e=Math.floor(I([3,10])),o=[];for(let i=0;i<e;i++){const e=I(t),i=I(n);o.push([e,i])}i.push({type:"Feature",geometry:{type:"LineString",coordinates:o},properties:{}})}return{type:"FeatureCollection",features:i}},O=(e,t=[-180,180],n=[-90,90])=>{const i=[];for(let o=0;o<e;o++){const e=A(t,n);i.push({type:"Feature",geometry:{type:"Polygon",coordinates:[e]}})}return{type:"FeatureCollection",features:i}};function A(e,t){const n=Math.floor(I([3,10])),i=I(e),o=I(t),r=I([1,5]),s=[];for(let e=0;e<n;e++){const t=e/n*2*Math.PI,a=I([.8*r,r]),c=i+a*Math.cos(t),l=o+a*Math.sin(t);s.push([c,l])}return s.push(s[0]),s}const F=(t,n)=>{let i=!1;const o=new e.Viewer(t,{...l,scene3DOnly:!1});o.scene.mode=2;const r=o.scene.screenSpaceCameraController;r.enableRotate=!1,r.enableTranslate=!1,r.enableZoom=!1,r.enableTilt=!1,r.enableLook=!1,n.entities.add({position:e.Cartesian3.fromDegrees(0,0),label:{text:new e.CallbackProperty(()=>(s(),""),!0)}});const s=function(){i||o.camera.flyTo({destination:n.camera.position,orientation:{heading:n.camera.heading,pitch:n.camera.pitch,roll:n.camera.roll},duration:0})};return{viewer:o,open:()=>{i=!1},close:()=>{i=!0}}},N=(t,n)=>{const i=e.Cartographic.fromCartesian(t),o=e.Cartographic.fromCartesian(n),r=new e.EllipsoidGeodesic;r.setEndPoints(i,o);let s=r.surfaceDistance;return s=Math.sqrt(s**2+(o.height-i.height)**2),s};function L(e){let t=0;return e.forEach((n,i)=>{if(i===e.length-1)return;const o=N(n,e[i+1]);t+=o}),t}function B(t,n,i){const{EllipsoidGeodesic:o,Ellipsoid:r}=e;return new o((i=i||r.WGS84).cartesianToCartographic(t),i.cartesianToCartographic(n)).surfaceDistance}function V(e){let t=0;return e.forEach((n,i)=>{if(i===e.length-1)return;const o=B(n,e[i+1]);t+=o}),t}const $=i=>{if(i.length<4)return e.BoundingSphere.fromPoints(i).center;const o=t([i.map(e=>[e.x,e.y])]),r=e.BoundingSphere.fromPoints(i).center,s=n(o);return new e.Cartesian3(s.geometry.coordinates[0],s.geometry.coordinates[1],r.z)};function G(t){let n=0;const{CoplanarPolygonGeometry:i,VertexFormat:o,defined:r,Cartesian3:s}=e,a=i.createGeometry(i.fromPositions({positions:t,vertexFormat:o.POSITION_ONLY}));if(r(a)){const e=a.indices,t=a.attributes.position.values;for(let i=0;i<e.length;i+=3){const o=e[i],r=e[i+1],a=e[i+2];n+=H(s.unpack(t,3*o,{}),s.unpack(t,3*r,{}),s.unpack(t,3*a,{}))}}return n}const H=(t,n,i)=>{const{Cartesian3:o}=e,r=o.subtract(t,n,{}),s=o.subtract(i,n,{}),a=o.cross(r,s,r);return.5*o.magnitude(a)},z=async(t,n)=>{const i=n.map(t=>e.Cartographic.fromCartesian(t));return await e.sampleTerrainMostDetailed(t,i)},U=async(e,t)=>await e.scene.clampToHeightMostDetailed(t),X=(t,n,i,o)=>{const r=[],s=e.Cartographic.fromCartesian(t),a=e.Cartographic.fromCartesian(n),c=180*s.longitude/Math.PI,l=180*s.latitude/Math.PI,d=180*a.longitude/Math.PI,p=180*a.latitude/Math.PI,h=Math.sqrt((c-d)*(c-d)+(l-p)*(l-p))*i,u=e.Cartesian3.clone(t),m=e.Cartesian3.clone(n),g=e.Cartesian3.distance(u,e.Cartesian3.ZERO),y=e.Cartesian3.distance(m,e.Cartesian3.ZERO);if(e.Cartesian3.normalize(u,u),e.Cartesian3.normalize(m,m),!e.Cartesian3.distance(u,m))return r;const f=e.Cartesian3.angleBetween(u,m);r.push(t);for(let t=1;t<o-1;t++){const n=1*t/(o-1),i=1-n,s=Math.sin(i*f)/Math.sin(f),a=Math.sin(n*f)/Math.sin(f),c=e.Cartesian3.multiplyByScalar(u,s,new e.Cartesian3),l=e.Cartesian3.multiplyByScalar(m,a,new e.Cartesian3);let d=e.Cartesian3.add(c,l,new e.Cartesian3);const p=n*Math.PI,v=g*i+y*n+Math.sin(p)*h;d=e.Cartesian3.multiplyByScalar(d,v,d),r.push(d)}return r.push(n),r},j=e=>{const t=e.positionCartographic.height,n=-40467.74;return Math.round(n+80955.31/(1+(t/91610.74)**7096758e-11))},q=e=>e,Y=(t,n)=>{const i=[];let o=0,r=0,s=0;const a=[];for(let n=0;n<t.length-1;++n)o+=e.Cartesian3.distance(t[n],t[n+1]);for(let n=0;n<t.length;n++)0===n?r=0:(s+=e.Cartesian3.distance(t[n-1],t[n]),r=s/o),i.push(r);const c=new e.LinearSpline({times:i,points:t});for(let e=0;e<=n;e++){const t=c.evaluate(e/n);a.push(t)}return a};class Z{_primitive;_promise;appearance;geometryInstance;drawCommand;needUpdate=!1;constructor(){this._primitive=void 0,this.appearance=void 0,this.geometryInstance=void 0,this._promise=null,this.drawCommand=null,this.needUpdate=!1}update(e){const t=this.getPrimitive();if(t){this._primitive=t;this._primitive.update(e)}}then(e=null){return this._promise?.then(e)}catch(e=null){return this._promise?.catch(e)}isDestroyed(){return!!this._primitive}destroy(){this._primitive=void 0}}class W{_definitionChanged=new e.Event;get definitionChanged(){return this._definitionChanged}get isConstant(){return!1}}const K=t=>{let n=0;for(let i=0;i<t.length;i++){const o=t[i],r=t[(i+1)%t.length];n+=e.Cartesian3.cross(o,r,new e.Cartesian3).z}return n>0?t.reverse():t},J=t=>{let n=0;for(let i=0;i<t.length;i++){const o=t[i],r=t[(i+1)%t.length];n+=e.Cartesian3.cross(o,r,new e.Cartesian3).z}return n<0?t.reverse():t},Q=e=>e.map(e=>ee(e)),ee=t=>{const n=e.Cartographic.fromCartesian(t);return{longitude:e.Math.toDegrees(n.longitude),latitude:e.Math.toDegrees(n.latitude),height:n.height}},te=t=>t.map(t=>e.Cartesian3.fromDegrees(t.longitude,t.latitude,t.height)),ne=t=>e.Cartesian3.fromDegrees(t.longitude,t.latitude,t.height),ie=e=>{const t=e[0],n=e[e.length-1];return t.x===n.x&&t.y===n.y&&t.z===n.z?e:[...e,e[0]]},oe=e=>{const t=[];return e.forEach(e=>{t.push({type:"Feature",geometry:{type:"Point",coordinates:[e.longitude,e.latitude]},properties:{height:e.height}})}),{type:"FeatureCollection",features:t}},re=e=>{const t=[];return e.forEach((n,i)=>{0!==i&&t.push({type:"Feature",geometry:{type:"LineString",coordinates:[[e[i-1].longitude,e[i-1].latitude],[n.longitude,n.latitude]]},properties:{height:n.height}})}),{type:"FeatureCollection",features:t}},se=e=>{const t=[];return t.push({type:"Feature",geometry:{type:"Polygon",coordinates:[e.map(e=>[e.longitude,e.latitude])]},properties:{heights:e.map(e=>e.height)}}),{type:"FeatureCollection",features:t}},ae=t=>({heading:e.Math.toRadians(t.yaw+(t.offsetYaw||0)),pitch:e.Math.toRadians(t.pitch),roll:e.Math.toRadians(t.roll)}),ce=e.BoxGeometry,le=e.Cartesian3,de=e.defaultValue,pe=e.defined,he=e.destroyObject,ue=e.DeveloperError,me=e.GeometryPipeline,ge=e.Matrix3,ye=e.Matrix4,fe=e.Transforms,ve=e.VertexFormat,Ce=e.BufferUsage,Me=e.CubeMap,we=e.DrawCommand,_e=e.loadCubeMap,be=e.RenderState,Te=e.VertexArray,Ee=e.BlendingState,xe=e.SceneMode,Pe=e.ShaderProgram,De=e.ShaderSource,Se=new ge;class Ie{constructor(t){e.defined(e.Matrix4.getRotation)||(e.Matrix4.getRotation=e.Matrix4.getMatrix3),this.sources=t.sources,this._sources=void 0,this.show=de(t.show,!0),this._command=new we({modelMatrix:ye.clone(ye.IDENTITY),owner:this}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0}update(e,t){const n=this;if(!this.show)return;if(e.mode!==xe.SCENE3D&&e.mode!==xe.MORPHING)return;if(!e.passes.render)return;const i=e.context;if(this._sources!==this.sources){this._sources=this.sources;const e=this.sources;if(!(pe(e.positiveX)&&pe(e.negativeX)&&pe(e.positiveY)&&pe(e.negativeY)&&pe(e.positiveZ)&&pe(e.negativeZ)))throw new ue("this.sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.");if(typeof e.positiveX!=typeof e.negativeX||typeof e.positiveX!=typeof e.positiveY||typeof e.positiveX!=typeof e.negativeY||typeof e.positiveX!=typeof e.positiveZ||typeof e.positiveX!=typeof e.negativeZ)throw new ue("this.sources properties must all be the same type.");"string"==typeof e.positiveX?_e(i,this._sources).then(e=>{n._cubeMap=n._cubeMap&&n._cubeMap.destroy(),n._cubeMap=e}):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new Me({context:i,source:e}))}const o=this._command;if(o.modelMatrix=fe.eastNorthUpToFixedFrame(e.camera._positionWC),!pe(o.vertexArray)){o.uniformMap={u_cubeMap:()=>n._cubeMap,u_rotateMatrix:()=>ye.getRotation(o.modelMatrix,Se)};const e=ce.createGeometry(ce.fromDimensions({dimensions:new le(2,2,2),vertexFormat:ve.POSITION_ONLY})),t=this._attributeLocations=me.createAttributeLocations(e);o.vertexArray=Te.fromGeometry({context:i,geometry:e,attributeLocations:t,bufferUsage:Ce._DRAW}),o.renderState=be.fromCache({blending:Ee.ALPHA_BLEND})}if(!pe(o.shaderProgram)||this._useHdr!==t){const e=new De({defines:[t?"HDR":""],sources:["precision highp float;\n\nuniform samplerCube u_cubeMap;\nin vec3 v_texCoord;\nout vec4 fragColor;\n\nvoid main() {\n vec4 color = texture(u_cubeMap, normalize(v_texCoord));\n fragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);\n}"]});o.shaderProgram=Pe.fromCache({context:i,vertexShaderSource:"#version 300 es\n\nprecision highp float;\n\nin vec3 position;\nout vec3 v_texCoord;\n\nuniform mat3 u_rotateMatrix;\n\nvoid main() {\n vec3 p = czm_viewRotation * u_rotateMatrix * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));\n gl_Position = czm_projection * vec4(p, 1.0);\n v_texCoord = position;\n}\n",fragmentShaderSource:e,attributeLocations:this._attributeLocations}),this._useHdr=t}return pe(this._cubeMap)?o:void 0}isDestroyed(){return!1}destroy(){const e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),he(this)}}const ke=t=>{const{viewer:n,sources:i}=t;return n.scene.skyBox=new e.SkyBox({sources:i}),n.scene.skyBox},Re=t=>{let{viewer:n,sources:i}=t;const o=t.height?t.height:225705,r=n.scene.skyBox;i||(i={positiveX:`${x()}/assets/ground-skybox/px.jpg`,negativeX:`${x()}/assets/ground-skybox/nx.jpg`,positiveY:`${x()}/assets/ground-skybox/py.jpg`,negativeY:`${x()}/assets/ground-skybox/ny.jpg`,positiveZ:`${x()}/assets/ground-skybox/pz.jpg`,negativeZ:`${x()}/assets/ground-skybox/nz.jpg`});const s=new Ie({sources:i});n.scene.postRender.addEventListener(()=>{const t=n.camera.position;e.Cartographic.fromCartesian(t).height<o?(n.scene.skyBox=s,n.scene.skyAtmosphere.show=!1):(n.scene.skyBox=r,n.scene.skyAtmosphere.show=!0)})},Oe=t=>{const n=[];let i,o;t.clock.shouldAnimate=!0;const r={},s=(e,n)=>{if(a(),e.entity.cylinder){const n=e.entity.cylinder;n.roamId=e.id,e.entity.cylinder=void 0,o=t.entities.add({position:e.property,cylinder:n})}t.trackedEntity=e.entity,n&&(i=e)},a=()=>{if(o){t.entities.remove(o);const e=n.find(e=>e.id===o.cylinder.roamId);e&&(e.entity.cylinder=o.cylinder),o=void 0}},c=()=>{t.trackedEntity=void 0,i=void 0,a()},l=e=>{t.trackedEntity?.id===e.entity.id&&c(),t.entities.remove(e.entity);const i=n.findIndex(t=>t.id===e.id);i>-1&&n.splice(i,1)},d=(e,t)=>{const n=e.property.getValue(t);if(n&&(e.status="ROAMING",m.roaming&&m.roaming(e,{time:t,position:n})),e.stopTime.secondsOfDay<t.secondsOfDay&&"END"!==e.status&&(e.status="END",m.end&&m.end(e),e.loop?p(e):c()),e.flyParams.hpr){const i=r[e.id].find(e=>e.time>t.secondsOfDay);i&&u(e,i,n)}},p=n=>{const{property:i,startTime:o,stopTime:r}=h(n);n.stopTime=r,n.startTime=o,n.property=i,n.flyParams.hpr||(n.entity.orientation=new e.VelocityOrientationProperty(i)),n.entity.position=i,n.status="START",t.clock.currentTime=o,t.clock.multiplier=1,m.reStart&&m.reStart(n)},h=t=>{const n=[],{positions:i,flyParams:o}=t,s=new e.SampledPositionProperty;let a=0;const c=e.JulianDate.now();let l=c.clone();return i.forEach((t,r)=>{let d=e.JulianDate.now();if(r){let n=0;if(o.speed){n=e.Cartesian3.distance(t,i[r-1])/(1e3*o.speed/3600)}o.times&&(n=(o.times[r]-o.times[r-1])/1e3),a+=n,d=e.JulianDate.addSeconds(c,a,new e.JulianDate)}else d=c;l=d,s.addSample(d,t),o.hpr&&n.push({time:d.secondsOfDay,heading:o.hpr[r].heading,pitch:o.hpr[r].pitch,roll:o.hpr[r].roll})}),r[t.id]=n,{property:s,startTime:c,stopTime:l}},u=(t,n,i)=>{if(!i)return;const{heading:o,pitch:r,roll:s}=n,a=new e.HeadingPitchRoll(o,r,s);t.entity.orientation=Transforms.headingPitchRollQuaternion(i,a)};t.scene.preRender.addEventListener((o,r)=>{if(n.forEach(e=>{d(e,r)}),!i)return;const s=i.entity.computeModelMatrix(t.clock.currentTime);s&&t.camera.lookAtTransform(s,new e.Cartesian3(...[-20,0,5]))});const m={};return{set:i=>{const{entity:o}=i;i.id=b(),t.entities.add(o);const{property:r,startTime:s,stopTime:a}=h(i);i.flyParams.hpr||(o.orientation=new e.VelocityOrientationProperty(r)),o.position=r;const c={...i,startTime:s,stopTime:a,property:r,status:"START"};return t.clock.currentTime=s,t.clock.multiplier=1,n.push(c),c.status="START",m.start&&m.start(c),c},tracked:s,stopTracked:c,remove:l,frameRoam:d,trackedByEntityId:(e,t)=>{const i=n.find(t=>t.entity.id===e);i&&s(i,t)},removeAll:()=>{n.forEach(e=>{l(e)}),n.length=0},Event:m,lockCameraView:e=>{i=e},updateRoamAttitude:(t,n)=>{"UP"!==n&&"DOWN"!==n||(t.entity.orientation=void 0),"front"!==n&&"back"!==n||(t.entity.orientation=new e.VelocityOrientationProperty(t.property))}}};var Ae=(e=>(e.UP="UP",e.DOWN="DOWN",e.LEFT="left",e.RIGHT="right",e.FRONT="front",e.BACK="back",e))(Ae||{}),Fe=(e=>(e.END="END",e.START="START",e.ROAMING="ROAMING",e))(Fe||{});let Ne=100,Le="",Be="0";const Ve=t=>{const{viewer:n}=t,i=document.createElement("div");i.className="bottom-status-bar";const o=document.createElement("div");o.className="scale-bar",o.innerHTML="";const r=document.createElement("div");r.className="scale-label",r.innerHTML="",o.appendChild(r),i.appendChild(o);const s=document.createElement("div");s.id="bottom-status-bar-camera",t.clickCopy&&(s.style.pointerEvents="auto",s.style.cursor="pointer"),i.appendChild(s),s.style.display="flex";const a=document.createElement("div"),c=document.createElement("div"),l=n._element.getElementsByClassName("cesium-widget")[0];if(!l)throw new Error("The cesium-widget element has not finished loading yet, so the popup cannot be created!");l.appendChild(i),M(n,{MOVE_POSITION(e){s.innerHTML=`\n 经度:${e.lnglat.lng.toFixed(6)}&nbsp;&nbsp;\n 纬度:${e.lnglat.lat.toFixed(6)}&nbsp;&nbsp;\n 高程:${e.lnglat.height.toFixed(2)}&nbsp;&nbsp;\n `,t.clickCopy&&u(n),s.appendChild(c),s.appendChild(a)}}),t.clickCopy&&document.addEventListener("click",e=>{e.target.id});let d=Date.now(),p=0;const h=()=>{requestAnimationFrame(()=>{if(p+=1,p>=30){const e=Date.now(),t=e-d,n=Math.round(1e3/(t/p));d=e,p=0,a.innerHTML=`${n} FPS`}t.hpr?c.innerHTML=`\n 方位角:${e.Math.toDegrees(n.camera.heading).toFixed(1)}°&nbsp;&nbsp;\n 俯仰角:${e.Math.toDegrees(n.camera.pitch).toFixed(1)}°&nbsp;&nbsp;\n 翻滚角:${e.Math.toDegrees(n.camera.roll).toFixed(1)}°&nbsp;&nbsp;\n `:c.innerHTML="",c.innerHTML+=`\n 视高:${n.camera.positionCartographic.height.toFixed(0)}m&nbsp;&nbsp;\n `;const i=$e(n);r.innerHTML=`${i.distanceLabel}`,h()})};h()},$e=t=>{const n=t.camera.positionCartographic.height.toFixed(0);if(n===Be)return{barWidth:Ne,distanceLabel:Le};Be=n;const i=new e.EllipsoidGeodesic,o=[1,2,3,5,10,20,30,50,100,200,300,500,1e3,2e3,3e3,5e3,1e4,2e4,3e4,5e4,1e5,2e5,3e5,5e5,1e6,2e6,3e6,5e6,1e7,2e7,3e7,5e7],r=t.scene,s=r.canvas.clientWidth,a=r.canvas.clientHeight,c=r.camera.getPickRay(new e.Cartesian2(s/2|0,a-1)),l=r.camera.getPickRay(new e.Cartesian2(1+s/2|0,a-1)),d=r.globe,p=d.pick(c,r),h=d.pick(l,r);if(!e.defined(p)||!e.defined(h))return{barWidth:Ne,distanceLabel:Le};const u=d.ellipsoid.cartesianToCartographic(p),m=d.ellipsoid.cartesianToCartographic(h);i.setEndPoints(u,m);const g=i.surfaceDistance;let y;for(let t=o.length-1;!e.defined(y)&&t>=0;--t)o[t]/g<100&&(y=o[t]);if(e.defined(y)){const e=y>=1e3?`${(y/1e3).toString()} km`:`${y.toString()} m`;Ne=y/g|0,Le=e}else Ne=0,Le="";return{barWidth:Ne,distanceLabel:Le}},Ge=t=>new Promise(n=>{const{viewer:i,center:o}=t;let r=o.lng,s=1,a=null;const c=t=>{null===a&&(a=t);r-=(t-a)/2e4*2,r<-180&&(r=180,s+=1),2===s&&r>o.lng?i.camera.flyTo({destination:e.Cartesian3.fromDegrees(o.lng,o.lat,3e7),duration:2,orientation:{heading:e.Math.toRadians(360),pitch:e.Math.toRadians(-90),roll:0},easingFunction:e.EasingFunction.LINEAR_NONE,complete:()=>{i.camera.flyTo({destination:e.Cartesian3.fromDegrees(o.lng,o.lat,o.height),duration:3,orientation:{heading:e.Math.toRadians(2.8),pitch:e.Math.toRadians(-90),roll:6.282253919167732},complete:()=>{n(!0)}})}}):(i.camera.setView({destination:e.Cartesian3.fromDegrees(r,o.lat,3e7),orientation:{heading:e.Math.toRadians(360),pitch:e.Math.toRadians(-90),roll:0}}),requestAnimationFrame(c))};requestAnimationFrame(c)}),He=(t,n,i)=>{const o=new Float64Array(24);for(let e=0;e<8;e++)o[3*e]=t[e].x,o[3*e+1]=t[e].y,o[3*e+2]=t[e].z;const r=new Uint16Array([0,1,2,0,2,3,4,6,5,4,7,6,0,4,1,1,4,5,1,5,2,2,5,6,2,6,3,3,6,7,3,7,0,0,7,4]),s={position:new e.GeometryAttribute({componentDatatype:e.ComponentDatatype.DOUBLE,componentsPerAttribute:3,values:o})},a=new e.Geometry({indices:r,attributes:s,primitiveType:e.PrimitiveType.TRIANGLES,boundingSphere:e.BoundingSphere.fromVertices(o)});return new e.GeometryInstance({geometry:a,attributes:{color:e.ColorGeometryInstanceAttribute.fromColor(n)},id:`${i}`})},ze=(t,n,i)=>{const[o,r,s,a,c,l,d,p]=t,h=[o,r,r,s,s,a,a,o,c,l,l,d,d,p,p,c,o,c,c,l,l,r,r,o,a,p,p,d,d,s,s,a,o,a,a,p,p,c,c,o,r,l,l,d,d,s,s,r];return new e.GeometryInstance({geometry:new e.PolylineGeometry({positions:h,width:2,vertexFormat:e.PolylineColorAppearance.VERTEX_FORMAT}),attributes:{color:e.ColorGeometryInstanceAttribute.fromColor(n)},id:`${i}`})},Ue=(t,n)=>[e.Cartesian3.fromDegrees(t.longitude,t.latitude,n.height),e.Cartesian3.fromDegrees(t.longitude,n.latitude,n.height),e.Cartesian3.fromDegrees(n.longitude,n.latitude,n.height),e.Cartesian3.fromDegrees(n.longitude,t.latitude,n.height),e.Cartesian3.fromDegrees(t.longitude,t.latitude,t.height),e.Cartesian3.fromDegrees(t.longitude,n.latitude,t.height),e.Cartesian3.fromDegrees(n.longitude,n.latitude,t.height),e.Cartesian3.fromDegrees(n.longitude,t.latitude,t.height)],Xe=(t,n,i,o,r,s)=>[e.Cartesian3.fromDegrees(t,t,r),e.Cartesian3.fromDegrees(n,n,r),e.Cartesian3.fromDegrees(i,i,r),e.Cartesian3.fromDegrees(o,o,r),e.Cartesian3.fromDegrees(t,t,s),e.Cartesian3.fromDegrees(n,n,s),e.Cartesian3.fromDegrees(i,i,s),e.Cartesian3.fromDegrees(o,o,s)],je=3e3*Math.PI/180,qe=Math.PI,Ye=6378245,Ze=.006693421622965943,We=(e,t)=>!(e>72.004&&e<137.8347&&t>.8293&&t<55.8271),Ke=(e,t)=>{let n=2*e-100+3*t+.2*t*t+.1*e*t+.2*Math.sqrt(Math.abs(e));return n+=2*(20*Math.sin(6*e*qe)+20*Math.sin(2*e*qe))/3,n+=2*(20*Math.sin(t*qe)+40*Math.sin(t/3*qe))/3,n+=2*(160*Math.sin(t/12*qe)+320*Math.sin(t*qe/30))/3,n},Je=(e,t)=>{let n=300+e+2*t+.1*e*e+.1*e*t+.1*Math.sqrt(Math.abs(e));return n+=2*(20*Math.sin(6*e*qe)+20*Math.sin(2*e*qe))/3,n+=2*(20*Math.sin(e*qe)+40*Math.sin(e/3*qe))/3,n+=2*(150*Math.sin(e/12*qe)+300*Math.sin(e/30*qe))/3,n},Qe=(e,t)=>{if(We(e,t))return[e,t];let n=Ke(e-105,t-35),i=Je(e-105,t-35);const o=t/180*qe;let r=Math.sin(o);r=1-Ze*r*r;const s=Math.sqrt(r);n=180*n/(Ye*(1-Ze)/(r*s)*qe),i=180*i/(Ye/s*Math.cos(o)*qe);return[e+i,t+n]},et=(e,t)=>{if(We(e,t))return[e,t];let n=Ke(e-105,t-35),i=Je(e-105,t-35);const o=t/180*qe;let r=Math.sin(o);r=1-Ze*r*r;const s=Math.sqrt(r);n=180*n/(Ye*(1-Ze)/(r*s)*qe),i=180*i/(Ye/s*Math.cos(o)*qe);return[2*e-(e+i),2*t-(t+n)]},tt=(e,t)=>{const n=e,i=t,o=Math.sqrt(n*n+i*i)+2e-5*Math.sin(i*je),r=Math.atan2(i,n)+3e-6*Math.cos(n*je);return[o*Math.cos(r)+.0065,o*Math.sin(r)+.006]},nt=(e,t)=>{const n=e-.0065,i=t-.006,o=Math.sqrt(n*n+i*i)-2e-5*Math.sin(i*je),r=Math.atan2(i,n)-3e-6*Math.cos(n*je);return[o*Math.cos(r),o*Math.sin(r)]};class it{static wgs84ToGcj02(e){const[t,n]=Qe(e.lng,e.lat);return{lng:t,lat:n}}static gcj02ToWgs84(e){const[t,n]=et(e.lng,e.lat);return{lng:t,lat:n}}static gcj02ToBd09(e){const[t,n]=tt(e.lng,e.lat);return{lng:t,lat:n}}static bd09ToGcj02(e){const[t,n]=nt(e.lng,e.lat);return{lng:t,lat:n}}static bd09ToWgs84(e){const[t,n]=((e,t)=>{const[n,i]=nt(e,t);return et(n,i)})(e.lng,e.lat);return{lng:t,lat:n}}static wgs84ToBd09(e){const[t,n]=((e,t)=>{const[n,i]=Qe(e,t);return tt(n,i)})(e.lng,e.lat);return{lng:t,lat:n}}}export{W as BaseMaterialProperty,Z as BasePrimitive,i as Common,it as CoordinateTransformer,l as DefaultViewerOptions,Ae as FlyAttitude,D as Popup,Fe as RoamStatus,P as Tooltip,G as calcArea,q as calcCameraHeightFromZoom,B as calcGeodesicDistance,V as calcGeodesicDistances,Y as calcLerpPosition,$ as calcPoistionCenter,U as calcSceneHeightFromPositions,N as calcSpaceDistance,L as calcSpaceDistances,z as calcTerrainHeightFromPositions,H as calcTriangleArea,j as calcZoomFromCameraHeight,X as clacPositionsForParabola,Ve as createBottomStatusBar,F as createEagleEye,Ge as createOpenAnim,Oe as createRoamHandler,ke as createSkyBox,Re as createSkyBoxOnGround,m as flyToCameraView,f as flyToCesium3DTile,g as flyToDataSource,v as flyToFromSphere,y as flyToImagery,p as flyToLnglat,h as flyToPosition,u as getCameraView,c as getCesiumForAutoFitScale,x as getInoCesiumBaseUrl,r as initCesium,M as initCesiumEvent,Ue as makeGridFromElevationExtrema,He as makeGridToInstanceForBox,ze as makeGridToInstanceForLine,ne as makeLnglatToPosition,re as makeLnglatsToLineGeojson,oe as makeLnglatsToPointGeojson,se as makeLnglatsToPolygonGeojson,te as makeLnglatsToPositions,ie as makePositionsClose,J as makePositionsForAntiClockwise,K as makePositionsForClockwise,Q as makePositionsToLnglats,ee as makePositiontoLnglat,ae as makeYawPitchRollToHeadingPitchRoll,Xe as mekeGridPolygonAndHeight,b as numberId,k as randomColor,S as randomPointToGeoJson,O as randomPolygonToGeoJson,R as randomPolylineToGeoJson,a as setCesiumForAutoFitScale,s as setGlobeOpatity,E as setInoCesiumBaseUrl,d as setViewToLnglat,C as twinkleModel};
@@ -0,0 +1,90 @@
1
+
2
+ .cesium-widget {
3
+ position: relative;
4
+ }
5
+ /**---------tooltip start---------**/
6
+ .twipsy {
7
+ display: none;
8
+ position: absolute;
9
+ visibility: visible;
10
+ max-width: 300px;
11
+ min-width: 100px;
12
+ padding: 5px;
13
+ font-size: 12px;
14
+ z-index: 1000;
15
+ }
16
+
17
+ .twipsy-inner {
18
+ padding: 3px 8px;
19
+ background-color: rgba(117, 117, 117, 0.8);
20
+ color: white;
21
+ text-align: left;
22
+ max-width: 300px;
23
+ text-decoration: none;
24
+ -webkit-border-radius: 4px;
25
+ -moz-border-radius: 4px;
26
+ border-radius: 4px;
27
+ border: 1px solid #aaa;
28
+ }
29
+
30
+ /**---------tooltip end---------**/
31
+
32
+ /**---------draw edit ui start---------**/
33
+ .draw-edit-ui {
34
+ position: fixed;
35
+ left: 0;
36
+ top: 0;
37
+ width: 132px;
38
+ height: 28px;
39
+ }
40
+
41
+ .draw-edit-icon {
42
+ width: 28px;
43
+ cursor: pointer;
44
+ background: rgba(255, 255, 255, 1);
45
+ border: 1px solid #1296db;
46
+ padding: 2px;
47
+ margin-right: 5px;
48
+ border-radius: 50%;
49
+ }
50
+
51
+ /**---------draw edit ui end---------**/
52
+
53
+ /**---------bottom status bar start---------**/
54
+ .bottom-status-bar {
55
+ position: absolute;
56
+ bottom: 0px;
57
+ display: flex;
58
+ width: 100%;
59
+ justify-content: space-between;
60
+ align-items: center;
61
+ z-index: 99999;
62
+ background: rgba(0, 0, 0, 0.4);
63
+ padding: 2px 8px;
64
+ pointer-events: none;
65
+ font-weight: bold;
66
+ height: 30px;
67
+
68
+ div {
69
+ color: #fff;
70
+ border-radius: 5px;
71
+ margin-right: 5px;
72
+ }
73
+ .scale-bar {
74
+ border: 2px solid #ffffff;
75
+ border-radius: 0px !important;
76
+ padding: 0 10px;
77
+ border-top: none !important;
78
+ height: 10px;
79
+ position: relative;
80
+ bottom: -6px;
81
+ display: flex;
82
+ justify-content: center;
83
+ }
84
+ .scale-label {
85
+ margin-top: -15px;
86
+ margin-right: 0px;
87
+ }
88
+ }
89
+
90
+ /**---------bottom status bar end---------**/
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@ino-cesium/common",
3
+ "type": "module",
4
+ "version": "0.0.15.beta.1",
5
+ "author": "koino",
6
+ "keywords": [
7
+ "cesium",
8
+ "ino-cesium",
9
+ "ino-cesium-common"
10
+ ],
11
+ "exports": {
12
+ ".": "./dist/index.js",
13
+ "./ino-css": "./dist/ino-cesium.css"
14
+ },
15
+ "typesVersions": {
16
+ "*": {
17
+ "*": [
18
+ "./src/*",
19
+ "./dist/*"
20
+ ]
21
+ }
22
+ },
23
+ "files": [
24
+ "dist/*.css",
25
+ "dist/*.d.ts",
26
+ "dist/*.js",
27
+ "README.MD"
28
+ ],
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "dependencies": {
33
+ "@turf/turf": "^7.0.0"
34
+ },
35
+ "peerDependencies": {
36
+ "cesium": "*"
37
+ },
38
+ "devDependencies": {
39
+ "@types/geojson": "^7946.0.14"
40
+ },
41
+ "types": "./dist/index.d.ts",
42
+ "scripts": {
43
+ "build": "rimraf dist && rollup -c",
44
+ "clean": "rimraf dist",
45
+ "release": "pnpm publish --no-git-checks --access public ",
46
+ "unpublish": "pnpm unpublish @ino-cesium/common --force "
47
+ }
48
+ }