@kalisio/kdk 2.5.2 → 2.6.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 (535) hide show
  1. package/.github/workflows/main.yaml +35 -6
  2. package/client.globe.js +8 -0
  3. package/client.js +8 -0
  4. package/client.map.js +8 -0
  5. package/core/api/hooks/hooks.push.js +3 -2
  6. package/core/api/hooks/hooks.tags.js +56 -0
  7. package/core/api/models/tags.model.mongodb.js +8 -0
  8. package/core/api/services/index.js +33 -2
  9. package/core/api/services/tags/tags.hooks.js +47 -0
  10. package/core/client/api.js +5 -5
  11. package/core/client/components/KActivity.vue +3 -2
  12. package/core/client/components/KChip.vue +2 -2
  13. package/core/client/components/KEditor.vue +3 -1
  14. package/core/client/components/KFollower.vue +4 -4
  15. package/core/client/components/KStore.vue +1 -1
  16. package/core/client/components/KTab.vue +20 -7
  17. package/core/client/components/account/KProfile.vue +9 -25
  18. package/core/client/components/action/KAction.vue +10 -10
  19. package/core/client/components/action/KToggleFullscreenAction.vue +2 -11
  20. package/core/client/components/app/KHome.vue +3 -2
  21. package/core/client/components/collection/KFilter.vue +5 -4
  22. package/core/client/components/collection/KGrid.vue +5 -1
  23. package/core/client/components/collection/KItemsFilter.vue +47 -0
  24. package/core/client/components/collection/KItemsSorter.vue +42 -0
  25. package/core/client/components/collection/KScrollDown.vue +2 -2
  26. package/core/client/components/collection/KSearchFilterControl.vue +3 -2
  27. package/core/client/components/collection/KSorter.vue +33 -37
  28. package/core/client/components/collection/KTagsFilterControl.vue +14 -40
  29. package/core/client/components/collection/KTagsFilterView.vue +10 -45
  30. package/core/client/components/collection/KTimeFilterControl.vue +6 -7
  31. package/core/client/components/collection/KTimeFilterView.vue +13 -22
  32. package/core/client/components/collection/KTimeLine.vue +18 -9
  33. package/core/client/components/form/KColorField.vue +13 -6
  34. package/core/client/components/form/KColorScaleField.vue +7 -12
  35. package/core/client/components/form/KFileField.vue +118 -89
  36. package/core/client/components/form/KForm.vue +30 -18
  37. package/core/client/components/form/KIconField.vue +4 -1
  38. package/core/client/components/form/KNumberField.vue +9 -2
  39. package/core/client/components/form/KSelectField.vue +1 -4
  40. package/core/client/components/form/KTagField.vue +229 -0
  41. package/core/client/components/form/KTextField.vue +4 -0
  42. package/core/client/components/form/KTextareaField.vue +3 -1
  43. package/core/client/components/input/KShapePicker.vue +5 -5
  44. package/core/client/components/layout/KFab.vue +32 -20
  45. package/core/client/components/layout/KPage.vue +11 -6
  46. package/core/client/components/layout/KWindow.vue +5 -0
  47. package/core/client/components/media/index.js +2 -6
  48. package/core/client/components/menu/KMenu.vue +12 -10
  49. package/core/client/components/menu/KSubMenu.vue +12 -12
  50. package/core/client/components/messages/KMessageCard.vue +13 -12
  51. package/core/client/components/messages/KMessageComposer.vue +13 -9
  52. package/core/client/components/messages/KMessagesTimeLine.vue +16 -8
  53. package/core/client/components/tags/KTagFilter.vue +99 -0
  54. package/core/client/components/tags/KTagItem.vue +65 -0
  55. package/core/client/components/tags/KTagManager.vue +198 -0
  56. package/core/client/components/tags/KTagSelection.vue +82 -0
  57. package/core/client/components/time/KDate.vue +3 -17
  58. package/core/client/components/time/KDateTime.vue +1 -1
  59. package/core/client/components/time/KTime.vue +0 -4
  60. package/core/client/composables/collection-filter.js +41 -2
  61. package/core/client/composables/collection.js +3 -3
  62. package/core/client/composables/index.js +1 -0
  63. package/core/client/composables/pwa.js +13 -0
  64. package/core/client/composables/session.js +7 -8
  65. package/core/client/composables/user.js +36 -0
  66. package/core/client/directives/index.js +1 -0
  67. package/core/client/directives/v-drop-file.js +174 -0
  68. package/core/client/document.js +2 -1
  69. package/core/client/exporter.js +17 -3
  70. package/core/client/i18n/core_en.json +34 -7
  71. package/core/client/i18n/core_fr.json +36 -9
  72. package/core/client/i18n.js +26 -11
  73. package/core/client/layout.js +5 -5
  74. package/core/client/mixins/mixin.base-activity.js +8 -5
  75. package/core/client/mixins/mixin.base-editor.js +2 -1
  76. package/core/client/mixins/mixin.base-field.js +3 -2
  77. package/core/client/mixins/mixin.base-item.js +12 -10
  78. package/core/client/mixins/mixin.service.js +3 -1
  79. package/core/client/platform.js +0 -3
  80. package/core/client/readers/reader.json.js +2 -2
  81. package/core/client/utils/index.js +2 -0
  82. package/core/client/utils/utils.collection.js +6 -6
  83. package/core/client/utils/utils.colors.js +46 -19
  84. package/core/client/utils/utils.files.js +19 -0
  85. package/core/client/utils/utils.locale.js +13 -17
  86. package/core/client/utils/utils.services.js +27 -0
  87. package/core/client/utils/utils.shapes.js +2 -2
  88. package/core/client/utils/utils.tags.js +17 -0
  89. package/core/client/utils/utils.tours.js +31 -0
  90. package/core/common/permissions.js +3 -0
  91. package/core/common/schemas/tags.update.json +35 -0
  92. package/core/common/schemas/users.update-profile.json +1 -1
  93. package/core/common/utils.js +5 -5
  94. package/extras/configs/panes.top.js +11 -0
  95. package/extras/configs/stickies.js +1 -1
  96. package/extras/configs/widgets.left.js +13 -1
  97. package/extras/libs/jsts.min.js +8 -0
  98. package/{test/client/core/account.js → extras/tests/core/account.mjs} +4 -4
  99. package/extras/tests/core/api.mjs +114 -0
  100. package/{test/client/core/collection.js → extras/tests/core/collection.mjs} +8 -8
  101. package/{test/client/core/dialogs.js → extras/tests/core/dialogs.mjs} +1 -1
  102. package/extras/tests/core/index.mjs +9 -0
  103. package/{test/client/core/layout.js → extras/tests/core/layout.mjs} +7 -3
  104. package/{test/client/core/runner.js → extras/tests/core/runner.mjs} +3 -3
  105. package/{test/client/core/screens.js → extras/tests/core/screens.mjs} +1 -1
  106. package/{test/client/core/utils.js → extras/tests/core/utils.mjs} +79 -26
  107. package/extras/tests/index.mjs +4 -0
  108. package/{test/client/map/api.js → extras/tests/map/api.mjs} +1 -1
  109. package/{test/client/map/catalog.js → extras/tests/map/catalog.mjs} +18 -18
  110. package/{test/client/map/controls.js → extras/tests/map/controls.mjs} +3 -3
  111. package/extras/tests/map/index.mjs +5 -0
  112. package/{test/client/map/time.js → extras/tests/map/time.mjs} +3 -3
  113. package/{test/client/map/utils.js → extras/tests/map/utils.mjs} +6 -5
  114. package/extras/tours/fab.js +36 -0
  115. package/extras/tours/layout.js +49 -0
  116. package/extras/tours/pane.left.js +78 -0
  117. package/extras/tours/pane.right.js +145 -0
  118. package/extras/tours/pane.top.js +239 -0
  119. package/map/api/config/layers.cjs +28 -13
  120. package/map/api/hooks/hooks.query.js +12 -7
  121. package/map/api/models/catalog.model.mongodb.js +17 -6
  122. package/map/api/services/catalog/catalog.hooks.js +1 -1
  123. package/map/api/services/index.js +18 -1
  124. package/map/api/services/styles/styles.hooks.js +1 -1
  125. package/map/client/cesium/utils/utils.cesium.js +25 -65
  126. package/map/client/cesium/utils/utils.features.js +1 -0
  127. package/map/client/cesium/utils/utils.geojson.js +1 -0
  128. package/map/client/cesium/utils/utils.style.js +7 -6
  129. package/map/client/components/KFeatureEditor.vue +3 -3
  130. package/map/client/components/KFeaturesChart.vue +4 -4
  131. package/map/client/components/KFeaturesFilterEditor.vue +19 -13
  132. package/map/client/components/KFeaturesFilterManager.vue +7 -4
  133. package/map/client/components/KFeaturesTable.vue +2 -2
  134. package/map/client/components/KLayerEditor.vue +10 -6
  135. package/map/client/components/KMeasureTool.vue +2 -1
  136. package/map/client/components/catalog/KBaseLayersSelector.vue +1 -1
  137. package/map/client/components/catalog/KCategoryItem.vue +15 -1
  138. package/map/client/components/catalog/KConnectLayer.vue +2 -2
  139. package/map/client/components/catalog/KCreateView.vue +3 -2
  140. package/map/client/components/catalog/KFilteredLayerItem.vue +26 -6
  141. package/map/client/components/catalog/KImportLayer.vue +6 -3
  142. package/map/client/components/catalog/KLayerCategories.vue +8 -6
  143. package/map/client/components/catalog/KLayerItem.vue +12 -2
  144. package/map/client/components/catalog/KLayersList.vue +180 -0
  145. package/map/client/components/catalog/KLayersPanel.vue +146 -36
  146. package/map/client/components/catalog/KLayersSelector.vue +96 -48
  147. package/map/client/components/catalog/KProjectEditor.vue +0 -9
  148. package/map/client/components/catalog/KProjectSelector.vue +3 -2
  149. package/map/client/components/catalog/KProjectsPanel.vue +23 -8
  150. package/map/client/components/catalog/KViewsPanel.vue +18 -8
  151. package/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  152. package/map/client/components/form/KDirectionField.vue +3 -6
  153. package/map/client/components/form/KLayerCategoryField.vue +2 -2
  154. package/map/client/components/form/KOwsServiceField.vue +25 -24
  155. package/map/client/components/form/KSelectLayersField.vue +4 -4
  156. package/map/client/components/form/KSelectViewsField.vue +4 -4
  157. package/map/client/components/legend/KLayerLegend.vue +11 -2
  158. package/map/client/components/legend/KLegend.vue +44 -51
  159. package/map/client/components/location/KLocationCardSection.vue +6 -7
  160. package/map/client/components/location/KLocationMap.vue +23 -13
  161. package/map/client/components/stickies/KLevelSlider.vue +10 -8
  162. package/map/client/components/stickies/KPosition.vue +5 -0
  163. package/map/client/components/styles/KLayerStyleAction.vue +59 -12
  164. package/map/client/components/styles/KStyleEditor.vue +72 -9
  165. package/map/client/components/styles/KStyleEditorSection.vue +82 -33
  166. package/map/client/components/styles/KStyleManager.vue +126 -60
  167. package/map/client/components/styles/KStylePreview.vue +9 -25
  168. package/map/client/components/styles/KStylePreviewItem.vue +22 -1
  169. package/map/client/components/tools/KSearchTool.vue +1 -1
  170. package/map/client/components/widget/KElevationProfile.vue +20 -17
  171. package/map/client/components/widget/KInformationBox.vue +5 -5
  172. package/map/client/components/widget/KMapillaryViewer.vue +2 -1
  173. package/map/client/components/widget/KTimeSeries.vue +11 -9
  174. package/map/client/composables/highlight.js +5 -1
  175. package/map/client/globe.js +2 -0
  176. package/map/client/i18n/map_en.json +33 -8
  177. package/map/client/i18n/map_fr.json +33 -8
  178. package/map/client/leaflet/GradientPath.js +61 -24
  179. package/map/client/leaflet/ShapeMarker.js +12 -5
  180. package/map/client/leaflet/TiledMeshLayer.js +3 -3
  181. package/map/client/leaflet/utils/utils.geojson.js +66 -8
  182. package/map/client/leaflet/utils/utils.style.js +14 -15
  183. package/map/client/mixins/globe/mixin.base-globe.js +181 -34
  184. package/map/client/mixins/globe/mixin.file-layers.js +3 -0
  185. package/map/client/mixins/globe/mixin.geojson-layers.js +190 -36
  186. package/map/client/mixins/globe/mixin.opendap-layers.js +2 -1
  187. package/map/client/mixins/globe/mixin.style.js +23 -1
  188. package/map/client/mixins/globe/mixin.tooltip.js +14 -2
  189. package/map/client/mixins/map/mixin.base-map.js +146 -58
  190. package/map/client/mixins/map/mixin.edit-layers.js +18 -15
  191. package/map/client/mixins/map/mixin.geojson-layers.js +181 -106
  192. package/map/client/mixins/map/mixin.heatmap-layers.js +3 -2
  193. package/map/client/mixins/map/mixin.map-activity.js +6 -1
  194. package/map/client/mixins/map/mixin.mapillary-layers.js +2 -1
  195. package/map/client/mixins/map/mixin.pmtiles-layers.js +3 -3
  196. package/map/client/mixins/map/mixin.tiled-mesh-layers.js +3 -2
  197. package/map/client/mixins/map/mixin.tiled-wind-layers.js +3 -2
  198. package/map/client/mixins/mixin.activity.js +203 -48
  199. package/map/client/mixins/mixin.context.js +11 -11
  200. package/map/client/mixins/mixin.feature-service.js +11 -9
  201. package/map/client/mixins/mixin.weacast.js +5 -3
  202. package/map/client/readers/reader.geojson.js +3 -1
  203. package/map/client/utils/utils.capture.js +3 -3
  204. package/map/client/utils/utils.catalog.js +9 -5
  205. package/map/client/utils/utils.features.js +120 -54
  206. package/map/client/utils/utils.js +25 -10
  207. package/map/client/utils/utils.layers.js +148 -26
  208. package/map/client/utils/utils.location.js +26 -9
  209. package/map/client/utils/utils.schema.js +2 -1
  210. package/map/client/utils/utils.style.js +53 -9
  211. package/map/common/geotiff-grid-source.js +1 -3
  212. package/map/common/opendap-utils.js +0 -1
  213. package/map/common/tms-utils.js +0 -1
  214. package/map/common/wcs-utils.js +0 -1
  215. package/map/common/wfs-utils.js +0 -1
  216. package/map/common/wms-utils.js +7 -1
  217. package/map/common/wmts-utils.js +0 -1
  218. package/package.json +12 -12
  219. package/scripts/init_runner.sh +3 -3
  220. package/scripts/kash/CHANGELOG.md +27 -0
  221. package/scripts/kash/kash.sh +556 -237
  222. package/scripts/kash/scripts/run_tests.sh +44 -5
  223. package/scripts/setup_workspace.sh +23 -13
  224. package/test/api/core/config/default.cjs +2 -1
  225. package/test/api/core/push.test.js +1 -1
  226. package/test/api/core/tags.test.js +62 -0
  227. package/test/api/map/config/default.cjs +2 -1
  228. package/test/api/map/config/layers.json +9 -0
  229. package/test/api/map/data/openradiation.json +13811 -0
  230. package/test/api/map/grid-sources.test.js +1 -3
  231. package/test/api/map/index.test.js +60 -1
  232. package/test/api/map/style.test.js +30 -1
  233. package/test.api.js +1 -1
  234. package/vite/App.vue +18 -0
  235. package/vite/AppWithGlobe.vue +84 -0
  236. package/vite/GlobeActivity.vue +58 -0
  237. package/vite/MapActivity.vue +63 -0
  238. package/vite/MapActivityWithGlobe.vue +63 -0
  239. package/vite/README.md +169 -0
  240. package/vite/config.js +221 -0
  241. package/vite/index_with_globe.html +50 -0
  242. package/vite/index_with_map.html +50 -0
  243. package/vite/package.json +173 -0
  244. package/vite/quasar.variables.scss +17 -0
  245. package/vite/vite.config.js +166 -0
  246. package/vite/yarn.lock +11641 -0
  247. package/core/client/components/media/KImageViewer.vue +0 -68
  248. package/core/client/components/media/KMarkdownViewer.vue +0 -55
  249. package/core/client/components/media/KMediaBrowser.vue +0 -301
  250. package/coverage/base.css +0 -224
  251. package/coverage/block-navigation.js +0 -87
  252. package/coverage/core/api/application.js.html +0 -1870
  253. package/coverage/core/api/authentication.js.html +0 -874
  254. package/coverage/core/api/db.js.html +0 -793
  255. package/coverage/core/api/hooks/hooks.authentication.js.html +0 -139
  256. package/coverage/core/api/hooks/hooks.authorisations.js.html +0 -955
  257. package/coverage/core/api/hooks/hooks.groups.js.html +0 -229
  258. package/coverage/core/api/hooks/hooks.logger.js.html +0 -163
  259. package/coverage/core/api/hooks/hooks.model.js.html +0 -955
  260. package/coverage/core/api/hooks/hooks.organisations.js.html +0 -541
  261. package/coverage/core/api/hooks/hooks.push.js.html +0 -265
  262. package/coverage/core/api/hooks/hooks.query.js.html +0 -862
  263. package/coverage/core/api/hooks/hooks.schemas.js.html +0 -298
  264. package/coverage/core/api/hooks/hooks.service.js.html +0 -319
  265. package/coverage/core/api/hooks/hooks.storage.js.html +0 -193
  266. package/coverage/core/api/hooks/hooks.users.js.html +0 -595
  267. package/coverage/core/api/hooks/index.html +0 -266
  268. package/coverage/core/api/hooks/index.js.html +0 -115
  269. package/coverage/core/api/index.html +0 -176
  270. package/coverage/core/api/index.js.html +0 -148
  271. package/coverage/core/api/marshall.js.html +0 -448
  272. package/coverage/core/api/models/groups.model.mongodb.js.html +0 -109
  273. package/coverage/core/api/models/index.html +0 -131
  274. package/coverage/core/api/models/messages.model.mongodb.js.html +0 -121
  275. package/coverage/core/api/models/organisations.model.mongodb.js.html +0 -94
  276. package/coverage/core/api/models/tags.model.mongodb.js.html +0 -115
  277. package/coverage/core/api/models/users.model.mongodb.js.html +0 -115
  278. package/coverage/core/api/services/account/account.hooks.js.html +0 -208
  279. package/coverage/core/api/services/account/account.service.js.html +0 -436
  280. package/coverage/core/api/services/account/index.html +0 -131
  281. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
  282. package/coverage/core/api/services/authorisations/authorisations.service.js.html +0 -532
  283. package/coverage/core/api/services/authorisations/index.html +0 -131
  284. package/coverage/core/api/services/databases/databases.hooks.js.html +0 -193
  285. package/coverage/core/api/services/databases/databases.service.js.html +0 -100
  286. package/coverage/core/api/services/databases/index.html +0 -131
  287. package/coverage/core/api/services/groups/groups.hooks.js.html +0 -178
  288. package/coverage/core/api/services/groups/index.html +0 -116
  289. package/coverage/core/api/services/import-export/import-export.hooks.js.html +0 -184
  290. package/coverage/core/api/services/import-export/import-export.service.js.html +0 -118
  291. package/coverage/core/api/services/import-export/index.html +0 -131
  292. package/coverage/core/api/services/index.html +0 -116
  293. package/coverage/core/api/services/index.js.html +0 -520
  294. package/coverage/core/api/services/mailer/index.html +0 -131
  295. package/coverage/core/api/services/mailer/mailer.hooks.js.html +0 -190
  296. package/coverage/core/api/services/mailer/mailer.service.js.html +0 -118
  297. package/coverage/core/api/services/messages/index.html +0 -116
  298. package/coverage/core/api/services/messages/messages.hooks.js.html +0 -199
  299. package/coverage/core/api/services/organisations/index.html +0 -131
  300. package/coverage/core/api/services/organisations/organisations.hooks.js.html +0 -178
  301. package/coverage/core/api/services/organisations/organisations.service.js.html +0 -343
  302. package/coverage/core/api/services/push/index.html +0 -131
  303. package/coverage/core/api/services/push/push.hooks.js.html +0 -190
  304. package/coverage/core/api/services/push/push.service.js.html +0 -121
  305. package/coverage/core/api/services/storage/index.html +0 -131
  306. package/coverage/core/api/services/storage/storage.hooks.js.html +0 -190
  307. package/coverage/core/api/services/storage/storage.service.js.html +0 -172
  308. package/coverage/core/api/services/tags/index.html +0 -116
  309. package/coverage/core/api/services/tags/tags.hooks.js.html +0 -178
  310. package/coverage/core/api/services/users/index.html +0 -131
  311. package/coverage/core/api/services/users/users.hooks.js.html +0 -307
  312. package/coverage/core/api/services/users/users.service.js.html +0 -100
  313. package/coverage/core/api/utils.js.html +0 -118
  314. package/coverage/core/common/errors.js.html +0 -88
  315. package/coverage/core/common/index.html +0 -191
  316. package/coverage/core/common/index.js.html +0 -115
  317. package/coverage/core/common/permissions.js.html +0 -733
  318. package/coverage/core/common/schema.js.html +0 -190
  319. package/coverage/core/common/utils.js.html +0 -226
  320. package/coverage/core/common/utils.offline.js.html +0 -199
  321. package/coverage/favicon.png +0 -0
  322. package/coverage/index.html +0 -461
  323. package/coverage/lcov-report/base.css +0 -224
  324. package/coverage/lcov-report/block-navigation.js +0 -87
  325. package/coverage/lcov-report/core/api/application.js.html +0 -1870
  326. package/coverage/lcov-report/core/api/authentication.js.html +0 -874
  327. package/coverage/lcov-report/core/api/db.js.html +0 -793
  328. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +0 -139
  329. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +0 -955
  330. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +0 -229
  331. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +0 -163
  332. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +0 -955
  333. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +0 -541
  334. package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +0 -265
  335. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +0 -862
  336. package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +0 -298
  337. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +0 -319
  338. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +0 -193
  339. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +0 -595
  340. package/coverage/lcov-report/core/api/hooks/index.html +0 -266
  341. package/coverage/lcov-report/core/api/hooks/index.js.html +0 -115
  342. package/coverage/lcov-report/core/api/index.html +0 -176
  343. package/coverage/lcov-report/core/api/index.js.html +0 -148
  344. package/coverage/lcov-report/core/api/marshall.js.html +0 -448
  345. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +0 -109
  346. package/coverage/lcov-report/core/api/models/index.html +0 -131
  347. package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +0 -121
  348. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +0 -94
  349. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +0 -115
  350. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +0 -115
  351. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +0 -208
  352. package/coverage/lcov-report/core/api/services/account/account.service.js.html +0 -436
  353. package/coverage/lcov-report/core/api/services/account/index.html +0 -131
  354. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +0 -184
  355. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +0 -532
  356. package/coverage/lcov-report/core/api/services/authorisations/index.html +0 -131
  357. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +0 -193
  358. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +0 -100
  359. package/coverage/lcov-report/core/api/services/databases/index.html +0 -131
  360. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +0 -178
  361. package/coverage/lcov-report/core/api/services/groups/index.html +0 -116
  362. package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +0 -184
  363. package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +0 -118
  364. package/coverage/lcov-report/core/api/services/import-export/index.html +0 -131
  365. package/coverage/lcov-report/core/api/services/index.html +0 -116
  366. package/coverage/lcov-report/core/api/services/index.js.html +0 -520
  367. package/coverage/lcov-report/core/api/services/mailer/index.html +0 -131
  368. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +0 -190
  369. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +0 -118
  370. package/coverage/lcov-report/core/api/services/messages/index.html +0 -116
  371. package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +0 -199
  372. package/coverage/lcov-report/core/api/services/organisations/index.html +0 -131
  373. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +0 -178
  374. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +0 -343
  375. package/coverage/lcov-report/core/api/services/push/index.html +0 -131
  376. package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +0 -190
  377. package/coverage/lcov-report/core/api/services/push/push.service.js.html +0 -121
  378. package/coverage/lcov-report/core/api/services/storage/index.html +0 -131
  379. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +0 -190
  380. package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +0 -172
  381. package/coverage/lcov-report/core/api/services/tags/index.html +0 -116
  382. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +0 -178
  383. package/coverage/lcov-report/core/api/services/users/index.html +0 -131
  384. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +0 -307
  385. package/coverage/lcov-report/core/api/services/users/users.service.js.html +0 -100
  386. package/coverage/lcov-report/core/api/utils.js.html +0 -118
  387. package/coverage/lcov-report/core/common/errors.js.html +0 -88
  388. package/coverage/lcov-report/core/common/index.html +0 -191
  389. package/coverage/lcov-report/core/common/index.js.html +0 -115
  390. package/coverage/lcov-report/core/common/permissions.js.html +0 -733
  391. package/coverage/lcov-report/core/common/schema.js.html +0 -190
  392. package/coverage/lcov-report/core/common/utils.js.html +0 -226
  393. package/coverage/lcov-report/core/common/utils.offline.js.html +0 -199
  394. package/coverage/lcov-report/favicon.png +0 -0
  395. package/coverage/lcov-report/index.html +0 -461
  396. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +0 -463
  397. package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +0 -397
  398. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +0 -1309
  399. package/coverage/lcov-report/map/api/hooks/index.html +0 -161
  400. package/coverage/lcov-report/map/api/hooks/index.js.html +0 -94
  401. package/coverage/lcov-report/map/api/index.html +0 -131
  402. package/coverage/lcov-report/map/api/index.js.html +0 -139
  403. package/coverage/lcov-report/map/api/marshall.js.html +0 -178
  404. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +0 -106
  405. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +0 -127
  406. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +0 -196
  407. package/coverage/lcov-report/map/api/models/index.html +0 -161
  408. package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +0 -109
  409. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +0 -274
  410. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +0 -610
  411. package/coverage/lcov-report/map/api/services/alerts/index.html +0 -131
  412. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +0 -313
  413. package/coverage/lcov-report/map/api/services/catalog/index.html +0 -116
  414. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +0 -1510
  415. package/coverage/lcov-report/map/api/services/daptiles/index.html +0 -116
  416. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +0 -310
  417. package/coverage/lcov-report/map/api/services/features/features.service.js.html +0 -544
  418. package/coverage/lcov-report/map/api/services/features/index.html +0 -131
  419. package/coverage/lcov-report/map/api/services/index.html +0 -116
  420. package/coverage/lcov-report/map/api/services/index.js.html +0 -946
  421. package/coverage/lcov-report/map/api/services/projects/index.html +0 -116
  422. package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +0 -439
  423. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +0 -466
  424. package/coverage/lcov-report/map/common/errors.js.html +0 -94
  425. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +0 -544
  426. package/coverage/lcov-report/map/common/grid.js.html +0 -1612
  427. package/coverage/lcov-report/map/common/index.html +0 -371
  428. package/coverage/lcov-report/map/common/index.js.html +0 -172
  429. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +0 -556
  430. package/coverage/lcov-report/map/common/moment-utils.js.html +0 -157
  431. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +0 -868
  432. package/coverage/lcov-report/map/common/opendap-utils.js.html +0 -826
  433. package/coverage/lcov-report/map/common/permissions.js.html +0 -124
  434. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +0 -418
  435. package/coverage/lcov-report/map/common/tms-utils.js.html +0 -274
  436. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +0 -364
  437. package/coverage/lcov-report/map/common/wcs-utils.js.html +0 -586
  438. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +0 -1033
  439. package/coverage/lcov-report/map/common/wfs-utils.js.html +0 -574
  440. package/coverage/lcov-report/map/common/wms-utils.js.html +0 -451
  441. package/coverage/lcov-report/map/common/wmts-utils.js.html +0 -547
  442. package/coverage/lcov-report/prettify.css +0 -1
  443. package/coverage/lcov-report/prettify.js +0 -2
  444. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  445. package/coverage/lcov-report/sorter.js +0 -196
  446. package/coverage/lcov.info +0 -10392
  447. package/coverage/map/api/hooks/hooks.catalog.js.html +0 -463
  448. package/coverage/map/api/hooks/hooks.features.js.html +0 -397
  449. package/coverage/map/api/hooks/hooks.query.js.html +0 -1309
  450. package/coverage/map/api/hooks/index.html +0 -161
  451. package/coverage/map/api/hooks/index.js.html +0 -94
  452. package/coverage/map/api/index.html +0 -131
  453. package/coverage/map/api/index.js.html +0 -139
  454. package/coverage/map/api/marshall.js.html +0 -178
  455. package/coverage/map/api/models/alerts.model.mongodb.js.html +0 -106
  456. package/coverage/map/api/models/catalog.model.mongodb.js.html +0 -127
  457. package/coverage/map/api/models/features.model.mongodb.js.html +0 -196
  458. package/coverage/map/api/models/index.html +0 -161
  459. package/coverage/map/api/models/projects.model.mongodb.js.html +0 -109
  460. package/coverage/map/api/services/alerts/alerts.hooks.js.html +0 -274
  461. package/coverage/map/api/services/alerts/alerts.service.js.html +0 -610
  462. package/coverage/map/api/services/alerts/index.html +0 -131
  463. package/coverage/map/api/services/catalog/catalog.hooks.js.html +0 -313
  464. package/coverage/map/api/services/catalog/index.html +0 -116
  465. package/coverage/map/api/services/daptiles/daptiles.service.js.html +0 -1510
  466. package/coverage/map/api/services/daptiles/index.html +0 -116
  467. package/coverage/map/api/services/features/features.hooks.js.html +0 -310
  468. package/coverage/map/api/services/features/features.service.js.html +0 -544
  469. package/coverage/map/api/services/features/index.html +0 -131
  470. package/coverage/map/api/services/index.html +0 -116
  471. package/coverage/map/api/services/index.js.html +0 -946
  472. package/coverage/map/api/services/projects/index.html +0 -116
  473. package/coverage/map/api/services/projects/projects.hooks.js.html +0 -439
  474. package/coverage/map/common/dynamic-grid-source.js.html +0 -466
  475. package/coverage/map/common/errors.js.html +0 -94
  476. package/coverage/map/common/geotiff-grid-source.js.html +0 -544
  477. package/coverage/map/common/grid.js.html +0 -1612
  478. package/coverage/map/common/index.html +0 -371
  479. package/coverage/map/common/index.js.html +0 -172
  480. package/coverage/map/common/meteo-model-grid-source.js.html +0 -556
  481. package/coverage/map/common/moment-utils.js.html +0 -157
  482. package/coverage/map/common/opendap-grid-source.js.html +0 -868
  483. package/coverage/map/common/opendap-utils.js.html +0 -826
  484. package/coverage/map/common/permissions.js.html +0 -124
  485. package/coverage/map/common/time-based-grid-source.js.html +0 -418
  486. package/coverage/map/common/tms-utils.js.html +0 -274
  487. package/coverage/map/common/wcs-grid-source.js.html +0 -364
  488. package/coverage/map/common/wcs-utils.js.html +0 -586
  489. package/coverage/map/common/weacast-grid-source.js.html +0 -1033
  490. package/coverage/map/common/wfs-utils.js.html +0 -574
  491. package/coverage/map/common/wms-utils.js.html +0 -451
  492. package/coverage/map/common/wmts-utils.js.html +0 -547
  493. package/coverage/prettify.css +0 -1
  494. package/coverage/prettify.js +0 -2
  495. package/coverage/sort-arrow-sprite.png +0 -0
  496. package/coverage/sorter.js +0 -196
  497. package/coverage/tmp/coverage-122123-1739872365211-0.json +0 -1
  498. package/coverage/tmp/coverage-122135-1739872365196-0.json +0 -1
  499. package/coverage/tmp/coverage-122146-1739872365184-0.json +0 -1
  500. package/coverage/tmp/coverage-122158-1739872365169-0.json +0 -1
  501. package/coverage/tmp/coverage-122165-1739872365141-0.json +0 -1
  502. package/extras/tours/core/account-profile.js +0 -32
  503. package/extras/tours/core/account.js +0 -143
  504. package/extras/tours/core/add-member.js +0 -75
  505. package/extras/tours/core/add-tag.js +0 -13
  506. package/extras/tours/core/create-group.js +0 -19
  507. package/extras/tours/core/create-organisation.js +0 -19
  508. package/extras/tours/core/create-tag.js +0 -26
  509. package/extras/tours/core/edit-member-role.js +0 -13
  510. package/extras/tours/core/groups.js +0 -65
  511. package/extras/tours/core/join-group.js +0 -13
  512. package/extras/tours/core/login.js +0 -41
  513. package/extras/tours/core/members.js +0 -108
  514. package/extras/tours/core/register.js +0 -61
  515. package/extras/tours/core/send-reset-password.js +0 -14
  516. package/extras/tours/core/tags.js +0 -65
  517. package/extras/tours/map/catalog-panel.js +0 -112
  518. package/extras/tours/map/fab.js +0 -26
  519. package/extras/tours/map/navigation-bar.js +0 -187
  520. package/extras/tours/map/side-nav.js +0 -36
  521. package/test/api/core/test-log-2025-05-26.log +0 -22
  522. package/test/api/map/test-log-2025-05-26.log +0 -12
  523. package/test/client/core/api.js +0 -361
  524. package/test/client/core/index.js +0 -9
  525. package/test/client/index.js +0 -4
  526. package/test/client/map/index.js +0 -5
  527. package/test.client.js +0 -1
  528. /package/{test/client/core/time.js → extras/tests/core/time.mjs} +0 -0
  529. /package/extras/tours/{map/add-layer.js → add-layer.js} +0 -0
  530. /package/extras/tours/{map/catalog-categories.js → catalog-categories.js} +0 -0
  531. /package/extras/tours/{map/connect-layer.js → connect-layer.js} +0 -0
  532. /package/extras/tours/{map/create-layer.js → create-layer.js} +0 -0
  533. /package/extras/tours/{map/create-view.js → create-view.js} +0 -0
  534. /package/extras/tours/{map/import-layer.js → import-layer.js} +0 -0
  535. /package/extras/tours/{map/timeline.js → pane.bottom.js} +0 -0
