deeptwins-engine-3d 0.1.49 → 0.1.51

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.
Files changed (34) hide show
  1. package/dist/esm/constant.d.ts +9 -0
  2. package/dist/esm/constant.js +16 -0
  3. package/dist/esm/drawCommand/index.d.ts +2 -0
  4. package/dist/esm/drawCommand/index.js +2 -0
  5. package/dist/esm/drawCommand/viewShed/Event.d.ts +42 -0
  6. package/dist/esm/drawCommand/viewShed/Event.js +142 -0
  7. package/dist/esm/drawCommand/viewShed/RectangularSensorPrimitive.d.ts +266 -0
  8. package/dist/esm/drawCommand/viewShed/RectangularSensorPrimitive.js +1271 -0
  9. package/dist/esm/drawCommand/viewShed/ViewShadowPrimitive.d.ts +29 -0
  10. package/dist/esm/drawCommand/viewShed/ViewShadowPrimitive.js +66 -0
  11. package/dist/esm/drawCommand/viewShed/ViewShedAnalyserLayer.d.ts +182 -0
  12. package/dist/esm/drawCommand/viewShed/ViewShedAnalyserLayer.js +466 -0
  13. package/dist/esm/drawCommand/viewShed/ViewShedMap.d.ts +22 -0
  14. package/dist/esm/drawCommand/viewShed/ViewShedMap.js +1238 -0
  15. package/dist/esm/drawCommand/viewShed/config.d.ts +20 -0
  16. package/dist/esm/drawCommand/viewShed/config.js +21 -0
  17. package/dist/esm/graphicLayer/BaseSource.d.ts +1 -1
  18. package/dist/esm/graphicLayer/PolygonGroundPrimitiveImageMaterialInstance.js +1 -1
  19. package/dist/esm/index.d.ts +2 -1
  20. package/dist/esm/index.js +7 -4
  21. package/dist/esm/map/Map.d.ts +1 -0
  22. package/dist/esm/map/Map.js +6 -1
  23. package/dist/esm/material/primitive/ImageMaterialAppearance.d.ts +1 -1
  24. package/dist/esm/tool/BuildClampedPolygonGrid.d.ts +2 -9
  25. package/dist/esm/tool/BuildClampedPolygonGrid.js +200 -73
  26. package/dist/esm/tool/utils.d.ts +1 -0
  27. package/dist/esm/tool/utils.js +21 -0
  28. package/dist/esm/videoFusion/BaseVideo.js +17 -17
  29. package/dist/esm/videoFusion/VideoProject.d.ts +5 -5
  30. package/dist/esm/videoFusion/VideoProject.js +174 -184
  31. package/dist/esm/videoFusion/VideoTexture.d.ts +5 -1
  32. package/dist/esm/videoFusion/VideoTexture.js +133 -46
  33. package/dist/umd/deeptwins-engine-3d.min.js +1 -1
  34. package/package.json +4 -2
