bruce-cesium 5.7.9 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/dist/bruce-cesium.es5.js +32262 -0
  2. package/dist/bruce-cesium.es5.js.map +1 -0
  3. package/dist/bruce-cesium.umd.js +32186 -0
  4. package/dist/bruce-cesium.umd.js.map +1 -0
  5. package/dist/lib/bruce-cesium.js +76 -0
  6. package/dist/lib/bruce-cesium.js.map +1 -0
  7. package/dist/lib/internal/cesium-utils.js +109 -0
  8. package/dist/lib/internal/cesium-utils.js.map +1 -0
  9. package/dist/lib/internal/js-utils.js +22 -0
  10. package/dist/lib/internal/js-utils.js.map +1 -0
  11. package/dist/lib/internal/limited-log.js +17 -0
  12. package/dist/lib/internal/limited-log.js.map +1 -0
  13. package/dist/lib/rendering/cesium-animated-in-out.js +166 -0
  14. package/dist/lib/rendering/cesium-animated-in-out.js.map +1 -0
  15. package/dist/lib/rendering/cesium-animated-property.js +1111 -0
  16. package/dist/lib/rendering/cesium-animated-property.js.map +1 -0
  17. package/dist/lib/rendering/entity-gatherer.js +327 -0
  18. package/dist/lib/rendering/entity-gatherer.js.map +1 -0
  19. package/dist/lib/rendering/entity-render-engine-model3d.js +689 -0
  20. package/dist/lib/rendering/entity-render-engine-model3d.js.map +1 -0
  21. package/dist/lib/rendering/entity-render-engine-point.js +984 -0
  22. package/dist/lib/rendering/entity-render-engine-point.js.map +1 -0
  23. package/dist/lib/rendering/entity-render-engine-polygon.js +669 -0
  24. package/dist/lib/rendering/entity-render-engine-polygon.js.map +1 -0
  25. package/dist/lib/rendering/entity-render-engine-polyline.js +415 -0
  26. package/dist/lib/rendering/entity-render-engine-polyline.js.map +1 -0
  27. package/dist/lib/rendering/entity-render-engine.js +442 -0
  28. package/dist/lib/rendering/entity-render-engine.js.map +1 -0
  29. package/dist/lib/rendering/getters/batched-data-getter.js +91 -0
  30. package/dist/lib/rendering/getters/batched-data-getter.js.map +1 -0
  31. package/dist/lib/rendering/getters/entity-filter-getter.js +634 -0
  32. package/dist/lib/rendering/getters/entity-filter-getter.js.map +1 -0
  33. package/dist/lib/rendering/getters/entity-globe.js +172 -0
  34. package/dist/lib/rendering/getters/entity-globe.js.map +1 -0
  35. package/dist/lib/rendering/menu-item-creator.js +354 -0
  36. package/dist/lib/rendering/menu-item-creator.js.map +1 -0
  37. package/dist/lib/rendering/menu-item-manager.js +464 -0
  38. package/dist/lib/rendering/menu-item-manager.js.map +1 -0
  39. package/dist/lib/rendering/relation-render-engine.js +235 -0
  40. package/dist/lib/rendering/relation-render-engine.js.map +1 -0
  41. package/dist/lib/rendering/render-managers/common/cesium-parabola.js +368 -0
  42. package/dist/lib/rendering/render-managers/common/cesium-parabola.js.map +1 -0
  43. package/dist/lib/rendering/render-managers/common/entity-label.js +703 -0
  44. package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -0
  45. package/dist/lib/rendering/render-managers/common/point-clustering.js +826 -0
  46. package/dist/lib/rendering/render-managers/common/point-clustering.js.map +1 -0
  47. package/dist/lib/rendering/render-managers/common/shared-getters.js +187 -0
  48. package/dist/lib/rendering/render-managers/common/shared-getters.js.map +1 -0
  49. package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js +668 -0
  50. package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js.map +1 -0
  51. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js +92 -0
  52. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js.map +1 -0
  53. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +143 -0
  54. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +1 -0
  55. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +510 -0
  56. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -0
  57. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +717 -0
  58. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +1 -0
  59. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +999 -0
  60. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -0
  61. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +186 -0
  62. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -0
  63. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js +226 -0
  64. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js.map +1 -0
  65. package/dist/lib/rendering/render-managers/other/google-search-render-manager.js +430 -0
  66. package/dist/lib/rendering/render-managers/other/google-search-render-manager.js.map +1 -0
  67. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js +290 -0
  68. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js.map +1 -0
  69. package/dist/lib/rendering/render-managers/other/relations-render-manager.js +401 -0
  70. package/dist/lib/rendering/render-managers/other/relations-render-manager.js.map +1 -0
  71. package/dist/lib/rendering/render-managers/render-manager.js +276 -0
  72. package/dist/lib/rendering/render-managers/render-manager.js.map +1 -0
  73. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js +356 -0
  74. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js.map +1 -0
  75. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +861 -0
  76. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -0
  77. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +279 -0
  78. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +1 -0
  79. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js +104 -0
  80. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js.map +1 -0
  81. package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js +81 -0
  82. package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js.map +1 -0
  83. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +378 -0
  84. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -0
  85. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js +140 -0
  86. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js.map +1 -0
  87. package/dist/lib/rendering/tile-render-engine.js +1328 -0
  88. package/dist/lib/rendering/tile-render-engine.js.map +1 -0
  89. package/dist/lib/rendering/tileset-render-engine.js +588 -0
  90. package/dist/lib/rendering/tileset-render-engine.js.map +1 -0
  91. package/dist/lib/rendering/tileset-styler.js +590 -0
  92. package/dist/lib/rendering/tileset-styler.js.map +1 -0
  93. package/dist/lib/rendering/view-render-engine.js +1004 -0
  94. package/dist/lib/rendering/view-render-engine.js.map +1 -0
  95. package/dist/lib/rendering/visual-register-culler.js +676 -0
  96. package/dist/lib/rendering/visual-register-culler.js.map +1 -0
  97. package/dist/lib/rendering/visuals-register.js +1695 -0
  98. package/dist/lib/rendering/visuals-register.js.map +1 -0
  99. package/dist/lib/utils/cesium-entity-styler.js +914 -0
  100. package/dist/lib/utils/cesium-entity-styler.js.map +1 -0
  101. package/dist/lib/utils/drawing-utils.js +308 -0
  102. package/dist/lib/utils/drawing-utils.js.map +1 -0
  103. package/dist/lib/utils/entity-utils.js +1382 -0
  104. package/dist/lib/utils/entity-utils.js.map +1 -0
  105. package/dist/lib/utils/measure-utils.js +73 -0
  106. package/dist/lib/utils/measure-utils.js.map +1 -0
  107. package/dist/lib/utils/simplify-geometry.js +323 -0
  108. package/dist/lib/utils/simplify-geometry.js.map +1 -0
  109. package/dist/lib/utils/view-utils.js +392 -0
  110. package/dist/lib/utils/view-utils.js.map +1 -0
  111. package/dist/lib/viewer/cesium-view-monitor.js +393 -0
  112. package/dist/lib/viewer/cesium-view-monitor.js.map +1 -0
  113. package/dist/lib/viewer/viewer-event-tracker.js +70 -0
  114. package/dist/lib/viewer/viewer-event-tracker.js.map +1 -0
  115. package/dist/lib/viewer/viewer-utils.js +310 -0
  116. package/dist/lib/viewer/viewer-utils.js.map +1 -0
  117. package/dist/lib/widgets/common/draw-3d-polygon.js +458 -0
  118. package/dist/lib/widgets/common/draw-3d-polygon.js.map +1 -0
  119. package/dist/lib/widgets/common/draw-3d-polyline.js +415 -0
  120. package/dist/lib/widgets/common/draw-3d-polyline.js.map +1 -0
  121. package/dist/lib/widgets/common/measure-creator.js +468 -0
  122. package/dist/lib/widgets/common/measure-creator.js.map +1 -0
  123. package/dist/lib/widgets/common/walkthrough.js +336 -0
  124. package/dist/lib/widgets/common/walkthrough.js.map +1 -0
  125. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js +36 -0
  126. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js.map +1 -0
  127. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js +437 -0
  128. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js.map +1 -0
  129. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js +38 -0
  130. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js.map +1 -0
  131. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js +219 -0
  132. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js.map +1 -0
  133. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js +304 -0
  134. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js.map +1 -0
  135. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js +29 -0
  136. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js.map +1 -0
  137. package/dist/lib/widgets/widget-bookmarks.js +497 -0
  138. package/dist/lib/widgets/widget-bookmarks.js.map +1 -0
  139. package/dist/lib/widgets/widget-branding.js +165 -0
  140. package/dist/lib/widgets/widget-branding.js.map +1 -0
  141. package/dist/lib/widgets/widget-cursorbar.js +1179 -0
  142. package/dist/lib/widgets/widget-cursorbar.js.map +1 -0
  143. package/dist/lib/widgets/widget-embedded-info-view.js +201 -0
  144. package/dist/lib/widgets/widget-embedded-info-view.js.map +1 -0
  145. package/dist/lib/widgets/widget-info-view.js +681 -0
  146. package/dist/lib/widgets/widget-info-view.js.map +1 -0
  147. package/dist/lib/widgets/widget-left-panel.js +548 -0
  148. package/dist/lib/widgets/widget-left-panel.js.map +1 -0
  149. package/dist/lib/widgets/widget-nav-compass.js +469 -0
  150. package/dist/lib/widgets/widget-nav-compass.js.map +1 -0
  151. package/dist/lib/widgets/widget-view-bar.js +284 -0
  152. package/dist/lib/widgets/widget-view-bar.js.map +1 -0
  153. package/dist/lib/widgets/widget.js +66 -0
  154. package/dist/lib/widgets/widget.js.map +1 -0
  155. package/dist/types/bruce-cesium.d.ts +58 -0
  156. package/dist/types/internal/cesium-utils.d.ts +23 -0
  157. package/dist/types/internal/js-utils.d.ts +8 -0
  158. package/dist/types/internal/limited-log.d.ts +6 -0
  159. package/dist/types/rendering/cesium-animated-in-out.d.ts +12 -0
  160. package/dist/types/rendering/cesium-animated-property.d.ts +245 -0
  161. package/dist/types/rendering/entity-gatherer.d.ts +36 -0
  162. package/dist/types/rendering/entity-render-engine-model3d.d.ts +56 -0
  163. package/dist/types/rendering/entity-render-engine-point.d.ts +73 -0
  164. package/dist/types/rendering/entity-render-engine-polygon.d.ts +26 -0
  165. package/dist/types/rendering/entity-render-engine-polyline.d.ts +47 -0
  166. package/dist/types/rendering/entity-render-engine.d.ts +108 -0
  167. package/dist/types/rendering/getters/batched-data-getter.d.ts +28 -0
  168. package/dist/types/rendering/getters/entity-filter-getter.d.ts +104 -0
  169. package/dist/types/rendering/getters/entity-globe.d.ts +21 -0
  170. package/dist/types/rendering/menu-item-creator.d.ts +53 -0
  171. package/dist/types/rendering/menu-item-manager.d.ts +85 -0
  172. package/dist/types/rendering/relation-render-engine.d.ts +32 -0
  173. package/dist/types/rendering/render-managers/common/cesium-parabola.d.ts +39 -0
  174. package/dist/types/rendering/render-managers/common/entity-label.d.ts +82 -0
  175. package/dist/types/rendering/render-managers/common/point-clustering.d.ts +91 -0
  176. package/dist/types/rendering/render-managers/common/shared-getters.d.ts +41 -0
  177. package/dist/types/rendering/render-managers/data-source/data-source-static-csv-manager.d.ts +41 -0
  178. package/dist/types/rendering/render-managers/data-source/data-source-static-kml-manager.d.ts +25 -0
  179. package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +31 -0
  180. package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +76 -0
  181. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +90 -0
  182. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +90 -0
  183. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +42 -0
  184. package/dist/types/rendering/render-managers/other/assembly-render-manager.d.ts +38 -0
  185. package/dist/types/rendering/render-managers/other/google-search-render-manager.d.ts +45 -0
  186. package/dist/types/rendering/render-managers/other/legacy-relations-render-manager.d.ts +60 -0
  187. package/dist/types/rendering/render-managers/other/relations-render-manager.d.ts +53 -0
  188. package/dist/types/rendering/render-managers/render-manager.d.ts +30 -0
  189. package/dist/types/rendering/render-managers/tilesets/tileset-arb-render-manager.d.ts +37 -0
  190. package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +86 -0
  191. package/dist/types/rendering/render-managers/tilesets/tileset-entities-render-manager.d.ts +41 -0
  192. package/dist/types/rendering/render-managers/tilesets/tileset-google-photos-render-manager.d.ts +26 -0
  193. package/dist/types/rendering/render-managers/tilesets/tileset-i3s-render-manager.d.ts +25 -0
  194. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +48 -0
  195. package/dist/types/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.d.ts +27 -0
  196. package/dist/types/rendering/tile-render-engine.d.ts +80 -0
  197. package/dist/types/rendering/tileset-render-engine.d.ts +99 -0
  198. package/dist/types/rendering/tileset-styler.d.ts +86 -0
  199. package/dist/types/rendering/view-render-engine.d.ts +32 -0
  200. package/dist/types/rendering/visual-register-culler.d.ts +18 -0
  201. package/dist/types/rendering/visuals-register.d.ts +351 -0
  202. package/dist/types/utils/cesium-entity-styler.d.ts +103 -0
  203. package/dist/types/utils/drawing-utils.d.ts +59 -0
  204. package/dist/types/utils/entity-utils.d.ts +133 -0
  205. package/dist/types/utils/measure-utils.d.ts +20 -0
  206. package/dist/types/utils/simplify-geometry.d.ts +19 -0
  207. package/dist/types/utils/view-utils.d.ts +101 -0
  208. package/dist/types/viewer/cesium-view-monitor.d.ts +35 -0
  209. package/dist/types/viewer/viewer-event-tracker.d.ts +47 -0
  210. package/dist/types/viewer/viewer-utils.d.ts +88 -0
  211. package/dist/types/widgets/common/draw-3d-polygon.d.ts +62 -0
  212. package/dist/types/widgets/common/draw-3d-polyline.d.ts +50 -0
  213. package/dist/types/widgets/common/measure-creator.d.ts +60 -0
  214. package/dist/types/widgets/common/walkthrough.d.ts +37 -0
  215. package/dist/types/widgets/controls-view-bar/widget-control-view-bar-fullscreen.d.ts +10 -0
  216. package/dist/types/widgets/controls-view-bar/widget-control-view-bar-search.d.ts +18 -0
  217. package/dist/types/widgets/controls-view-bar/widget-control-view-bar.d.ts +23 -0
  218. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.d.ts +11 -0
  219. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-user.d.ts +24 -0
  220. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab.d.ts +17 -0
  221. package/dist/types/widgets/widget-bookmarks.d.ts +40 -0
  222. package/dist/types/widgets/widget-branding.d.ts +15 -0
  223. package/dist/types/widgets/widget-cursorbar.d.ts +48 -0
  224. package/dist/types/widgets/widget-embedded-info-view.d.ts +13 -0
  225. package/dist/types/widgets/widget-info-view.d.ts +21 -0
  226. package/dist/types/widgets/widget-left-panel.d.ts +73 -0
  227. package/dist/types/widgets/widget-nav-compass.d.ts +27 -0
  228. package/dist/types/widgets/widget-view-bar.d.ts +37 -0
  229. package/dist/types/widgets/widget.d.ts +29 -0
  230. package/package.json +1 -1
