@vcmap/core 6.2.2 → 6.3.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/index.d.ts +3 -1
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/category/category.d.ts +1 -1
  5. package/dist/src/category/category.js +3 -4
  6. package/dist/src/category/category.js.map +1 -1
  7. package/dist/src/featureProvider/abstractFeatureProvider.d.ts +1 -1
  8. package/dist/src/featureProvider/abstractFeatureProvider.js +3 -4
  9. package/dist/src/featureProvider/abstractFeatureProvider.js.map +1 -1
  10. package/dist/src/featureProvider/wmsFeatureProvider.d.ts +3 -1
  11. package/dist/src/featureProvider/wmsFeatureProvider.js +37 -9
  12. package/dist/src/featureProvider/wmsFeatureProvider.js.map +1 -1
  13. package/dist/src/interaction/coordinateAtPixel.js +4 -6
  14. package/dist/src/interaction/coordinateAtPixel.js.map +1 -1
  15. package/dist/src/interaction/ensurePositionInteraction.d.ts +14 -0
  16. package/dist/src/interaction/ensurePositionInteraction.js +42 -0
  17. package/dist/src/interaction/ensurePositionInteraction.js.map +1 -0
  18. package/dist/src/interaction/eventHandler.d.ts +3 -0
  19. package/dist/src/interaction/eventHandler.js +10 -1
  20. package/dist/src/interaction/eventHandler.js.map +1 -1
  21. package/dist/src/interaction/featureAtPixelInteraction.js +29 -17
  22. package/dist/src/interaction/featureAtPixelInteraction.js.map +1 -1
  23. package/dist/src/interaction/panoramaImageSelection.js +2 -2
  24. package/dist/src/interaction/panoramaImageSelection.js.map +1 -1
  25. package/dist/src/layer/cesium/cesiumTilesetCesiumImpl.d.ts +3 -3
  26. package/dist/src/layer/cesium/cesiumTilesetCesiumImpl.js.map +1 -1
  27. package/dist/src/layer/cesium/cogImageryProvider.d.ts +2 -2
  28. package/dist/src/layer/cesium/cogImageryProvider.js +6 -26
  29. package/dist/src/layer/cesium/cogImageryProvider.js.map +1 -1
  30. package/dist/src/layer/cesium/rasterLayerCesiumImpl.d.ts +3 -3
  31. package/dist/src/layer/cesium/rasterLayerCesiumImpl.js.map +1 -1
  32. package/dist/src/layer/cesium/terrainCesiumImpl.d.ts +3 -3
  33. package/dist/src/layer/cesium/terrainCesiumImpl.js.map +1 -1
  34. package/dist/src/layer/cesium/vectorContext.js +1 -1
  35. package/dist/src/layer/cesium/vectorContext.js.map +1 -1
  36. package/dist/src/layer/cesiumTilesetLayer.d.ts +1 -1
  37. package/dist/src/layer/cesiumTilesetLayer.js +7 -7
  38. package/dist/src/layer/cesiumTilesetLayer.js.map +1 -1
  39. package/dist/src/layer/cogLayer.d.ts +7 -2
  40. package/dist/src/layer/cogLayer.js +10 -4
  41. package/dist/src/layer/cogLayer.js.map +1 -1
  42. package/dist/src/layer/czmlLayer.d.ts +1 -1
  43. package/dist/src/layer/czmlLayer.js +4 -4
  44. package/dist/src/layer/czmlLayer.js.map +1 -1
  45. package/dist/src/layer/featureLayer.d.ts +1 -6
  46. package/dist/src/layer/featureLayer.js +3 -10
  47. package/dist/src/layer/featureLayer.js.map +1 -1
  48. package/dist/src/layer/featureStoreLayer.d.ts +3 -2
  49. package/dist/src/layer/featureStoreLayer.js +5 -5
  50. package/dist/src/layer/featureStoreLayer.js.map +1 -1
  51. package/dist/src/layer/flatGeobufLayer.d.ts +2 -0
  52. package/dist/src/layer/flatGeobufLayer.js +8 -0
  53. package/dist/src/layer/flatGeobufLayer.js.map +1 -1
  54. package/dist/src/layer/geojsonLayer.d.ts +1 -1
  55. package/dist/src/layer/geojsonLayer.js +5 -12
  56. package/dist/src/layer/geojsonLayer.js.map +1 -1
  57. package/dist/src/layer/layer.d.ts +21 -7
  58. package/dist/src/layer/layer.js +107 -33
  59. package/dist/src/layer/layer.js.map +1 -1
  60. package/dist/src/layer/openStreetMapLayer.d.ts +1 -1
  61. package/dist/src/layer/openStreetMapLayer.js +11 -6
  62. package/dist/src/layer/openStreetMapLayer.js.map +1 -1
  63. package/dist/src/layer/panorama/vectorPanoramaImpl.d.ts +38 -0
  64. package/dist/src/layer/panorama/vectorPanoramaImpl.js +164 -0
  65. package/dist/src/layer/panorama/vectorPanoramaImpl.js.map +1 -0
  66. package/dist/src/layer/panoramaDatasetLayer.d.ts +5 -3
  67. package/dist/src/layer/panoramaDatasetLayer.js +13 -7
  68. package/dist/src/layer/panoramaDatasetLayer.js.map +1 -1
  69. package/dist/src/layer/pointCloudLayer.d.ts +1 -5
  70. package/dist/src/layer/pointCloudLayer.js +3 -15
  71. package/dist/src/layer/pointCloudLayer.js.map +1 -1
  72. package/dist/src/layer/rasterLayer.d.ts +1 -1
  73. package/dist/src/layer/rasterLayer.js +4 -4
  74. package/dist/src/layer/rasterLayer.js.map +1 -1
  75. package/dist/src/layer/singleImageLayer.d.ts +1 -1
  76. package/dist/src/layer/singleImageLayer.js +3 -3
  77. package/dist/src/layer/singleImageLayer.js.map +1 -1
  78. package/dist/src/layer/terrainLayer.d.ts +1 -1
  79. package/dist/src/layer/terrainLayer.js +8 -6
  80. package/dist/src/layer/terrainLayer.js.map +1 -1
  81. package/dist/src/layer/tileProvider/flatGeobufTileProvider.d.ts +1 -1
  82. package/dist/src/layer/tileProvider/flatGeobufTileProvider.js +4 -3
  83. package/dist/src/layer/tileProvider/flatGeobufTileProvider.js.map +1 -1
  84. package/dist/src/layer/tileProvider/mvtTileProvider.d.ts +1 -1
  85. package/dist/src/layer/tileProvider/mvtTileProvider.js +3 -3
  86. package/dist/src/layer/tileProvider/mvtTileProvider.js.map +1 -1
  87. package/dist/src/layer/tileProvider/staticFeatureTileProvider.d.ts +1 -1
  88. package/dist/src/layer/tileProvider/staticFeatureTileProvider.js +3 -3
  89. package/dist/src/layer/tileProvider/staticFeatureTileProvider.js.map +1 -1
  90. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.d.ts +1 -1
  91. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.js +7 -4
  92. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.js.map +1 -1
  93. package/dist/src/layer/tileProvider/tileProvider.d.ts +1 -1
  94. package/dist/src/layer/tileProvider/tileProvider.js +3 -4
  95. package/dist/src/layer/tileProvider/tileProvider.js.map +1 -1
  96. package/dist/src/layer/tileProvider/urlTemplateTileProvider.d.ts +1 -1
  97. package/dist/src/layer/tileProvider/urlTemplateTileProvider.js +3 -3
  98. package/dist/src/layer/tileProvider/urlTemplateTileProvider.js.map +1 -1
  99. package/dist/src/layer/tmsLayer.d.ts +1 -1
  100. package/dist/src/layer/tmsLayer.js +3 -10
  101. package/dist/src/layer/tmsLayer.js.map +1 -1
  102. package/dist/src/layer/vectorLayer.d.ts +11 -5
  103. package/dist/src/layer/vectorLayer.js +19 -8
  104. package/dist/src/layer/vectorLayer.js.map +1 -1
  105. package/dist/src/layer/vectorTileLayer.d.ts +1 -1
  106. package/dist/src/layer/vectorTileLayer.js +4 -5
  107. package/dist/src/layer/vectorTileLayer.js.map +1 -1
  108. package/dist/src/layer/wfsLayer.d.ts +1 -1
  109. package/dist/src/layer/wfsLayer.js +5 -4
  110. package/dist/src/layer/wfsLayer.js.map +1 -1
  111. package/dist/src/layer/wmsLayer.d.ts +1 -1
  112. package/dist/src/layer/wmsLayer.js +3 -4
  113. package/dist/src/layer/wmsLayer.js.map +1 -1
  114. package/dist/src/layer/wmtsLayer.d.ts +1 -1
  115. package/dist/src/layer/wmtsLayer.js +3 -10
  116. package/dist/src/layer/wmtsLayer.js.map +1 -1
  117. package/dist/src/map/baseCesiumMap.d.ts +69 -0
  118. package/dist/src/map/baseCesiumMap.js +381 -0
  119. package/dist/src/map/baseCesiumMap.js.map +1 -0
  120. package/dist/src/map/cesiumMap.d.ts +6 -98
  121. package/dist/src/map/cesiumMap.js +32 -258
  122. package/dist/src/map/cesiumMap.js.map +1 -1
  123. package/dist/src/map/obliqueMap.d.ts +1 -1
  124. package/dist/src/map/obliqueMap.js +3 -4
  125. package/dist/src/map/obliqueMap.js.map +1 -1
  126. package/dist/src/map/openlayersMap.d.ts +1 -1
  127. package/dist/src/map/openlayersMap.js +3 -4
  128. package/dist/src/map/openlayersMap.js.map +1 -1
  129. package/dist/src/map/panoramaMap.d.ts +17 -29
  130. package/dist/src/map/panoramaMap.js +56 -100
  131. package/dist/src/map/panoramaMap.js.map +1 -1
  132. package/dist/src/map/vcsMap.d.ts +15 -2
  133. package/dist/src/map/vcsMap.js +26 -3
  134. package/dist/src/map/vcsMap.js.map +1 -1
  135. package/dist/src/oblique/obliqueCollection.d.ts +1 -1
  136. package/dist/src/oblique/obliqueCollection.js +3 -4
  137. package/dist/src/oblique/obliqueCollection.js.map +1 -1
  138. package/dist/src/panorama/panoramaCameraController.d.ts +4 -0
  139. package/dist/src/panorama/panoramaCameraController.js +8 -0
  140. package/dist/src/panorama/panoramaCameraController.js.map +1 -1
  141. package/dist/src/panorama/panoramaImage.d.ts +10 -1
  142. package/dist/src/panorama/panoramaImage.js +9 -4
  143. package/dist/src/panorama/panoramaImage.js.map +1 -1
  144. package/dist/src/panorama/panoramaImageView.d.ts +6 -1
  145. package/dist/src/panorama/panoramaImageView.js +11 -2
  146. package/dist/src/panorama/panoramaImageView.js.map +1 -1
  147. package/dist/src/panorama/panoramaTileMaterial.d.ts +6 -0
  148. package/dist/src/panorama/panoramaTileMaterial.js +14 -0
  149. package/dist/src/panorama/panoramaTileMaterial.js.map +1 -1
  150. package/dist/src/panorama/panoramaTileMaterialFS.shader.d.ts +1 -1
  151. package/dist/src/panorama/panoramaTileMaterialFS.shader.js +16 -1
  152. package/dist/src/panorama/panoramaTileMaterialFS.shader.js.map +1 -1
  153. package/dist/src/panorama/panoramaTilePrimitiveCollection.d.ts +6 -0
  154. package/dist/src/panorama/panoramaTilePrimitiveCollection.js +28 -0
  155. package/dist/src/panorama/panoramaTilePrimitiveCollection.js.map +1 -1
  156. package/dist/src/util/clipping/clippingPolygonObject.d.ts +1 -1
  157. package/dist/src/util/clipping/clippingPolygonObject.js +3 -4
  158. package/dist/src/util/clipping/clippingPolygonObject.js.map +1 -1
  159. package/dist/src/util/displayQuality/displayQuality.js +4 -4
  160. package/dist/src/util/displayQuality/displayQuality.js.map +1 -1
  161. package/dist/src/util/editor/createFeatureSession.js +3 -1
  162. package/dist/src/util/editor/createFeatureSession.js.map +1 -1
  163. package/dist/src/util/editor/editFeaturesSession.js +9 -2
  164. package/dist/src/util/editor/editFeaturesSession.js.map +1 -1
  165. package/dist/src/util/editor/editGeometrySession.js +3 -1
  166. package/dist/src/util/editor/editGeometrySession.js.map +1 -1
  167. package/dist/src/util/editor/editorSessionHelpers.d.ts +3 -3
  168. package/dist/src/util/editor/editorSessionHelpers.js +4 -2
  169. package/dist/src/util/editor/editorSessionHelpers.js.map +1 -1
  170. package/dist/src/util/editor/interactions/creationSnapping.js +4 -1
  171. package/dist/src/util/editor/interactions/creationSnapping.js.map +1 -1
  172. package/dist/src/util/editor/interactions/ensureHandlerSelectionInteraction.js +2 -2
  173. package/dist/src/util/editor/interactions/ensureHandlerSelectionInteraction.js.map +1 -1
  174. package/dist/src/util/editor/interactions/layerSnapping.js +4 -1
  175. package/dist/src/util/editor/interactions/layerSnapping.js.map +1 -1
  176. package/dist/src/util/editor/interactions/mapInteractionController.js +12 -1
  177. package/dist/src/util/editor/interactions/mapInteractionController.js.map +1 -1
  178. package/dist/src/util/editor/interactions/translationSnapping.js +4 -2
  179. package/dist/src/util/editor/interactions/translationSnapping.js.map +1 -1
  180. package/dist/src/util/editor/selectFeaturesSession.js +1 -1
  181. package/dist/src/util/editor/selectFeaturesSession.js.map +1 -1
  182. package/dist/src/util/editor/transformation/create3DHandlers.d.ts +2 -2
  183. package/dist/src/util/editor/transformation/create3DHandlers.js.map +1 -1
  184. package/dist/src/util/editor/transformation/transformationHandler.js +5 -2
  185. package/dist/src/util/editor/transformation/transformationHandler.js.map +1 -1
  186. package/dist/src/util/editor/transformation/translateInteraction.js +2 -2
  187. package/dist/src/util/editor/transformation/translateInteraction.js.map +1 -1
  188. package/dist/src/util/flight/flightInstance.d.ts +1 -1
  189. package/dist/src/util/flight/flightInstance.js +3 -4
  190. package/dist/src/util/flight/flightInstance.js.map +1 -1
  191. package/dist/src/util/mapCollection.d.ts +5 -0
  192. package/dist/src/util/mapCollection.js +14 -0
  193. package/dist/src/util/mapCollection.js.map +1 -1
  194. package/dist/src/util/renderScreenshot.js +2 -3
  195. package/dist/src/util/renderScreenshot.js.map +1 -1
  196. package/dist/src/util/viewpoint.js +1 -1
  197. package/dist/src/util/viewpoint.js.map +1 -1
  198. package/dist/src/vcsObject.d.ts +2 -1
  199. package/dist/src/vcsObject.js +9 -1
  200. package/dist/src/vcsObject.js.map +1 -1
  201. package/dist/src/vectorCluster/vectorClusterGroup.d.ts +1 -1
  202. package/dist/src/vectorCluster/vectorClusterGroup.js +3 -4
  203. package/dist/src/vectorCluster/vectorClusterGroup.js.map +1 -1
  204. package/dist/src/vectorCluster/vectorClusterStyleItem.d.ts +1 -1
  205. package/dist/src/vectorCluster/vectorClusterStyleItem.js +3 -4
  206. package/dist/src/vectorCluster/vectorClusterStyleItem.js.map +1 -1
  207. package/dist/tests/unit/helpers/cesiumHelpers.d.ts +11 -1
  208. package/dist/tests/unit/helpers/cesiumHelpers.js +19 -2
  209. package/dist/tests/unit/helpers/cesiumHelpers.js.map +1 -1
  210. package/dist/tests/unit/helpers/panoramaHelpers.js +1 -1
  211. package/dist/tests/unit/helpers/panoramaHelpers.js.map +1 -1
  212. package/index.ts +3 -5
  213. package/package.json +2 -2
  214. package/src/category/category.ts +3 -4
  215. package/src/featureProvider/abstractFeatureProvider.ts +5 -4
  216. package/src/featureProvider/wmsFeatureProvider.ts +52 -14
  217. package/src/global.d.ts +0 -1
  218. package/src/interaction/coordinateAtPixel.ts +4 -6
  219. package/src/interaction/ensurePositionInteraction.ts +50 -0
  220. package/src/interaction/eventHandler.ts +12 -1
  221. package/src/interaction/featureAtPixelInteraction.ts +39 -29
  222. package/src/interaction/panoramaImageSelection.ts +4 -2
  223. package/src/layer/cesium/cesiumTilesetCesiumImpl.ts +3 -3
  224. package/src/layer/cesium/cogImageryProvider.ts +9 -26
  225. package/src/layer/cesium/rasterLayerCesiumImpl.ts +3 -3
  226. package/src/layer/cesium/terrainCesiumImpl.ts +3 -3
  227. package/src/layer/cesium/vectorContext.ts +1 -1
  228. package/src/layer/cesiumTilesetLayer.ts +9 -7
  229. package/src/layer/cogLayer.ts +22 -6
  230. package/src/layer/czmlLayer.ts +4 -4
  231. package/src/layer/featureLayer.ts +5 -16
  232. package/src/layer/featureStoreLayer.ts +11 -5
  233. package/src/layer/flatGeobufLayer.ts +12 -0
  234. package/src/layer/geojsonLayer.ts +5 -12
  235. package/src/layer/layer.ts +148 -36
  236. package/src/layer/openStreetMapLayer.ts +13 -6
  237. package/src/layer/panorama/vectorPanoramaImpl.ts +238 -0
  238. package/src/layer/panoramaDatasetLayer.ts +25 -10
  239. package/src/layer/pointCloudLayer.ts +5 -20
  240. package/src/layer/rasterLayer.ts +4 -4
  241. package/src/layer/singleImageLayer.ts +5 -3
  242. package/src/layer/terrainLayer.ts +9 -6
  243. package/src/layer/tileProvider/flatGeobufTileProvider.ts +6 -3
  244. package/src/layer/tileProvider/mvtTileProvider.ts +7 -3
  245. package/src/layer/tileProvider/staticFeatureTileProvider.ts +5 -3
  246. package/src/layer/tileProvider/staticGeojsonTileProvider.ts +11 -4
  247. package/src/layer/tileProvider/tileProvider.ts +5 -4
  248. package/src/layer/tileProvider/urlTemplateTileProvider.ts +7 -3
  249. package/src/layer/tmsLayer.ts +3 -10
  250. package/src/layer/vectorLayer.ts +25 -9
  251. package/src/layer/vectorTileLayer.ts +6 -6
  252. package/src/layer/wfsLayer.ts +7 -4
  253. package/src/layer/wmsLayer.ts +3 -4
  254. package/src/layer/wmtsLayer.ts +3 -10
  255. package/src/map/baseCesiumMap.ts +576 -0
  256. package/src/map/cesiumMap.ts +103 -446
  257. package/src/map/obliqueMap.ts +3 -4
  258. package/src/map/openlayersMap.ts +5 -5
  259. package/src/map/panoramaMap.ts +74 -139
  260. package/src/map/vcsMap.ts +44 -4
  261. package/src/oblique/obliqueCollection.ts +5 -4
  262. package/src/panorama/panoramaCameraController.ts +13 -1
  263. package/src/panorama/panoramaImage.ts +17 -3
  264. package/src/panorama/panoramaImageView.ts +29 -3
  265. package/src/panorama/panoramaTileMaterial.ts +20 -0
  266. package/src/panorama/panoramaTileMaterialFS.glsl +16 -1
  267. package/src/panorama/panoramaTilePrimitiveCollection.ts +34 -0
  268. package/src/util/clipping/clippingPolygonObject.ts +5 -4
  269. package/src/util/displayQuality/displayQuality.ts +4 -4
  270. package/src/util/editor/createFeatureSession.ts +4 -1
  271. package/src/util/editor/editFeaturesSession.ts +14 -4
  272. package/src/util/editor/editGeometrySession.ts +3 -1
  273. package/src/util/editor/editorSessionHelpers.ts +5 -3
  274. package/src/util/editor/interactions/creationSnapping.ts +7 -1
  275. package/src/util/editor/interactions/ensureHandlerSelectionInteraction.ts +2 -2
  276. package/src/util/editor/interactions/layerSnapping.ts +7 -1
  277. package/src/util/editor/interactions/mapInteractionController.ts +12 -2
  278. package/src/util/editor/interactions/translationSnapping.ts +6 -4
  279. package/src/util/editor/selectFeaturesSession.ts +1 -1
  280. package/src/util/editor/transformation/create3DHandlers.ts +2 -2
  281. package/src/util/editor/transformation/transformationHandler.ts +5 -3
  282. package/src/util/editor/transformation/translateInteraction.ts +4 -4
  283. package/src/util/flight/flightInstance.ts +6 -5
  284. package/src/util/mapCollection.ts +18 -0
  285. package/src/util/renderScreenshot.ts +4 -8
  286. package/src/util/viewpoint.ts +2 -2
  287. package/src/vcsObject.ts +10 -1
  288. package/src/vectorCluster/vectorClusterGroup.ts +7 -4
  289. package/src/vectorCluster/vectorClusterStyleItem.ts +8 -4
  290. package/dist/src/map/cesiumMapHelpers.d.ts +0 -7
  291. package/dist/src/map/cesiumMapHelpers.js +0 -144
  292. package/dist/src/map/cesiumMapHelpers.js.map +0 -1
  293. package/src/map/cesiumMapHelpers.ts +0 -219