@@ -0,0 +1,466 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
4
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
5
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
7
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8
+ import * as Cesium from 'deeptwins-cesium';
9
+ import RectangularSensorPrimitive from "./RectangularSensorPrimitive";
10
+ import ViewShadowPrimitive from "./ViewShadowPrimitive";
11
+ import ViewshedMap from "./ViewShedMap";
12
+ var ViewShedAnalyserLayer = /*#__PURE__*/function () {
13
+ function ViewShedAnalyserLayer(viewer, options) {
14
+ _classCallCheck(this, ViewShedAnalyserLayer);
15
+ /**
16
+ * <p>视域分析</p>
17
+ * @extends BaseAnalyser
18
+ * @param {Cesium.Viewer} viewer viewer对象
19
+ * @param {Object} options 具有以下属性
20
+ * @param {Cesium.Cartesian3} options.observe 观察位置,即视点所在的位置
21
+ * @param {Cesium.Cartesian3} options.viewPosition 相机方法向视锥机远裁剪面的交点
22
+ * @param {Number} [options.far] 远裁剪面的距离
23
+ * @param {Number} [options.near=0.001*options.far] 近裁剪面的距离
24
+ * @param {Number} [options.aspectRatio=1.5] 视锥宽高比
25
+ * @param {Number} [options.fov=120] 视锥体的水面夹角,单位度
26
+ *
27
+ */
28
+ _defineProperty(this, "viewer", void 0);
29
+ _defineProperty(this, "options", void 0);
30
+ _defineProperty(this, "_observe", void 0);
31
+ _defineProperty(this, "_viewPosition", void 0);
32
+ _defineProperty(this, "_debug", void 0);
33
+ _defineProperty(this, "_far", void 0);
34
+ _defineProperty(this, "_near", void 0);
35
+ _defineProperty(this, "_aspectRatio", void 0);
36
+ _defineProperty(this, "_fov", void 0);
37
+ _defineProperty(this, "_direction", void 0);
38
+ _defineProperty(this, "_up", void 0);
39
+ _defineProperty(this, "_heading", void 0);
40
+ _defineProperty(this, "_pitch", void 0);
41
+ _defineProperty(this, "_roll", void 0);
42
+ _defineProperty(this, "_frustum", void 0);
43
+ _defineProperty(this, "_viewCamera", void 0);
44
+ _defineProperty(this, "_shadowMap", void 0);
45
+ _defineProperty(this, "preAnalysis", void 0);
46
+ _defineProperty(this, "preDo", void 0);
47
+ _defineProperty(this, "postAnalysis", void 0);
48
+ _defineProperty(this, "postDo", void 0);
49
+ if (!(viewer && viewer instanceof Cesium.Viewer)) {
50
+ throw new Error('viewer is required.');
51
+ }
52
+ this.viewer = viewer;
53
+ options = Cesium.defaultValue(options, {});
54
+ this.options = options;
55
+ if (!Cesium.defined(options.observe)) {
56
+ throw new Error('parameter options.observe is required.');
57
+ }
58
+ if (!Cesium.defined(options.viewPosition)) {
59
+ throw new Error('parameter options.viewPosition is required.');
60
+ }
61
+ this._observe = options.observe;
62
+ this._viewPosition = options.viewPosition;
63
+ this._debug = Cesium.defaultValue(options.debug, false);
64
+ this._far = Cesium.defaultValue(options.far, Cesium.Cartesian3.distance(this._observe, this._viewPosition));
65
+ this._near = Cesium.defaultValue(options.near, 0.001 * this._far);
66
+ this._aspectRatio = Cesium.defaultValue(options.aspectRatio, 1.5);
67
+ this._fov = Cesium.defaultValue(options.fov, 120);
68
+ var direction = Cesium.Cartesian3.subtract(this._viewPosition, this._observe, new Cesium.Cartesian3());
69
+ this._direction = Cesium.Cartesian3.normalize(direction, direction);
70
+ this._up = viewer.scene.mapProjection.ellipsoid.geodeticSurfaceNormal(this._observe, new Cesium.Cartesian3());
71
+ this._heading = undefined;
72
+ this._pitch = undefined;
73
+ this._roll = undefined;
74
+ }
75
+ /**
76
+ * 视锥体
77
+ * @type {any}
78
+ */
79
+ _createClass(ViewShedAnalyserLayer, [{
80
+ key: "frustum",
81
+ get: function get() {
82
+ return this._frustum;
83
+ }
84
+ /**
85
+ * 是否显示辅助调试的元素
86
+ * @type {Boolean}
87
+ */
88
+ }, {
89
+ key: "debug",
90
+ get: function get() {
91
+ return this._debug;
92
+ },
93
+ set: function set(val) {
94
+ if (this._debug !== val) {
95
+ this._debug = val;
96
+ this._frustum.show = val;
97
+ // this.createOrUpdateFrustum();
98
+ }
99
+ }
100
+ /**
101
+ * 观察位置,即相机所在的位置
102
+ * @type {Cesium.Cartesian3}
103
+ */
104
+ }, {
105
+ key: "observe",
106
+ get: function get() {
107
+ return this._observe;
108
+ },
109
+ set: function set(val) {
110
+ if (this._observe !== val) {
111
+ this._observe = val;
112
+ this.update();
113
+ }
114
+ }
115
+ /**
116
+ * 相机方法向视锥机远裁剪面的交点
117
+ * @type {Cesium.Cartesian3}
118
+ */
119
+ }, {
120
+ key: "viewPosition",
121
+ get: function get() {
122
+ return this._viewPosition;
123
+ },
124
+ set: function set(val) {
125
+ if (this._viewPosition !== val) {
126
+ this._viewPosition = val;
127
+ this.update();
128
+ }
129
+ }
130
+
131
+ /**
132
+ * 相机方向,由viewPosition和observe决定
133
+ * @readonly
134
+ * @type {Cesium.Cartesian3}
135
+ */
136
+ }, {
137
+ key: "direction",
138
+ get: function get() {
139
+ return this._direction;
140
+ }
141
+ /**
142
+ * 相机远裁剪面到视点的距离
143
+ * @type {Number}
144
+ */
145
+ }, {
146
+ key: "far",
147
+ get: function get() {
148
+ return this._far;
149
+ },
150
+ set: function set(val) {
151
+ if (this._far !== val) {
152
+ this._far = val;
153
+ this.update();
154
+ }
155
+ }
156
+ /**
157
+ * 相机近裁剪面到视点的距离
158
+ * @type {Number}
159
+ */
160
+ }, {
161
+ key: "near",
162
+ get: function get() {
163
+ return this._near;
164
+ },
165
+ set: function set(val) {
166
+ if (this._near !== val) {
167
+ this._near = val;
168
+ this.update();
169
+ }
170
+ }
171
+ /**
172
+ * 视锥体水平夹角,单位:度
173
+ * @type {Number}
174
+ */
175
+ }, {
176
+ key: "fov",
177
+ get: function get() {
178
+ return this._fov;
179
+ },
180
+ set: function set(val) {
181
+ if (this._fov !== val) {
182
+ this._fov = val;
183
+ this.update();
184
+ }
185
+ }
186
+ /**
187
+ * 视锥宽高比
188
+ * @type {Number}
189
+ */
190
+ }, {
191
+ key: "aspectRatio",
192
+ get: function get() {
193
+ return this._aspectRatio;
194
+ },
195
+ set: function set(val) {
196
+ if (this._aspectRatio !== val) {
197
+ this._aspectRatio = val;
198
+ this.update();
199
+ }
200
+ }
201
+ /**
202
+ * 旋转角,单位:度
203
+ * @type {Number}
204
+ * @readonly
205
+ */
206
+ }, {
207
+ key: "heading",
208
+ get: function get() {
209
+ this.updateHeadingPitchRoll();
210
+ return Cesium.Math.toDegrees(this._heading);
211
+ }
212
+ /**
213
+ * 俯仰角,单位:度
214
+ * @type {Number}
215
+ * @readonly
216
+ */
217
+ }, {
218
+ key: "pitch",
219
+ get: function get() {
220
+ this.updateHeadingPitchRoll();
221
+ return Cesium.Math.toDegrees(this._pitch);
222
+ }
223
+ /**
224
+ * 翻滚角,单位:度
225
+ * @type {Number}
226
+ * @readonly
227
+ */
228
+ }, {
229
+ key: "roll",
230
+ get: function get() {
231
+ this.updateHeadingPitchRoll();
232
+ return Cesium.Math.toDegrees(this._roll);
233
+ }
234
+ }, {
235
+ key: "update",
236
+ value: function update() {
237
+ this.createOrupdateCamera();
238
+ this.createOrUpdateFrustum();
239
+ this.createOrUpdateShadowMap();
240
+ }
241
+ /**
242
+ * 更新视角
243
+ */
244
+ }, {
245
+ key: "updateHeadingPitchRoll",
246
+ value: function updateHeadingPitchRoll() {
247
+ var oldTransform = Cesium.Matrix4.clone(this._viewCamera._transform, new Cesium.Matrix4());
248
+ var transform = Cesium.Transforms.eastNorthUpToFixedFrame(this._viewCamera.positionWC, this._viewCamera._projection.ellipsoid);
249
+ this._viewCamera._setTransform(transform);
250
+ this._pitch = this.getPitch(this._viewCamera.direction);
251
+ this._heading = this.getHeading(this._viewCamera.direction, this._viewCamera.up);
252
+ this._roll = this.getRoll(this._viewCamera.direction, this._viewCamera.up, this._viewCamera.right);
253
+ this._viewCamera._setTransform(oldTransform);
254
+ }
255
+
256
+ /**
257
+ * 获取俯仰角
258
+ * @param direction: Cesium.Cartesian3
259
+ * @returns {number}
260
+ */
261
+ }, {
262
+ key: "getPitch",
263
+ value: function getPitch(direction) {
264
+ return Cesium.Math.PI_OVER_TWO - Cesium.Math.acosClamped(direction.z);
265
+ }
266
+
267
+ /**
268
+ * 获取偏航角
269
+ * @param direction: Cesium.Cartesian3
270
+ * @param up: Cesium.Cartesian3
271
+ * @returns {number}
272
+ */
273
+ }, {
274
+ key: "getHeading",
275
+ value: function getHeading(direction, up) {
276
+ var heading;
277
+ if (!Cesium.Math.equalsEpsilon(Math.abs(direction.z), 1.0, Cesium.Math.EPSILON3)) {
278
+ heading = Math.atan2(direction.y, direction.x) - Cesium.Math.PI_OVER_TWO;
279
+ } else {
280
+ heading = Math.atan2(up.y, up.x) - Cesium.Math.PI_OVER_TWO;
281
+ }
282
+ return Cesium.Math.TWO_PI - Cesium.Math.zeroToTwoPi(heading);
283
+ }
284
+
285
+ /**
286
+ * 获取横滚角
287
+ * @param direction: Cesium.Cartesian3
288
+ * @param up: Cesium.Cartesian3
289
+ * @param right: Cesium.Cartesian3
290
+ * @returns {number}
291
+ */
292
+ }, {
293
+ key: "getRoll",
294
+ value: function getRoll(direction, up, right) {
295
+ var roll = 0.0;
296
+ if (!Cesium.Math.equalsEpsilon(Math.abs(direction.z), 1.0, Cesium.Math.EPSILON3)) {
297
+ roll = Math.atan2(-right.z, up.z);
298
+ roll = Cesium.Math.zeroToTwoPi(roll + Cesium.Math.TWO_PI);
299
+ }
300
+ return roll;
301
+ }
302
+ /**
303
+ * 创建或更新相机
304
+ */
305
+ }, {
306
+ key: "createOrupdateCamera",
307
+ value: function createOrupdateCamera() {
308
+ if (!Cesium.defined(this._viewCamera)) {
309
+ this._viewCamera = new Cesium.Camera(this.viewer.scene);
310
+ }
311
+ this._viewCamera.frustum.near = this._near;
312
+ this._viewCamera.frustum.far = this._far;
313
+ this._viewCamera.frustum.aspectRatio = this._aspectRatio;
314
+ this._viewCamera.frustum.fov = Cesium.Math.toRadians(this.fov);
315
+ this._viewCamera.direction = Cesium.Cartesian3.normalize(this._direction, this._viewCamera.direction);
316
+ this._viewCamera.position = Cesium.Cartesian3.clone(this._observe, this._viewCamera.position);
317
+ this._viewCamera.up = this._up;
318
+ this._viewCamera.right = Cesium.Cartesian3.cross(this._viewCamera.up, this._viewCamera.direction, new Cesium.Cartesian3());
319
+ if (!Cesium.defined(this._heading) && !Cesium.defined(this._pitch) && !Cesium.defined(this._roll)) {
320
+ this.updateHeadingPitchRoll();
321
+ }
322
+ }
323
+ /**
324
+ * 创建或更新视锥体
325
+ * @returns {void}
326
+ */
327
+ }, {
328
+ key: "createOrUpdateFrustum",
329
+ value: function createOrUpdateFrustum() {
330
+ var position = this._viewCamera.positionWC;
331
+ var rotation = new Cesium.Matrix3();
332
+ var up = this._up;
333
+ var direction = this.direction;
334
+ var right = Cesium.Cartesian3.cross(up, direction, new Cesium.Cartesian3());
335
+ Cesium.Matrix3.setColumn(rotation, 0, right, rotation);
336
+ Cesium.Matrix3.setColumn(rotation, 1, up, rotation);
337
+ Cesium.Matrix3.setColumn(rotation, 2, direction, rotation);
338
+ var orientation = Cesium.Quaternion.fromRotationMatrix(rotation, new Cesium.Quaternion());
339
+ var modelMatrix = Cesium.Matrix4.fromTranslationQuaternionRotationScale(position, orientation, new Cesium.Cartesian3(1, 1, 1), new Cesium.Matrix4());
340
+ if (this._frustum) {
341
+ this._frustum.modelMatrix = modelMatrix;
342
+ this._frustum.xHalfAngle = this._fov / 2;
343
+ this._frustum.yHalfAngle = this._fov / 2 / this._aspectRatio;
344
+ this._frustum.radius = this._far;
345
+ return;
346
+ }
347
+ this._frustum = new RectangularSensorPrimitive({
348
+ radius: this._far,
349
+ modelMatrix: modelMatrix,
350
+ xHalfAngle: this._fov / 2,
351
+ yHalfAngle: this._fov / 2 / this._aspectRatio,
352
+ showScanPlane: false,
353
+ showLateralSurfaces: false,
354
+ material: Cesium.Material.fromType(Cesium.Material.ColorType, {
355
+ color: Cesium.Color.AQUA.withAlpha(0.3)
356
+ }),
357
+ show: this.debug
358
+ });
359
+ this.viewer.scene.primitives.add(this._frustum);
360
+ }
361
+ /**
362
+ * 创建或更新Shadow
363
+ * @returns
364
+ */
365
+ }, {
366
+ key: "createOrUpdateShadowMap",
367
+ value: function createOrUpdateShadowMap() {
368
+ if (Cesium.defined(this._shadowMap)) {
369
+ this.viewer.scene.primitives.remove(this._shadowMap);
370
+ }
371
+ if (!(this._viewCamera && this._frustum._boundingSphereWC)) {
372
+ return;
373
+ }
374
+ this._frustum._boundingSphereWC;
375
+ var options = this.options;
376
+ options.lightCamera = this._viewCamera;
377
+ options.context = this.viewer.scene.context;
378
+ var shadowMap = new ViewshedMap(options);
379
+ var primitive = new ViewShadowPrimitive(shadowMap);
380
+ this._shadowMap = this.viewer.scene.primitives.add(primitive);
381
+ return this._shadowMap;
382
+ }
383
+
384
+ /**
385
+ * 相机向左旋转
386
+ * @param {Number} angle 旋转角度,单位:度
387
+ */
388
+ }, {
389
+ key: "rotateLeft",
390
+ value: function rotateLeft(angle) {
391
+ var oldTransform = Cesium.Matrix4.clone(this._viewCamera._transform, new Cesium.Matrix4());
392
+ var transform = Cesium.Transforms.eastNorthUpToFixedFrame(this._viewCamera.position, this._viewCamera._projection.ellipsoid);
393
+ this._viewCamera._setTransform(transform);
394
+ this._viewCamera.rotateLeft(Cesium.Math.toRadians(angle));
395
+ this._viewCamera._setTransform(oldTransform);
396
+ Cesium.Cartesian3.clone(this._viewCamera.directionWC, this._direction);
397
+ this.update();
398
+ }
399
+ /**
400
+ * 相机向右旋转
401
+ * @param {Number} angle 旋转角度,单位:度
402
+ */
403
+ }, {
404
+ key: "rotateRight",
405
+ value: function rotateRight(angle) {
406
+ this.rotateLeft(-angle);
407
+ }
408
+ /**
409
+ * 相机向下旋转
410
+ * @param {Number} angle 旋转角度,单位:度
411
+ */
412
+ }, {
413
+ key: "rotateDown",
414
+ value: function rotateDown(angle) {
415
+ var oldTransform = Cesium.Matrix4.clone(this._viewCamera._transform, new Cesium.Matrix4());
416
+ var transform = Cesium.Transforms.eastNorthUpToFixedFrame(this._viewCamera.position, this._viewCamera._projection.ellipsoid);
417
+ this._viewCamera._setTransform(transform);
418
+ this._viewCamera.rotateDown(Cesium.Math.toRadians(angle));
419
+ this._viewCamera._setTransform(oldTransform);
420
+ Cesium.Cartesian3.clone(this._viewCamera.directionWC, this._direction);
421
+ this.update();
422
+ }
423
+ /**
424
+ * 相机向上旋转
425
+ * @param {Number} angle 旋转角度,单位:度
426
+ */
427
+ }, {
428
+ key: "rotateUp",
429
+ value: function rotateUp(angle) {
430
+ this.rotateDown(-angle);
431
+ }
432
+ /**
433
+ * 执行视域分析
434
+ */
435
+ }, {
436
+ key: "do",
437
+ value: function _do() {
438
+ this.update();
439
+ }
440
+ /**
441
+ * 清除视域分析
442
+ */
443
+ }, {
444
+ key: "clear",
445
+ value: function clear() {
446
+ this.viewer.scene.primitives.remove(this._frustum);
447
+ this.viewer.scene.primitives.remove(this._shadowMap);
448
+ }
449
+ /**
450
+ * 销毁视域分析
451
+ */
452
+ }, {
453
+ key: "destroy",
454
+ value: function destroy() {
455
+ this.clear();
456
+ if (this._frustum && !this._frustum.isDestroyed()) {
457
+ this._frustum.destroy();
458
+ }
459
+ if (this._shadowMap && !this._shadowMap.isDestroyed()) {
460
+ this._shadowMap.destroy();
461
+ }
462
+ }
463
+ }]);
464
+ return ViewShedAnalyserLayer;
465
+ }();
466
+ export default ViewShedAnalyserLayer;
@@ -0,0 +1,22 @@
1
+ /**
2
+ *
3
+ * @alias ViewshedMap
4
+ * @param {Object} options An object containing the following properties:
5
+ * @param {Cesium.Camera} options.lightCamera A camera representing the light source.
6
+ * @param {Boolean} [options.enabled=true] Whether the shadow map is enabled.
7
+ * @param {Boolean} [options.isPointLight=false] Whether the light source is a point light. Point light shadows do not use cascades.
8
+ * @param {Boolean} [options.pointLightRadius=100.0] Radius of the point light.
9
+ * @param {Boolean} [options.cascadesEnabled=true] Use multiple shadow maps to cover different partitions of the view frustum.
10
+ * @param {Number} [options.numberOfCascades=4] The number of cascades to use for the shadow map. Supported values are one and four.
11
+ * @param {Number} [options.maximumDistance=5000.0] The maximum distance used for generating cascaded shadows. Lower values improve shadow quality.
12
+ * @param {Number} [options.size=2048] The width and height, in pixels, of each shadow map.
13
+ * @param {Boolean} [options.softShadows=false] Whether percentage-closer-filtering is enabled for producing softer shadows.
14
+ * @param {Number} [options.darkness=0.3] The shadow darkness.
15
+ * @param {Boolean} [options.normalOffset=true] Whether a normal bias is applied to shadows.
16
+ * @demo {@link https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Shadows.html|Cesium Sandcastle Shadows Demo}
17
+ */
18
+ declare function ViewshedMap(this: any, options: any): void;
19
+ declare namespace ViewshedMap {
20
+ var MAXIMUM_DISTANCE: number;
21
+ }
22
+ export default ViewshedMap;