@@ -126,7 +126,9 @@ export function createMarkerFromPointStyle (latlng, style) {
126
126
  logger.warn(`[KDK] 'latlng' should be defined`)
127
127
  return
128
128
  }
129
- return L.shapeMarker(latlng, style)
129
+ const shape = _.get(style, 'shape', 'circle')
130
+ if (shape === 'none' || _.has(kdkCoreUtils.Shapes, shape)) return L.shapeMarker(latlng, style)
131
+ return L[shape](latlng, style)
130
132
  }
131
133
 
132
134
  export function convertLineStyleToLeafletPath (style) {
@@ -147,12 +149,12 @@ export function convertPolygonStyleToLeafletPath (style) {
147
149
  return leafletStyle
148
150
  }
149
151
 
150
- function processStyle (style, feature, options, mappings) {
152
+ function processStyle (style, feature, options, mappings, zoom) {
151
153
  if (!options) return
152
154
  const leafletOptions = options.leaflet || options
153
155
  // We allow to template style properties according to feature,
154
156
  // because it can be slow you have to specify a subset of properties
155
- const context = Object.assign({ properties: feature.properties, feature, chroma, moment, Units, Time }, TemplateContext.get())
157
+ const context = Object.assign({ properties: feature.properties, feature, zoom, chroma, moment, Units, Time }, TemplateContext.get())
156
158
  if (leafletOptions.template) {
157
159
  // Create the map of variables
158
160
  if (options.variables) context.variables = _.reduce(options.variables,
@@ -180,29 +182,26 @@ function processStyle (style, feature, options, mappings) {
180
182
  return style
181
183
  }
182
184
 
183
- export function getDefaultPointStyle (feature, options, engine, engineStylePath = 'style.point') {
184
- const engineStyle = _.get(engine, engineStylePath, {})
185
+ export function getDefaultPointStyle (feature, options, engineStyle = {}, zoom) {
185
186
  const layerStyle = options ? _.get(options.leaflet || options, 'layerPointStyle') : {}
186
- const templateStyle = processStyle({ style: { point: _.merge({}, engineStyle, layerStyle) } }, feature, options, PointStyleTemplateMappings)
187
- const featureStyle = feature.style ? _.get(feature, 'style', {}) : convertSimpleStyleToPointStyle(feature.properties)
187
+ const templateStyle = processStyle({ style: { point: _.merge({}, engineStyle, layerStyle) } }, feature, options, PointStyleTemplateMappings, zoom)
188
+ const featureStyle = _.get(options, 'ignoreFeatureStyle') ? {} : feature.style ? _.get(feature, 'style', {}) : convertSimpleStyleToPointStyle(feature.properties)
188
189
  const style = _.merge({}, engineStyle, layerStyle, templateStyle ? templateStyle.style.point : {}, featureStyle)
189
190
  return style
190
191
  }
191
192
 
192
- export function getDefaultLineStyle (feature, options, engine, engineStylePath = 'style.line') {
193
- const engineStyle = _.get(engine, engineStylePath, {})
193
+ export function getDefaultLineStyle (feature, options, engineStyle = {}, zoom) {
194
194
  const layerStyle = options ? _.get(options.leaflet || options, 'layerLineStyle') : {}
195
- const templateStyle = processStyle({ style: { line: _.merge({}, engineStyle, layerStyle) } }, feature, options, LineStyleTemplateMappings)
196
- const featureStyle = feature.style ? _.get(feature, 'style', {}) : convertSimpleStyleToLineStyle(feature.properties)
195
+ const templateStyle = processStyle({ style: { line: _.merge({}, engineStyle, layerStyle) } }, feature, options, LineStyleTemplateMappings, zoom)
196
+ const featureStyle = _.get(options, 'ignoreFeatureStyle') ? {} : feature.style ? _.get(feature, 'style', {}) : convertSimpleStyleToLineStyle(feature.properties)
197
197
  const style = _.merge({}, engineStyle, layerStyle, templateStyle ? templateStyle.style.line : {}, featureStyle)
198
198
  return convertLineStyleToLeafletPath(style)
199
199
  }
200
200
 
201
- export function getDefaultPolygonStyle (feature, options, engine, engineStylePath = 'style.polygon') {
202
- const engineStyle = _.get(engine, engineStylePath, {})
201
+ export function getDefaultPolygonStyle (feature, options, engineStyle = {}, zoom) {
203
202
  const layerStyle = options ? _.get(options.leaflet || options, 'layerPolygonStyle') : {}
204
- const templateStyle = processStyle({ style: { polygon: _.merge({}, engineStyle, layerStyle) } }, feature, options, PolygonStyleTemplateMappings)
205
- const featureStyle = feature.style ? _.get(feature, 'style', {}) : convertSimpleStyleToPolygonStyle(feature.properties)
203
+ const templateStyle = processStyle({ style: { polygon: _.merge({}, engineStyle, layerStyle) } }, feature, options, PolygonStyleTemplateMappings, zoom)
204
+ const featureStyle = _.get(options, 'ignoreFeatureStyle') ? {} : feature.style ? _.get(feature, 'style', {}) : convertSimpleStyleToPolygonStyle(feature.properties)
206
205
  const style = _.merge({}, engineStyle, layerStyle, templateStyle ? templateStyle.style.polygon : {}, featureStyle)
207
206
  return convertPolygonStyleToLeafletPath(style)
208
207
  }
@@ -1,15 +1,18 @@
1
1
  import _ from 'lodash'
2
2
  import sift from 'sift'
3
3
  import logger from 'loglevel'
4
- import Emitter from 'tiny-emitter'
5
- import { getCssVar } from 'quasar'
4
+ import { EventBus, getCssVar } from 'quasar'
6
5
  import { Ion, Viewer, Color, viewerCesiumInspectorMixin, Rectangle, ScreenSpaceEventType, ScreenSpaceEventHandler, buildModuleUrl,
7
6
  Cesium3DTileset, ImageryLayer, Cartesian3, PinBuilder, BoundingSphere, Ellipsoid, Cartographic, Entity, EntityCollection,
8
- exportKml, VerticalOrigin, Transforms, Quaternion, HeadingPitchRoll, Matrix3, Matrix4, DebugCameraPrimitive, DebugModelMatrixPrimitive, Math as CesiumMath } from 'cesium'
7
+ exportKml, VerticalOrigin, Transforms, HeadingPitchRoll, HeadingPitchRange, Matrix3, Matrix4, DebugCameraPrimitive,
8
+ DebugModelMatrixPrimitive, Math as CesiumMath } from 'cesium'
9
+ // We need to import cesium as an object to dynamically get constructors
10
+ import * as Cesium from 'cesium'
9
11
  import 'cesium/Source/Widgets/widgets.css'
10
12
  import { Geolocation } from '../../geolocation.js'
11
- import { Cesium, convertCesiumHandlerEvent, isTerrainLayer, convertEntitiesToGeoJson, createCesiumObject } from '../../utils.globe.js'
13
+ import { convertCesiumHandlerEvent, isTerrainLayer, convertEntitiesToGeoJson, createCesiumObject } from '../../utils.globe.js'
12
14
  import { generateLayerDefinition } from '../../utils/utils.layers.js'
15
+ import * as maths from '../../../../core/client/utils/utils.math.js'
13
16
 
14
17
  // The URL on our server where CesiumJS's static files are hosted
15
18
  window.CESIUM_BASE_URL = '/Cesium/'
@@ -47,7 +50,8 @@ export const baseGlobe = {
47
50
  animation: false,
48
51
  timeline: false,
49
52
  depthTestAgainstTerrain: false,
50
- cameraMoveEventPercentage: 0.2
53
+ cameraMoveEventPercentage: 0.2,
54
+ entityLoadTextureDelay: 24
51
55
  })
52
56
  if (token) Ion.defaultAccessToken = token
53
57
  // If we don't need ion
@@ -68,20 +72,23 @@ export const baseGlobe = {
68
72
  this.viewer.scene.globe.undergroundColor = (undergroundColor ? createCesiumObject('Color', ...undergroundColor) : Color.BLACK)
69
73
  }
70
74
 
71
- // Cesium pre-render callback used to update moving materials (animated walls/corridors)
72
- this.viewer.scene.preRender.addEventListener(() => {
73
- if (!this.cesiumMaterials) return
74
- _.forEach(this.cesiumMaterials, m => {
75
- if (!m.material.uniforms.offset) return
76
- if (!m.startTime) m.startTime = Date.now()
77
-
78
- const elapsed = (Date.now() - m.startTime) * 0.001
79
- if (m.animationSpeed) {
80
- const loopDuration = (m.length / m.material.uniforms.repeat.x) / m.animationSpeed
81
- m.material.uniforms.offset.x = (elapsed % loopDuration) / loopDuration
75
+ // Enable picking for primitives. Usefull for primitives selection with post processing
76
+ if (!_.has(Cesium.Primitive.prototype, 'pickIds')) {
77
+ Object.defineProperties(Cesium.Primitive.prototype, {
78
+ pickIds: {
79
+ get: function () {
80
+ return this._pickIds
81
+ },
82
+ set: function (value) {
83
+ this._pickIds = value
84
+ }
82
85
  }
83
86
  })
84
- })
87
+ }
88
+
89
+ // Scene events
90
+ this.viewer.scene.preUpdate.addEventListener(this.onCesiumPreUpdate)
91
+ this.viewer.scene.preRender.addEventListener(this.onCesiumPreRender)
85
92
 
86
93
  // Debug mode ?
87
94
  // this.viewerOptions.debug = true
@@ -252,8 +259,10 @@ export const baseGlobe = {
252
259
  if (!this.viewer.scene.primitives.contains(cesiumLayer)) this.viewer.scene.primitives.add(cesiumLayer)
253
260
  } else { // Entity data source otherwise
254
261
  // Handle potential custom primitives
255
- for (const [id, custom] of cesiumLayer.primitives)
256
- custom.primitive.show = true
262
+ if (cesiumLayer.primitives) {
263
+ for (const [id, custom] of cesiumLayer.primitives)
264
+ custom.primitive.show = true
265
+ }
257
266
  this.viewer.dataSources.add(cesiumLayer)
258
267
  }
259
268
  layer.isVisible = true
@@ -281,8 +290,10 @@ export const baseGlobe = {
281
290
  cesiumLayer.show = false
282
291
  } else { // Entity data source otherwise
283
292
  // Hide custom primitives before removing the data source
284
- for (const [id, custom] of cesiumLayer.primitives)
285
- custom.primitive.show = false
293
+ if (cesiumLayer.primitives) {
294
+ for (const [id, custom] of cesiumLayer.primitives)
295
+ custom.primitive.show = false
296
+ }
286
297
  this.viewer.dataSources.remove(cesiumLayer, true)
287
298
  }
288
299
  this.onLayerHidden(layer, cesiumLayer)
@@ -307,15 +318,17 @@ export const baseGlobe = {
307
318
  this.$emit('layer-added', layer)
308
319
  this.$engineEvents.emit('layer-added', layer)
309
320
  },
310
- async addGeoJsonLayer (layerSpec, geoJson) {
321
+ async addGeoJsonLayer (layerSpec, geoJson, zoom) {
311
322
  if (!generateLayerDefinition(layerSpec, geoJson)) return
312
323
  // Create an empty layer
313
324
  await this.addLayer(layerSpec)
314
325
  // Update the layer with the geoJson content
315
326
  await this.updateLayer(layerSpec.name, geoJson)
316
327
  // Zoom to the layer
317
- if (geoJson.bbox) this.zoomToBBox(geoJson.bbox)
318
- else this.zoomToLayer(layerSpec.name)
328
+ if (zoom) {
329
+ if (geoJson.bbox) this.zoomToBBox(geoJson.bbox)
330
+ else this.zoomToLayer(layerSpec.name)
331
+ }
319
332
  },
320
333
  renameLayer (previousName, newName) {
321
334
  const layer = this.getLayerByName(previousName)
@@ -489,29 +502,115 @@ export const baseGlobe = {
489
502
  altitude: position.height,
490
503
  heading: CesiumMath.toDegrees(this.viewer.camera.heading),
491
504
  pitch: CesiumMath.toDegrees(this.viewer.camera.pitch),
492
- roll: CesiumMath.toDegrees(this.viewer.camera.roll)
505
+ roll: CesiumMath.toDegrees(this.viewer.camera.roll),
506
+ fovy: this.viewer.camera.frustum.fovy,
507
+ viewMatrix: this.viewer.camera.viewMatrix,
508
+ inverseViewMatrix: this.viewer.camera.inverseViewMatrix
493
509
  }
494
510
  },
511
+ getAnimatedHeading (timestamp) {
512
+ if (!this.headingAnimation.startTime) this.headingAnimation.startTime = timestamp
513
+ const { duration, startTime, easing, startHeading, endHeading } = this.headingAnimation
514
+ const elapsed = timestamp - startTime
515
+ const percent = Math.abs(elapsed / (1000 * duration))
516
+ if (percent > 1) {
517
+ return endHeading
518
+ }
519
+
520
+ const easingFunction = _.get(easing, 'function', 'cubicBezier')
521
+ const easingParameters = _.get(easing, 'parameters', [])
522
+ const percentHeading = maths[easingFunction](percent, ...easingParameters)
523
+
524
+ return CesiumMath.lerp(
525
+ startHeading,
526
+ endHeading,
527
+ percentHeading
528
+ )
529
+ },
495
530
  onEntityTracked (time) {
531
+ const getSmallestAngle = (start, end) => {
532
+ let diff = (end - start + Math.PI) % (2 * Math.PI)
533
+ if (diff < 0) diff += 2 * Math.PI
534
+ return diff - Math.PI
535
+ }
536
+
496
537
  if (this.viewerOptions.debug) {
497
538
  if (this.trackedFrameDebug) {
498
539
  this.trackedFrameDebug.modelMatrix = this.viewer.trackedEntity.computeModelMatrix(time)
499
540
  } else {
500
541
  this.trackedFrameDebug = new DebugModelMatrixPrimitive({
501
- modelMatrix : this.viewer.trackedEntity.computeModelMatrix(time),
502
- length : 25,
503
- width : 5
542
+ modelMatrix: this.viewer.trackedEntity.computeModelMatrix(time),
543
+ length: 25,
544
+ width: 5
504
545
  })
505
546
  this.viewer.scene.primitives.add(this.trackedFrameDebug)
506
547
  }
507
548
  }
549
+
550
+ if (!this.viewer.trackedEntity || !_.get(this.entityTrackingOptions, 'mode')) return
551
+ const mode = this.entityTrackingOptions.mode
552
+ const currentTime = Date.now()
553
+ // If we are in free look mode, we don't want to force camera position
554
+ if (mode === 'freeLook' && !_.get(this.entityTrackingOptions, 'resetHeading')) return
555
+
556
+ const targetPosition = this.viewer.trackedEntity.position.getValue(time)
557
+ const orientation = this.viewer.trackedEntity.orientation.getValue(time)
558
+ if (!orientation) return
559
+
560
+ const distance = _.get(this.entityTrackingOptions, 'distance', 10)
561
+ const headingOffset = CesiumMath.toRadians(_.get(this.entityTrackingOptions, 'offset.heading', 0))
562
+ const pitchOffset = CesiumMath.toRadians(_.get(this.entityTrackingOptions, 'offset.pitch', 0))
563
+ const headingPitchRoll = HeadingPitchRoll.fromQuaternion(orientation)
564
+ if (_.get(this.entityTrackingOptions, 'animate')) {
565
+ if (!this.headingAnimation) {
566
+ this.headingAnimation = {
567
+ ...this.entityTrackingOptions,
568
+ startTime: currentTime,
569
+ startHeading: this.viewer.camera.heading - headingOffset,
570
+ endHeading: mode === 'freeLook' ? 0 - headingOffset : headingPitchRoll.heading
571
+ }
572
+
573
+ // Fix endHeading to get shortest angle
574
+ this.headingAnimation.endHeading = this.headingAnimation.startHeading + getSmallestAngle(this.headingAnimation.startHeading, this.headingAnimation.endHeading)
575
+ } else if (mode === 'followOrientation') {
576
+ // If we are already animating, update the end heading
577
+ this.headingAnimation.endHeading = this.headingAnimation.startHeading + getSmallestAngle(this.headingAnimation.startHeading, headingPitchRoll.heading)
578
+ }
579
+ }
580
+
581
+ // Compute heading with animation
582
+ let heading = 0
583
+ if (_.get(this.entityTrackingOptions, 'animate')) {
584
+ heading = this.getAnimatedHeading(currentTime)
585
+ if (heading === this.headingAnimation.endHeading) {
586
+ _.set(this.entityTrackingOptions, 'animate', false)
587
+ _.set(this.entityTrackingOptions, 'resetHeading', false)
588
+ this.headingAnimation = null
589
+ }
590
+ } else if (mode === 'followOrientation') {
591
+ heading = headingPitchRoll.heading
592
+ }
593
+
594
+ const position = new Cartesian3(
595
+ targetPosition.x + _.get(this.entityTrackingOptions, 'offset.x', 0),
596
+ targetPosition.y + _.get(this.entityTrackingOptions, 'offset.y', 0),
597
+ targetPosition.z + _.get(this.entityTrackingOptions, 'offset.z', 0)
598
+ )
599
+ const cameraOffset = new HeadingPitchRange(
600
+ heading + headingOffset,
601
+ pitchOffset,
602
+ distance
603
+ )
604
+
605
+ this.viewer.camera.lookAt(new Cartesian3(position.x, position.y, position.z), cameraOffset)
508
606
  },
509
607
  trackEntity (entityId, options = {}) {
608
+ let newEntity = null
510
609
  // Check for entities directly added to the viewer
511
610
  this.viewer.entities.values.forEach(entity => {
512
611
  if (entityId === entity.id) {
513
612
  // Make the camera track this entity
514
- this.viewer.trackedEntity = entity
613
+ newEntity = entity
515
614
  }
516
615
  })
517
616
  // Check for external data sources
@@ -520,13 +619,20 @@ export const baseGlobe = {
520
619
  source.entities.values.forEach(entity => {
521
620
  if (entityId === entity.id) {
522
621
  // Make the camera track this entity
523
- this.viewer.trackedEntity = entity
622
+ newEntity = entity
524
623
  }
525
624
  })
526
625
  }
527
- if (this.viewer.trackedEntity) {
528
- this.viewer.clock.onTick.addEventListener(this.onEntityTracked)
529
- }
626
+
627
+ if (!newEntity) return
628
+ this.entityTrackingOptions = options
629
+ _.set(this.entityTrackingOptions, 'animate', true)
630
+ if (newEntity === this.viewer.trackedEntity) return
631
+
632
+ // Untrack previous entity
633
+ this.untrackEntity()
634
+ this.viewer.trackedEntity = newEntity
635
+ this.viewer.clock.onTick.addEventListener(this.onEntityTracked)
530
636
  },
531
637
  untrackEntity () {
532
638
  if (this.viewer.trackedEntity) {
@@ -673,6 +779,46 @@ export const baseGlobe = {
673
779
  altitude: pickedPositionCartographic.height
674
780
  }
675
781
  },
782
+ onCesiumPreUpdate () {
783
+ // Update animated entities
784
+ const endedAnimationsIndexes = []
785
+ const interpolatedFeaturesByLayer = {}
786
+ _.forOwn(this.cesiumAnimations, async (animation, key) => {
787
+ const now = Date.now()
788
+ if (animation.fps && animation.lastUpdate && (now - animation.lastUpdate < (1000 / animation.fps))) return
789
+ const delta = now - animation.lastUpdate
790
+ animation.remainingTime -= delta
791
+ if (animation.remainingTime <= 0) {
792
+ endedAnimationsIndexes.push(key)
793
+ return
794
+ }
795
+
796
+ interpolatedFeaturesByLayer[key] = this.getInterpolatedFeatures(1 - (animation.remainingTime / animation.duration), animation.features, animation.animate)
797
+
798
+ animation.lastUpdate = now
799
+ })
800
+ // Remove ended animations
801
+ _.forEach(endedAnimationsIndexes, key => delete this.cesiumAnimations[key])
802
+
803
+ // Update layers with interpolated features
804
+ _.forOwn(interpolatedFeaturesByLayer, async (features, layerName) => {
805
+ await this.updateLayer(layerName, { type: 'FeatureCollection', features })
806
+ })
807
+ },
808
+ onCesiumPreRender () {
809
+ // Update moving materials (animated walls/corridors)
810
+ if (!this.cesiumMaterials) return
811
+ _.forEach(this.cesiumMaterials, m => {
812
+ if (!m.material.uniforms.offset) return
813
+ if (!m.startTime) m.startTime = Date.now()
814
+
815
+ const elapsed = (Date.now() - m.startTime) * 0.001
816
+ if (m.animationSpeed) {
817
+ const loopDuration = (m.length / m.material.uniforms.repeat.x) / m.animationSpeed
818
+ m.material.uniforms.offset.x = (elapsed % loopDuration) / loopDuration
819
+ }
820
+ })
821
+ },
676
822
  onCameraMoveStart () {
677
823
  let target = this.getCameraEllipsoidTarget()
678
824
  if (target) {
@@ -735,10 +881,11 @@ export const baseGlobe = {
735
881
  this.cesiumFactory = []
736
882
  this.cesiumMaterials = []
737
883
  this.cesiumPostProcessStages = {}
884
+ this.cesiumAnimations = {}
738
885
  // TODO: no specific marker, just keep status
739
886
  this.userLocation = false
740
887
  // Internal event bus
741
- this.$engineEvents = new Emitter()
888
+ this.$engineEvents = new EventBus()
742
889
  },
743
890
  beforeUnmount () {
744
891
  this.clearLayers()
@@ -26,9 +26,12 @@ export const fileLayers = {
26
26
  label: source.name,
27
27
  type: 'OverlayLayer',
28
28
  icon: 'insert_drive_file',
29
+ scope: 'user',
30
+ isDataEditable: true,
29
31
  cesium: {
30
32
  type: 'geoJson',
31
33
  isVisible: true,
34
+ realtime: true,
32
35
  cluster: _.get(fileLayersOptions, 'cluster', { pixelRange: 50 }),
33
36
  entityStyle: _.get(fileLayersOptions, 'entityStyle'),
34
37
  source: source.name // Set the data source name instead of URL in this case