@@ -0,0 +1,576 @@
1
+ import {
2
+ type Camera,
3
+ Cartesian3,
4
+ Cartographic,
5
+ type Cesium3DTileset,
6
+ type CesiumWidget,
7
+ type CustomDataSource,
8
+ type CzmlDataSource,
9
+ Ellipsoid,
10
+ ImageryLayer,
11
+ type ImageryLayerCollection,
12
+ JulianDate,
13
+ KeyboardEventModifier,
14
+ Math as CesiumMath,
15
+ PrimitiveCollection,
16
+ Ray,
17
+ RequestScheduler,
18
+ type Scene,
19
+ ScreenSpaceEventHandler,
20
+ ScreenSpaceEventType,
21
+ type TerrainProvider,
22
+ } from '@vcmap-cesium/engine';
23
+ import type { Coordinate } from 'ol/coordinate.js';
24
+ import VcsMap from './vcsMap.js';
25
+ import type Layer from '../layer/layer.js';
26
+ import type LayerCollection from '../util/layerCollection.js';
27
+ import { vcsLayerName } from '../layer/layerSymbols.js';
28
+ import Viewpoint from '../util/viewpoint.js';
29
+ import {
30
+ ModificationKeyType,
31
+ PointerEventType,
32
+ PointerKeyType,
33
+ } from '../interaction/interactionType.js';
34
+ import Projection from '../util/projection.js';
35
+
36
+ RequestScheduler.maximumRequestsPerServer = 12;
37
+
38
+ /**
39
+ * Ensures, a primitive/imageryLayer/entity is part of a collection and placed at the correct location
40
+ * @param cesiumCollection
41
+ * @param item
42
+ * @param layerCollection
43
+ * @private
44
+ */
45
+ function ensureInCollection<
46
+ T extends PrimitiveCollection | ImageryLayerCollection,
47
+ >(
48
+ cesiumCollection: T,
49
+ item: T extends PrimitiveCollection
50
+ ? PrimitiveCollection | Cesium3DTileset
51
+ : ImageryLayer,
52
+ layerCollection: LayerCollection,
53
+ ): void {
54
+ const targetIndex = layerCollection.indexOfKey(item[vcsLayerName]) as number;
55
+ if (targetIndex > -1) {
56
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
57
+ // @ts-ignore
58
+ if (!cesiumCollection.contains(item)) {
59
+ const primitivesLength = cesiumCollection.length;
60
+ let index = primitivesLength;
61
+ for (let i = 0; i < primitivesLength; i++) {
62
+ const collectionItem = cesiumCollection.get(
63
+ i,
64
+ ) as T extends PrimitiveCollection
65
+ ? PrimitiveCollection | Cesium3DTileset
66
+ : ImageryLayer;
67
+ if (
68
+ (layerCollection.indexOfKey(collectionItem[vcsLayerName]) as number) >
69
+ targetIndex
70
+ ) {
71
+ index = i;
72
+ break;
73
+ }
74
+ }
75
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
76
+ // @ts-ignore
77
+ cesiumCollection.add(item, index);
78
+ }
79
+ }
80
+ }
81
+
82
+ /**
83
+ * @param primitiveCollection
84
+ * @param item
85
+ * @param layerCollection
86
+ * @private
87
+ */
88
+ function indexChangedOnPrimitive(
89
+ primitiveCollection: PrimitiveCollection,
90
+ item: PrimitiveCollection,
91
+ layerCollection: LayerCollection,
92
+ ): void {
93
+ const { destroyPrimitives } = primitiveCollection;
94
+ primitiveCollection.destroyPrimitives = false;
95
+ primitiveCollection.remove(item);
96
+ ensureInCollection(primitiveCollection, item, layerCollection);
97
+ primitiveCollection.destroyPrimitives = destroyPrimitives;
98
+ }
99
+
100
+ /**
101
+ * @param imageryLayerCollection
102
+ * @param item
103
+ * @param layerCollection
104
+ * @private
105
+ */
106
+ function indexChangedOnImageryLayer(
107
+ imageryLayerCollection: ImageryLayerCollection,
108
+ item: ImageryLayer,
109
+ layerCollection: LayerCollection,
110
+ ): void {
111
+ imageryLayerCollection.remove(item, false);
112
+ ensureInCollection(imageryLayerCollection, item, layerCollection);
113
+ }
114
+
115
+ export function getResolution(
116
+ cartesian: Cartesian3,
117
+ camera: Camera,
118
+ mapElement: HTMLElement,
119
+ latitude?: number,
120
+ ): number {
121
+ const distance = Cartesian3.distance(cartesian, camera.position);
122
+ const usedLatitude =
123
+ latitude ?? Cartographic.fromCartesian(cartesian).latitude;
124
+
125
+ const fov = Math.PI / 3.0;
126
+ const width = mapElement.offsetWidth;
127
+ const height = mapElement.offsetHeight;
128
+ const aspectRatio = width / height;
129
+ const fovy = Math.atan(Math.tan(fov * 0.5) / aspectRatio) * 2.0;
130
+ const visibleMeters = 2 * distance * Math.tan(fovy / 2);
131
+ const relativeCircumference = Math.cos(Math.abs(usedLatitude));
132
+ const visibleMapUnits = visibleMeters / relativeCircumference;
133
+
134
+ return visibleMapUnits / height;
135
+ }
136
+
137
+ export type CesiumVisualisationType =
138
+ | CustomDataSource
139
+ | CzmlDataSource
140
+ | PrimitiveCollection
141
+ | Cesium3DTileset
142
+ | ImageryLayer;
143
+
144
+ export default class BaseCesiumMap extends VcsMap<CesiumVisualisationType> {
145
+ static get className(): string {
146
+ return 'BaseCesiumMap';
147
+ }
148
+
149
+ protected _cesiumWidget: CesiumWidget | null = null;
150
+
151
+ protected _terrainProvider: TerrainProvider | null | undefined = null;
152
+
153
+ private _screenSpaceListener: (() => void) | undefined;
154
+
155
+ screenSpaceEventHandler: ScreenSpaceEventHandler | null = null;
156
+
157
+ defaultTerrainProvider: TerrainProvider | null = null;
158
+
159
+ protected _listeners: (() => void)[] = [];
160
+
161
+ get terrainProvider(): TerrainProvider | null | undefined {
162
+ return this._terrainProvider;
163
+ }
164
+
165
+ protected _initializeCesiumWidget(widget: CesiumWidget): void {
166
+ if (this._cesiumWidget) {
167
+ throw new Error('CesiumWidget already initialized');
168
+ }
169
+ this._cesiumWidget = widget;
170
+ this._cesiumWidget.clock.currentTime = JulianDate.fromDate(
171
+ new Date(new Date().getFullYear(), 6, 20, 13, 0, 0, 0),
172
+ );
173
+ this.screenSpaceEventHandler = new ScreenSpaceEventHandler(
174
+ this._cesiumWidget.scene.canvas,
175
+ );
176
+ this._setupCesiumInteractions();
177
+
178
+ this.defaultTerrainProvider = this._cesiumWidget.scene.terrainProvider;
179
+ this._terrainProvider = this.defaultTerrainProvider;
180
+ this._listeners.push(
181
+ this._cesiumWidget.scene.terrainProviderChanged.addEventListener(
182
+ this._terrainProviderChanged.bind(this),
183
+ ),
184
+ );
185
+
186
+ this._listeners.push(
187
+ this._cesiumWidget.scene.postRender.addEventListener(
188
+ (eventScene: Scene, time: JulianDate) => {
189
+ this.postRender.raiseEvent({
190
+ map: this,
191
+ originalEvent: { scene: eventScene, time },
192
+ });
193
+ },
194
+ ),
195
+ );
196
+ }
197
+
198
+ override async activate(): Promise<void> {
199
+ await super.activate();
200
+ if (this.active && this._cesiumWidget) {
201
+ this._cesiumWidget.useDefaultRenderLoop = true;
202
+ this._cesiumWidget.resize();
203
+ }
204
+ }
205
+
206
+ override deactivate(): void {
207
+ super.deactivate();
208
+ if (this._cesiumWidget) {
209
+ this._cesiumWidget.useDefaultRenderLoop = false;
210
+ }
211
+ }
212
+
213
+ override getViewpoint(): Promise<null | Viewpoint> {
214
+ return Promise.resolve(this.getViewpointSync());
215
+ }
216
+
217
+ override getViewpointSync(): Viewpoint | null {
218
+ if (!this._cesiumWidget || !this._cesiumWidget.scene || !this.target) {
219
+ return null;
220
+ }
221
+ const cam = this._cesiumWidget.scene.camera;
222
+ const cameraPositionCartesian = cam.position;
223
+ let groundPosition;
224
+ let distance;
225
+
226
+ const groundPositionCartesian = this._cesiumWidget.scene.globe?.pick(
227
+ new Ray(cam.position, cam.direction),
228
+ this._cesiumWidget.scene,
229
+ );
230
+
231
+ if (groundPositionCartesian) {
232
+ distance = Cartesian3.distance(
233
+ groundPositionCartesian,
234
+ cameraPositionCartesian,
235
+ );
236
+ const groundPositionCartographic =
237
+ Ellipsoid.WGS84.cartesianToCartographic(groundPositionCartesian);
238
+ groundPosition = [
239
+ CesiumMath.toDegrees(groundPositionCartographic.longitude),
240
+ CesiumMath.toDegrees(groundPositionCartographic.latitude),
241
+ groundPositionCartographic.height,
242
+ ];
243
+ }
244
+
245
+ const cameraPositionCartographic = cam.positionCartographic;
246
+ const cameraPosition = [
247
+ CesiumMath.toDegrees(cameraPositionCartographic.longitude),
248
+ CesiumMath.toDegrees(cameraPositionCartographic.latitude),
249
+ cameraPositionCartographic.height,
250
+ ];
251
+
252
+ return new Viewpoint({
253
+ groundPosition,
254
+ cameraPosition,
255
+ distance,
256
+ heading: CesiumMath.toDegrees(cam.heading),
257
+ pitch: CesiumMath.toDegrees(cam.pitch),
258
+ roll: CesiumMath.toDegrees(cam.roll),
259
+ });
260
+ }
261
+
262
+ private _getCurrentResolutionFromCartesianLatitude(
263
+ cartesian: Cartesian3,
264
+ latitude?: number,
265
+ ): number {
266
+ if (!this._cesiumWidget) {
267
+ return 1;
268
+ }
269
+
270
+ return getResolution(
271
+ cartesian,
272
+ this._cesiumWidget.camera,
273
+ this.mapElement,
274
+ latitude,
275
+ );
276
+ }
277
+
278
+ getCurrentResolution(coordinate: Coordinate): number {
279
+ const wgs84Coordinate = Projection.mercatorToWgs84(coordinate);
280
+ const cartesian = Cartesian3.fromDegrees(
281
+ wgs84Coordinate[0],
282
+ wgs84Coordinate[1],
283
+ wgs84Coordinate[2],
284
+ );
285
+ return this._getCurrentResolutionFromCartesianLatitude(
286
+ cartesian,
287
+ CesiumMath.toRadians(wgs84Coordinate[1]),
288
+ );
289
+ }
290
+
291
+ getCurrentResolutionFromCartesian(cartesian: Cartesian3): number {
292
+ return this._getCurrentResolutionFromCartesianLatitude(cartesian);
293
+ }
294
+
295
+ private _setupCesiumInteractions(): void {
296
+ const scene = this.getScene()!;
297
+ const raisePointerInteraction = (
298
+ key: ModificationKeyType,
299
+ pointer: number,
300
+ pointerEvent: PointerEventType,
301
+ csEvent:
302
+ | ScreenSpaceEventHandler.PositionedEvent
303
+ | ScreenSpaceEventHandler.MotionEvent,
304
+ ): void => {
305
+ const multipleTouch =
306
+ // eslint-disable-next-line no-underscore-dangle
307
+ (this.screenSpaceEventHandler?._positions?.length ?? 0) > 1;
308
+ const windowPosition = (
309
+ csEvent as ScreenSpaceEventHandler.PositionedEvent
310
+ ).position
311
+ ? (csEvent as ScreenSpaceEventHandler.PositionedEvent).position
312
+ : (csEvent as ScreenSpaceEventHandler.MotionEvent).endPosition;
313
+
314
+ this.pointerInteractionEvent.raiseEvent({
315
+ map: this,
316
+ windowPosition,
317
+ key,
318
+ pointer,
319
+ multipleTouch,
320
+ pointerEvent,
321
+ });
322
+ };
323
+
324
+ const mods = [
325
+ {
326
+ csModifier: KeyboardEventModifier.ALT,
327
+ vcsModifier: ModificationKeyType.ALT,
328
+ },
329
+ {
330
+ csModifier: KeyboardEventModifier.CTRL,
331
+ vcsModifier: ModificationKeyType.CTRL,
332
+ },
333
+ {
334
+ csModifier: KeyboardEventModifier.SHIFT,
335
+ vcsModifier: ModificationKeyType.SHIFT,
336
+ },
337
+ { csModifier: undefined, vcsModifier: ModificationKeyType.NONE },
338
+ ];
339
+
340
+ const types = [
341
+ {
342
+ type: ScreenSpaceEventType.LEFT_DOWN,
343
+ pointerEvent: PointerEventType.DOWN,
344
+ pointer: PointerKeyType.LEFT,
345
+ },
346
+ {
347
+ type: ScreenSpaceEventType.LEFT_UP,
348
+ pointerEvent: PointerEventType.UP,
349
+ pointer: PointerKeyType.LEFT,
350
+ },
351
+ {
352
+ type: ScreenSpaceEventType.RIGHT_DOWN,
353
+ pointerEvent: PointerEventType.DOWN,
354
+ pointer: PointerKeyType.RIGHT,
355
+ },
356
+ {
357
+ type: ScreenSpaceEventType.RIGHT_UP,
358
+ pointerEvent: PointerEventType.UP,
359
+ pointer: PointerKeyType.RIGHT,
360
+ },
361
+ {
362
+ type: ScreenSpaceEventType.MIDDLE_DOWN,
363
+ pointerEvent: PointerEventType.DOWN,
364
+ pointer: PointerKeyType.MIDDLE,
365
+ },
366
+ {
367
+ type: ScreenSpaceEventType.MIDDLE_UP,
368
+ pointerEvent: PointerEventType.UP,
369
+ pointer: PointerKeyType.MIDDLE,
370
+ },
371
+ {
372
+ type: ScreenSpaceEventType.MOUSE_MOVE,
373
+ pointerEvent: PointerEventType.MOVE,
374
+ pointer: PointerKeyType.ALL,
375
+ },
376
+ ];
377
+ let lastEventFrameNumber = 0;
378
+ const screenSpaceListeners = types
379
+ .map(({ pointerEvent, pointer, type }) => {
380
+ return mods.map(({ csModifier, vcsModifier }) => {
381
+ const handler:
382
+ | ScreenSpaceEventHandler.PositionedEventCallback
383
+ | ScreenSpaceEventHandler.MotionEventCallback =
384
+ type === ScreenSpaceEventType.MOUSE_MOVE
385
+ ? (csEvent: ScreenSpaceEventHandler.MotionEvent): void => {
386
+ if (scene.frameState.frameNumber !== lastEventFrameNumber) {
387
+ lastEventFrameNumber = scene.frameState.frameNumber;
388
+ raisePointerInteraction(
389
+ vcsModifier,
390
+ pointer,
391
+ pointerEvent,
392
+ csEvent,
393
+ );
394
+ }
395
+ }
396
+ : (csEvent: ScreenSpaceEventHandler.PositionedEvent): void => {
397
+ raisePointerInteraction(
398
+ vcsModifier,
399
+ pointer,
400
+ pointerEvent,
401
+ csEvent,
402
+ );
403
+ };
404
+
405
+ this.screenSpaceEventHandler!.setInputAction?.(
406
+ handler,
407
+ type,
408
+ csModifier,
409
+ );
410
+ return (): void => {
411
+ this.screenSpaceEventHandler?.removeInputAction?.(type, csModifier);
412
+ };
413
+ });
414
+ })
415
+ .flat();
416
+
417
+ this._screenSpaceListener = (): void => {
418
+ screenSpaceListeners.forEach((removeListener) => {
419
+ removeListener();
420
+ });
421
+ };
422
+ }
423
+
424
+ /**
425
+ * returns the cesium Widget Object
426
+ */
427
+ getCesiumWidget(): CesiumWidget | null {
428
+ return this._cesiumWidget;
429
+ }
430
+
431
+ /**
432
+ * returns the cesium Scene Object, returns null on non initialized or destroyed maps
433
+ */
434
+ getScene(): Scene | undefined {
435
+ return this._cesiumWidget?.scene;
436
+ }
437
+
438
+ protected _indexChangedOnVisualization(vis: CesiumVisualisationType): void {
439
+ if (vis instanceof PrimitiveCollection) {
440
+ indexChangedOnPrimitive(
441
+ (this.getScene() as Scene).primitives,
442
+ vis,
443
+ this.layerCollection,
444
+ );
445
+ } else if (vis instanceof ImageryLayer) {
446
+ indexChangedOnImageryLayer(
447
+ (this.getScene() as Scene).imageryLayers,
448
+ vis,
449
+ this.layerCollection,
450
+ );
451
+ }
452
+ }
453
+
454
+ override indexChanged(layer: Layer): void {
455
+ const viz = this.getVisualizationsForLayer(layer);
456
+ if (viz) {
457
+ viz.forEach((item) => {
458
+ this._indexChangedOnVisualization(item);
459
+ });
460
+ }
461
+ }
462
+
463
+ /**
464
+ * Internal API used to register visualizations from layer implementations
465
+ * @param primitiveCollection
466
+ */
467
+ addPrimitiveCollection(
468
+ primitiveCollection: PrimitiveCollection | Cesium3DTileset,
469
+ ): void {
470
+ if (!this._cesiumWidget) {
471
+ throw new Error('Cannot add primitive to uninitialized map');
472
+ }
473
+ if (this.validateVisualization(primitiveCollection)) {
474
+ this.addVisualization(primitiveCollection);
475
+ ensureInCollection(
476
+ this._cesiumWidget.scene.primitives,
477
+ primitiveCollection,
478
+ this.layerCollection,
479
+ );
480
+ }
481
+ }
482
+
483
+ /**
484
+ * Internal API to unregister the visualization for a layers implementation
485
+ * @param primitiveCollection
486
+ */
487
+ removePrimitiveCollection(
488
+ primitiveCollection: PrimitiveCollection | Cesium3DTileset,
489
+ ): void {
490
+ // XXX add destroy as boolean?
491
+ this.removeVisualization(primitiveCollection);
492
+ this.getScene()?.primitives.remove(primitiveCollection);
493
+ }
494
+
495
+ /**
496
+ * Internal API used to register visualizations from layer implementations
497
+ * @param imageryLayer
498
+ */
499
+ addImageryLayer(imageryLayer: ImageryLayer): void {
500
+ if (!this._cesiumWidget) {
501
+ throw new Error('Cannot add primitive to uninitialized map');
502
+ }
503
+ if (this.validateVisualization(imageryLayer)) {
504
+ this.addVisualization(imageryLayer);
505
+ ensureInCollection(
506
+ this._cesiumWidget.scene.imageryLayers,
507
+ imageryLayer,
508
+ this.layerCollection,
509
+ );
510
+ }
511
+ }
512
+
513
+ /**
514
+ * Internal API used to unregister visualizations from layer implementations
515
+ */
516
+ removeImageryLayer(imageryLayer: ImageryLayer): void {
517
+ this.removeVisualization(imageryLayer);
518
+ this.getScene()?.imageryLayers.remove(imageryLayer);
519
+ }
520
+
521
+ /**
522
+ * set the cesium TerrainProvider
523
+ */
524
+ setTerrainProvider(terrainProvider: TerrainProvider): void {
525
+ if (this.terrainProvider !== terrainProvider && this._cesiumWidget) {
526
+ this._cesiumWidget.scene.terrainProvider = terrainProvider;
527
+ }
528
+ }
529
+
530
+ /**
531
+ * unsets the TerrainProvider (changes to the default TerrainProvider if the given terranProvider is currently active)
532
+ */
533
+ unsetTerrainProvider(terrainProvider: TerrainProvider): void {
534
+ if (this.terrainProvider === terrainProvider) {
535
+ this._terrainProvider = this.defaultTerrainProvider;
536
+ if (this._cesiumWidget && this.defaultTerrainProvider) {
537
+ this._cesiumWidget.scene.terrainProvider = this.defaultTerrainProvider;
538
+ }
539
+ }
540
+ }
541
+
542
+ /**
543
+ * is called when the cesium Terrainprovider changes. Sets the .terrainProvider and deactivates currently
544
+ * active TerrainLayer layer if necessary
545
+ */
546
+ private _terrainProviderChanged(terrainProvider: TerrainProvider): void {
547
+ if (this.terrainProvider !== terrainProvider) {
548
+ const layer = this.layerCollection.getByKey(
549
+ this?.terrainProvider?.[vcsLayerName],
550
+ );
551
+ this._terrainProvider = terrainProvider;
552
+ if (layer) {
553
+ layer.deactivate();
554
+ }
555
+ }
556
+ }
557
+
558
+ override destroy(): void {
559
+ this._listeners.forEach((cb) => {
560
+ cb();
561
+ });
562
+ this._listeners = [];
563
+ this._screenSpaceListener?.();
564
+
565
+ this.screenSpaceEventHandler?.destroy();
566
+ this.screenSpaceEventHandler = null;
567
+
568
+ this._terrainProvider = null;
569
+ this.defaultTerrainProvider = null;
570
+
571
+ super.destroy();
572
+
573
+ this._cesiumWidget?.destroy(); // destroy widget last to not throw
574
+ this._cesiumWidget = null;
575
+ }
576
+ }