@@ -0,0 +1,668 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataSourceStaticCsvManager = void 0;
4
+ const bruce_models_1 = require("bruce-models");
5
+ const Cesium = require("cesium");
6
+ const bruce_cesium_1 = require("src/bruce-cesium");
7
+ /**
8
+ * Made for a POC experiment.
9
+ * Do not use without reviewing the purpose and settings of the Menu Item.
10
+ */
11
+ var DataSourceStaticCsvManager;
12
+ (function (DataSourceStaticCsvManager) {
13
+ class Manager {
14
+ get Disposed() {
15
+ return this.disposed;
16
+ }
17
+ get DataSources() {
18
+ return this.dataSource ? [this.dataSource] : [];
19
+ }
20
+ get CzmlDataInputs() {
21
+ return this.czmlDataInputs;
22
+ }
23
+ constructor(params) {
24
+ this.disposed = false;
25
+ this.czmlDataInputs = [];
26
+ // Array of callbacks to remove from the clock tick event.
27
+ this.tickRemovals = [];
28
+ const { viewer, apiGetter, item, register } = params;
29
+ this.viewer = viewer;
30
+ this.apiGetter = apiGetter;
31
+ this.item = item;
32
+ this.register = register;
33
+ }
34
+ Init() {
35
+ let files = this.item.CSV;
36
+ if (!files) {
37
+ return;
38
+ }
39
+ if (!Array.isArray(files)) {
40
+ files = [files];
41
+ }
42
+ (async () => {
43
+ var _a;
44
+ const api = this.apiGetter.getApi();
45
+ await api.Loading;
46
+ if (this.disposed) {
47
+ return;
48
+ }
49
+ try {
50
+ await this.renderMovingItem();
51
+ if (this.disposed) {
52
+ if (!((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.isDestroyed()) && this.dataSource && this.viewer.dataSources.contains(this.dataSource)) {
53
+ this.viewer.dataSources.remove(this.dataSource);
54
+ this.dataSource = null;
55
+ this.viewer.scene.requestRender();
56
+ }
57
+ if (this.tickRemovals.length) {
58
+ this.tickRemovals.forEach(removal => removal());
59
+ this.tickRemovals = [];
60
+ }
61
+ }
62
+ }
63
+ catch (e) {
64
+ console.error(e);
65
+ }
66
+ })();
67
+ }
68
+ /**
69
+ * Takes a set of CSV files and renders the collection as a single moving item (truck, car, etc).
70
+ * This will try to find which is the primary source of point data, and complimentary sources of attribute information.
71
+ * @param files
72
+ */
73
+ async renderMovingItem() {
74
+ var _a;
75
+ const api = this.apiGetter.getApi();
76
+ await api.Loading;
77
+ let vehicleFileUrl;
78
+ let alarmFileUrl;
79
+ let lineColor;
80
+ let vehicleEntityId;
81
+ const fileStrings = [];
82
+ const files = this.item.CSV;
83
+ for (let i = 0; i < files.length; i++) {
84
+ const file = files[i];
85
+ const fileId = (_a = file === null || file === void 0 ? void 0 : file.ClientFile) === null || _a === void 0 ? void 0 : _a.ID;
86
+ const externalURL = file === null || file === void 0 ? void 0 : file.fileUrl;
87
+ if (!fileId && !externalURL) {
88
+ continue;
89
+ }
90
+ let fileUrl;
91
+ if (fileId) {
92
+ fileUrl = bruce_models_1.ClientFile.GetUrl({
93
+ api,
94
+ fileId,
95
+ viaCdn: true
96
+ });
97
+ }
98
+ else if (externalURL) {
99
+ fileUrl = externalURL;
100
+ }
101
+ const fileStr = await (await fetch(fileUrl)).text();
102
+ fileStrings.push(fileStr);
103
+ if (this.disposed) {
104
+ return;
105
+ }
106
+ if (file.vehicleFileId) {
107
+ vehicleFileUrl = bruce_models_1.ClientFile.GetUrl({
108
+ api,
109
+ fileId: file.vehicleFileId,
110
+ viaCdn: true
111
+ });
112
+ }
113
+ if (file.lineColor) {
114
+ lineColor = file.lineColor;
115
+ }
116
+ if (file.alertFileId) {
117
+ alarmFileUrl = bruce_models_1.ClientFile.GetUrl({
118
+ api,
119
+ fileId: file.alertFileId,
120
+ viaCdn: true
121
+ });
122
+ }
123
+ if (file.vehicleEntityId) {
124
+ vehicleEntityId = file.vehicleEntityId;
125
+ }
126
+ }
127
+ // We'll run through and turn the fileStrings into an array of objects that represent the CSV data.
128
+ // Each file string is the text of a CSV file.
129
+ const csvData = [];
130
+ for (let i = 0; i < fileStrings.length; i++) {
131
+ const delimiter = ",";
132
+ const fileStr = fileStrings[i];
133
+ const headers = fileStr.slice(0, fileStr.indexOf("\n")).split(delimiter).map(header => header.trim());
134
+ const rows = fileStr.slice(fileStr.indexOf("\n") + 1).split("\n");
135
+ const rowsArr = [];
136
+ for (let j = 0; j < rows.length; j++) {
137
+ const row = rows[j];
138
+ const rowArr = row.split(delimiter).map(item => item.trim());
139
+ if (rowArr.length === 1 && rowArr[0] === "") {
140
+ continue;
141
+ }
142
+ rowsArr.push(rowArr);
143
+ }
144
+ csvData.push({
145
+ headers,
146
+ rows: rowsArr
147
+ });
148
+ }
149
+ // TODO. Find one with lat/lon/dateTime values instead of just taking first one.
150
+ const primary = csvData[0];
151
+ const pHeaders = primary.headers;
152
+ const pLatIndex = pHeaders.findIndex(x => x.toLowerCase().includes("lat"));
153
+ const pLonIndex = pHeaders.findIndex(x => x.toLowerCase().includes("lon"));
154
+ const pDateTimeIndex = pHeaders.findIndex(x => x.toLowerCase().includes("date"));
155
+ // Ensure values are correct data types.
156
+ for (let i = 0; i < primary.rows.length; i++) {
157
+ const row = primary.rows[i];
158
+ const lat = row[pLatIndex];
159
+ if (typeof lat == "string") {
160
+ row[pLatIndex] = parseFloat(lat);
161
+ }
162
+ const lon = row[pLonIndex];
163
+ if (typeof lon == "string") {
164
+ row[pLonIndex] = parseFloat(lon);
165
+ }
166
+ const dateTimeStr = row[pDateTimeIndex];
167
+ if (typeof dateTimeStr === "string") {
168
+ let utcDate;
169
+ // Dates are assumed to be in UTC.
170
+ // Check for the format: `2023/12/24 04:15:00.743`.
171
+ if (dateTimeStr.includes("/") && dateTimeStr.includes(":")) {
172
+ const [datePart, timePart] = dateTimeStr.split(" ");
173
+ const [year, month, day] = datePart.split("/").map(Number);
174
+ const [hours, minutes, seconds] = timePart.split(":").map(Number);
175
+ const milliseconds = seconds % 1 * 1000; // Extract milliseconds
176
+ utcDate = new Date(Date.UTC(year, month - 1, day, hours, minutes, Math.floor(seconds), milliseconds));
177
+ }
178
+ // Check for the format: `24-12-2023 4:15:12 AM`.
179
+ else if (dateTimeStr.includes("-") && dateTimeStr.includes(":") && (dateTimeStr.includes("AM") || dateTimeStr.includes("PM"))) {
180
+ const convertTo24HourFormat = (dateTimeStr) => {
181
+ const [datePart, timePart, meridian] = dateTimeStr.split(/[: ]+/);
182
+ let [hours, minutes, seconds] = timePart.split(":").map(Number);
183
+ if (meridian === 'PM' && hours < 12) {
184
+ hours += 12;
185
+ }
186
+ if (meridian === 'AM' && hours === 12) {
187
+ hours = 0;
188
+ }
189
+ return `${datePart} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
190
+ };
191
+ // Convert to 24-hour format before parsing.
192
+ const dateTime24hr = convertTo24HourFormat(dateTimeStr);
193
+ const [datePart, timePart] = dateTime24hr.split(" ");
194
+ const [day, month, year] = datePart.split("-").map(Number);
195
+ const [hours, minutes, seconds] = timePart.split(":").map(Number);
196
+ utcDate = new Date(Date.UTC(year, month - 1, day, hours, minutes, seconds));
197
+ }
198
+ // Format: `2023-12-24 04:19:17.196`.
199
+ else if (dateTimeStr.includes("-") && dateTimeStr.includes(":")) {
200
+ const [datePart, timePart] = dateTimeStr.split(" ");
201
+ const [year, month, day] = datePart.split("-").map(Number);
202
+ const [hours, minutes, seconds] = timePart.split(":").map(Number);
203
+ utcDate = new Date(Date.UTC(year, month - 1, day, hours, minutes, seconds));
204
+ }
205
+ else {
206
+ // Fallback to parsing in local time.
207
+ utcDate = new Date(dateTimeStr);
208
+ }
209
+ row[pDateTimeIndex] = utcDate.toISOString();
210
+ }
211
+ }
212
+ // Sort by date.
213
+ primary.rows.sort((a, b) => {
214
+ const aDate = new Date(a[pDateTimeIndex]);
215
+ const bDate = new Date(b[pDateTimeIndex]);
216
+ return aDate.getTime() - bDate.getTime();
217
+ });
218
+ const vehicleCesiumId = bruce_models_1.ObjectUtils.UId();
219
+ const { czml, entityMapping } = createJourneyCzml(vehicleCesiumId, vehicleFileUrl, alarmFileUrl, lineColor, primary);
220
+ this.czmlDataInputs.push(czml);
221
+ // Dereference czml and remove clock property.
222
+ // We do this so our apps can reference the property and manage the clock themselves.
223
+ const czmlAdjusted = JSON.parse(JSON.stringify(czml));
224
+ czmlAdjusted.forEach((item) => {
225
+ delete item.clock;
226
+ });
227
+ // Get current cesium dateTime.
228
+ const curSettings = bruce_cesium_1.ViewUtils.GetTimeDetails({
229
+ viewer: this.viewer
230
+ });
231
+ const source = await this.viewer.dataSources.add(Cesium.CzmlDataSource.load(czmlAdjusted));
232
+ this.dataSource = source;
233
+ // Reset back to the previous dateTime.
234
+ // Adding the czml data source will have changed the clock.
235
+ bruce_cesium_1.ViewUtils.SetTimeDetails({
236
+ viewer: this.viewer,
237
+ isAnimating: curSettings.isAnimating,
238
+ animationSpeed: curSettings.animationSpeed,
239
+ currentTimeIso: curSettings.currentTimeIso,
240
+ startTimeIso: curSettings.startTimeIso,
241
+ stopTimeIso: curSettings.stopTimeIso
242
+ });
243
+ // Listen to update ticks and ensure orientation of moving item is correct.
244
+ if (this.viewer.clock) {
245
+ const pHeadingIndex = pHeaders.findIndex(x => x.toLowerCase().includes("head"));
246
+ let errorsInARow = 0;
247
+ const removal = this.viewer.clock.onTick.addEventListener(() => {
248
+ const vehicle = source.entities.getById(vehicleCesiumId);
249
+ if (vehicle) {
250
+ try {
251
+ updateOrientation(primary.rows, pHeadingIndex, pDateTimeIndex, this.viewer, vehicle);
252
+ errorsInARow = 0;
253
+ }
254
+ catch (e) {
255
+ console.error(e);
256
+ errorsInARow += 1;
257
+ if (errorsInARow >= 3) {
258
+ removal();
259
+ }
260
+ }
261
+ this.viewer.scene.requestRender();
262
+ }
263
+ });
264
+ this.tickRemovals.push(removal);
265
+ // Register vehicle rego.
266
+ if (vehicleEntityId) {
267
+ const vehicleEntity = source.entities.getById(vehicleCesiumId);
268
+ if (vehicleEntity) {
269
+ this.register.AddRego({
270
+ rego: {
271
+ canEdit: false,
272
+ entityId: vehicleEntityId,
273
+ menuItemId: this.item.id,
274
+ menuItemType: this.item.Type,
275
+ priority: 0,
276
+ visual: vehicleEntity,
277
+ accountId: this.apiGetter.accountId,
278
+ cdn: false,
279
+ overrideShow: true
280
+ },
281
+ requestRender: false
282
+ });
283
+ }
284
+ }
285
+ // Register alarms (and any other Entities that were created).
286
+ const cesiumEntityIds = Object.keys(entityMapping);
287
+ for (let i = 0; i < cesiumEntityIds.length; i++) {
288
+ const cesiumEntityId = cesiumEntityIds[i];
289
+ const entity = source.entities.getById(cesiumEntityId);
290
+ if (entity) {
291
+ const nextspaceEntityId = entityMapping[cesiumEntityId];
292
+ if (nextspaceEntityId) {
293
+ this.register.AddRego({
294
+ rego: {
295
+ canEdit: false,
296
+ entityId: nextspaceEntityId,
297
+ menuItemId: this.item.id,
298
+ menuItemType: this.item.Type,
299
+ priority: 0,
300
+ visual: entity,
301
+ accountId: this.apiGetter.accountId,
302
+ cdn: false,
303
+ overrideShow: true
304
+ },
305
+ requestRender: false
306
+ });
307
+ }
308
+ }
309
+ }
310
+ }
311
+ }
312
+ Dispose() {
313
+ var _a;
314
+ if (this.disposed) {
315
+ return;
316
+ }
317
+ this.disposed = true;
318
+ if (!((_a = this.viewer) === null || _a === void 0 ? void 0 : _a.isDestroyed())) {
319
+ if (this.dataSource && this.viewer.dataSources.contains(this.dataSource)) {
320
+ this.viewer.dataSources.remove(this.dataSource);
321
+ this.dataSource = null;
322
+ this.viewer.scene.requestRender();
323
+ }
324
+ }
325
+ if (this.tickRemovals.length) {
326
+ this.tickRemovals.forEach(removal => removal());
327
+ this.tickRemovals = [];
328
+ }
329
+ this.register.RemoveRegos({
330
+ menuItemId: this.item.id,
331
+ doUpdate: false,
332
+ requestRender: false
333
+ });
334
+ }
335
+ async ReRender(params) {
336
+ const { entityIds, force } = params;
337
+ if (entityIds == null) {
338
+ }
339
+ else {
340
+ }
341
+ }
342
+ }
343
+ DataSourceStaticCsvManager.Manager = Manager;
344
+ })(DataSourceStaticCsvManager = exports.DataSourceStaticCsvManager || (exports.DataSourceStaticCsvManager = {}));
345
+ /**
346
+ * Creates a CZML object from the CSV data.
347
+ * This shows a journey taken by a moving object and alarms detected along the way.
348
+ * @param vehicleId
349
+ * @param vehicleFileUrl
350
+ * @param alarmFileUrl
351
+ * @param lineColor
352
+ * @param data
353
+ * @returns
354
+ */
355
+ function createJourneyCzml(vehicleId, vehicleFileUrl, alarmFileUrl, lineColor, data) {
356
+ const headers = data.headers;
357
+ const rows = data.rows;
358
+ const latIndex = headers.findIndex(x => x.toLowerCase().includes("lat"));
359
+ const lonIndex = headers.findIndex(x => x.toLowerCase().includes("lon"));
360
+ const dateTimeIndex = headers.findIndex(x => x.toLowerCase().includes("date"));
361
+ const alarmIndex = headers.findIndex(x => x.toLowerCase().includes("alarm"));
362
+ const entityIdIndex = headers.findIndex((x, i) => {
363
+ if (i === latIndex || i === lonIndex || i === dateTimeIndex || i === alarmIndex) {
364
+ return false;
365
+ }
366
+ const lower = x.toLowerCase();
367
+ return lower.includes("entityid") || lower.includes("bruce") || lower.includes("nextspace");
368
+ });
369
+ // Map between Cesium Entity ID and Nextspace Entity ID.
370
+ // This is returned to the caller so they can map between the two.
371
+ const entityMapping = {};
372
+ const czml = [
373
+ {
374
+ "id": "document",
375
+ "name": "Journey",
376
+ "version": "1.0",
377
+ "clock": {
378
+ "interval": rows[0][dateTimeIndex] + "/" + rows[rows.length - 1][dateTimeIndex],
379
+ "currentTime": rows[0][dateTimeIndex],
380
+ "multiplier": 10,
381
+ "range": "LOOP_STOP",
382
+ "step": "SYSTEM_CLOCK_MULTIPLIER"
383
+ }
384
+ },
385
+ ];
386
+ const SEGMENTED = true;
387
+ // Create a polyline for the full path.
388
+ // If segmented we'll break it into pieces and display each piece based on relative time to the cesium viewer clock.
389
+ if (SEGMENTED) {
390
+ // Calculate the total duration of the journey in milliseconds.
391
+ const totalDuration = new Date(rows[rows.length - 1][dateTimeIndex]).getTime() - new Date(rows[0][dateTimeIndex]).getTime();
392
+ // Percentage of the journey to be visible before and after each point.
393
+ const visibilityPercentage = 0.05; // 5%
394
+ const visibilityDuration = totalDuration * visibilityPercentage;
395
+ rows.forEach((row, index) => {
396
+ const time = new Date(row[dateTimeIndex]).getTime();
397
+ const startTime = new Date(time - visibilityDuration / 2).toISOString();
398
+ const endTime = new Date(time + visibilityDuration / 2).toISOString();
399
+ const position = [
400
+ Number(row[lonIndex]),
401
+ Number(row[latIndex]),
402
+ 0
403
+ ];
404
+ if (index < rows.length - 1) {
405
+ const nextRow = rows[index + 1];
406
+ const nextPosition = [
407
+ Number(nextRow[lonIndex]),
408
+ Number(nextRow[latIndex]),
409
+ 0
410
+ ];
411
+ czml.push({
412
+ "id": "segment-" + bruce_models_1.ObjectUtils.UId(),
413
+ "name": "Path Segment",
414
+ "availability": startTime + "/" + endTime,
415
+ "polyline": {
416
+ "clampToGround": true,
417
+ "positions": {
418
+ "cartographicDegrees": position.concat(nextPosition)
419
+ },
420
+ "material": {
421
+ "solidColor": {
422
+ "color": {
423
+ "rgba": lineColor ? Cesium.Color.fromCssColorString(lineColor).toBytes() : [0, 255, 0, 100]
424
+ }
425
+ }
426
+ },
427
+ "width": 5
428
+ }
429
+ });
430
+ }
431
+ });
432
+ // Alarm points.
433
+ rows.filter(row => row[alarmIndex]).forEach((row, index) => {
434
+ const alarmTime = new Date(row[dateTimeIndex]).getTime();
435
+ const startTime = new Date(alarmTime - visibilityDuration / 2).toISOString();
436
+ const endTime = new Date(alarmTime + visibilityDuration / 2).toISOString();
437
+ const alarmCesiumId = bruce_models_1.ObjectUtils.UId();
438
+ czml.push({
439
+ "id": alarmCesiumId,
440
+ "name": "Alarm",
441
+ "availability": startTime + "/" + endTime,
442
+ "position": {
443
+ "cartographicDegrees": [
444
+ Number(row[lonIndex]),
445
+ Number(row[latIndex]),
446
+ 5
447
+ ]
448
+ },
449
+ "point": !alarmFileUrl ? {
450
+ "pixelSize": 10,
451
+ "color": {
452
+ "rgba": [255, 0, 0, 255]
453
+ },
454
+ "heightReference": "CLAMP_TO_GROUND"
455
+ } : undefined,
456
+ "billboard": alarmFileUrl ? {
457
+ "image": alarmFileUrl,
458
+ "scale": 1,
459
+ "pixelOffset": {
460
+ "cartesian2": [0, 0]
461
+ },
462
+ "heightReference": "CLAMP_TO_GROUND"
463
+ } : undefined
464
+ });
465
+ const entityId = entityIdIndex > -1 ? row[entityIdIndex] : null;
466
+ if (entityId) {
467
+ entityMapping[alarmCesiumId] = String(entityId);
468
+ }
469
+ });
470
+ }
471
+ else {
472
+ const roadPositions = rows.map(row => {
473
+ const position = [
474
+ Number(row[lonIndex]),
475
+ Number(row[latIndex]),
476
+ 0
477
+ ];
478
+ return position;
479
+ }).flat();
480
+ czml.push({
481
+ "id": bruce_models_1.ObjectUtils.UId(),
482
+ "name": "Path",
483
+ "polyline": {
484
+ "clampToGround": true,
485
+ "positions": {
486
+ "cartographicDegrees": roadPositions
487
+ },
488
+ "material": {
489
+ "solidColor": {
490
+ "color": {
491
+ "rgba": lineColor ? Cesium.Color.fromCssColorString(lineColor).toBytes() : [0, 255, 0, 100]
492
+ }
493
+ }
494
+ },
495
+ "width": 5
496
+ }
497
+ });
498
+ // Alarm points.
499
+ rows.filter(row => row[alarmIndex]).forEach((row, index) => {
500
+ const position = [
501
+ Number(row[lonIndex]),
502
+ Number(row[latIndex]),
503
+ 0
504
+ ];
505
+ czml.push({
506
+ "id": bruce_models_1.ObjectUtils.UId(),
507
+ "name": "Alarm",
508
+ "position": {
509
+ "cartographicDegrees": position
510
+ },
511
+ "point": !alarmFileUrl ? {
512
+ "heightReference": "CLAMP_TO_GROUND",
513
+ "pixelSize": 10,
514
+ "color": {
515
+ "rgba": [255, 0, 0, 255]
516
+ }
517
+ } : undefined,
518
+ "billboard": alarmFileUrl ? {
519
+ "heightReference": "CLAMP_TO_GROUND",
520
+ "image": alarmFileUrl,
521
+ "scale": 1,
522
+ "pixelOffset": {
523
+ "cartesian2": [0, 0]
524
+ }
525
+ } : undefined,
526
+ /*
527
+ "label": {
528
+ "text": row[alarmIndex],
529
+ "show": true,
530
+ "font": "11pt monospace",
531
+ "style": "FILL",
532
+ "outlineColor": {
533
+ "rgba": [0, 0, 0, 255]
534
+ },
535
+ "outlineWidth": 2,
536
+ "pixelOffset": {
537
+ "cartesian2": [0, -16]
538
+ }
539
+ }
540
+ */
541
+ });
542
+ });
543
+ }
544
+ // Add animated point for the moving item.
545
+ const vehiclePositions = rows.map((row) => {
546
+ const position = [
547
+ (new Date(row[dateTimeIndex]).getTime() - new Date(rows[0][dateTimeIndex]).getTime()) / 1000,
548
+ Number(row[lonIndex]),
549
+ Number(row[latIndex]),
550
+ 0
551
+ ];
552
+ return position;
553
+ }).flat();
554
+ czml.push({
555
+ "id": vehicleId,
556
+ "name": "Vehicle",
557
+ "availability": rows[0][dateTimeIndex] + "/" + rows[rows.length - 1][dateTimeIndex],
558
+ "model": vehicleFileUrl ? {
559
+ "heightReference": "CLAMP_TO_GROUND",
560
+ "gltf": vehicleFileUrl,
561
+ "scale": 1
562
+ } : undefined,
563
+ "point": !vehicleFileUrl ? {
564
+ "heightReference": "CLAMP_TO_GROUND",
565
+ "pixelSize": 20,
566
+ "color": {
567
+ "rgba": [0, 0, 255, 255]
568
+ }
569
+ } : undefined,
570
+ "orientation": {
571
+ "velocityReference": "#vehicle#position"
572
+ },
573
+ "position": {
574
+ "epoch": rows[0][dateTimeIndex],
575
+ "cartographicDegrees": vehiclePositions
576
+ }
577
+ });
578
+ return {
579
+ czml,
580
+ entityMapping
581
+ };
582
+ }
583
+ /**
584
+ * Updates the orientation of the moving item.
585
+ * If there is a heading in the file then it will calculate based on the file data,
586
+ * if there isn't then it will calculate one based on the previous and current position.
587
+ * @param rows
588
+ * @param headingIndex
589
+ * @param dateTimeIndex
590
+ * @param viewer
591
+ * @param vehicleEntity
592
+ * @returns
593
+ */
594
+ function updateOrientation(rows, headingIndex, dateTimeIndex, viewer, vehicleEntity) {
595
+ if (!vehicleEntity || !vehicleEntity.position) {
596
+ return;
597
+ }
598
+ const positionProperty = vehicleEntity.position;
599
+ const currentTime = viewer.clock.currentTime;
600
+ const currentPosition = positionProperty.getValue(currentTime);
601
+ if (!currentPosition) {
602
+ return;
603
+ }
604
+ if (headingIndex > -1) {
605
+ try {
606
+ const interpolatedHeading = interpolateHeading(dateTimeIndex, rows, currentTime, headingIndex);
607
+ if (interpolatedHeading !== null) {
608
+ const radians = Cesium.Math.toRadians(interpolatedHeading - 90);
609
+ const quaternion = Cesium.Transforms.headingPitchRollQuaternion(currentPosition, new Cesium.HeadingPitchRoll(radians, 0, 0));
610
+ if (!isNaN(quaternion.w) && !isNaN(quaternion.x) && !isNaN(quaternion.y) && !isNaN(quaternion.z)) {
611
+ vehicleEntity.orientation = new Cesium.ConstantProperty(quaternion);
612
+ return;
613
+ }
614
+ else {
615
+ console.error("Invalid quaternion", quaternion);
616
+ }
617
+ }
618
+ }
619
+ catch (e) {
620
+ console.error(e);
621
+ }
622
+ }
623
+ const previousTime = Cesium.JulianDate.addSeconds(currentTime, -1, new Cesium.JulianDate());
624
+ const previousPosition = positionProperty.getValue(previousTime);
625
+ if (previousPosition && !Cesium.Cartesian3.equals(currentPosition, previousPosition)) {
626
+ const direction = Cesium.Cartesian3.subtract(currentPosition, previousPosition, new Cesium.Cartesian3());
627
+ Cesium.Cartesian3.normalize(direction, direction);
628
+ const rotationMatrix = Cesium.Transforms.rotationMatrixFromPositionVelocity(previousPosition, direction);
629
+ vehicleEntity.orientation = new Cesium.ConstantProperty(Cesium.Quaternion.fromRotationMatrix(rotationMatrix));
630
+ }
631
+ }
632
+ function interpolateHeading(dateTimeIndex, rows, currentTime, headingIndex) {
633
+ const currentTimeMs = Cesium.JulianDate.toDate(currentTime).getTime();
634
+ let nearestBefore = null;
635
+ let nearestAfter = null;
636
+ for (const row of rows) {
637
+ const time = new Date(row[dateTimeIndex]).getTime();
638
+ let heading = parseFloat(String(row[headingIndex]));
639
+ if (!isNaN(heading)) {
640
+ if (time <= currentTimeMs) {
641
+ nearestBefore = { time, heading };
642
+ }
643
+ else if (time > currentTimeMs && nearestAfter === null) {
644
+ nearestAfter = { time, heading };
645
+ break;
646
+ }
647
+ }
648
+ }
649
+ if (nearestBefore && nearestAfter) {
650
+ // Normalize headings to handle wraparound from 359 to 0.
651
+ let deltaHeading = nearestAfter.heading - nearestBefore.heading;
652
+ if (deltaHeading > 180) {
653
+ deltaHeading -= 360;
654
+ }
655
+ else if (deltaHeading < -180) {
656
+ deltaHeading += 360;
657
+ }
658
+ const factor = (currentTimeMs - nearestBefore.time) / (nearestAfter.time - nearestBefore.time);
659
+ let interpolatedHeading = nearestBefore.heading + factor * deltaHeading;
660
+ interpolatedHeading = (interpolatedHeading + 360) % 360;
661
+ return interpolatedHeading;
662
+ }
663
+ else if (nearestBefore) {
664
+ return nearestBefore.heading;
665
+ }
666
+ return null;
667
+ }
668
+ //# sourceMappingURL=data-source-static-csv-manager.js.map