@vcmap/core 5.0.0-rc.3 → 5.0.0-rc.31

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 (236) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +12 -5
  3. package/build/postinstall.js +14 -3
  4. package/index.d.ts +3480 -2008
  5. package/index.js +169 -131
  6. package/package.json +25 -27
  7. package/src/category/category.js +483 -0
  8. package/src/category/categoryCollection.js +153 -0
  9. package/src/cesium/cesium3DTileFeature.js +2 -2
  10. package/src/cesium/cesium3DTilePointFeature.js +1 -1
  11. package/src/cesium/cesiumVcsCameraPrimitive.js +16 -8
  12. package/src/cesium/entity.js +29 -0
  13. package/src/cesium/wallpaperMaterial.js +5 -3
  14. package/src/classRegistry.js +169 -0
  15. package/src/{vcs/vcm/util/featureProvider → featureProvider}/abstractFeatureProvider.js +49 -46
  16. package/src/{vcs/vcm/util/featureProvider → featureProvider}/tileProviderFeatureProvider.js +13 -5
  17. package/src/{vcs/vcm/util/featureProvider → featureProvider}/wmsFeatureProvider.js +56 -26
  18. package/src/{vcs/vcm/interaction → interaction}/abstractInteraction.js +33 -21
  19. package/src/{vcs/vcm/interaction → interaction}/coordinateAtPixel.js +40 -21
  20. package/src/{vcs/vcm/interaction → interaction}/eventHandler.js +131 -26
  21. package/src/{vcs/vcm/interaction → interaction}/featureAtPixelInteraction.js +108 -53
  22. package/src/interaction/featureProviderInteraction.js +58 -0
  23. package/src/{vcs/vcm/interaction → interaction}/interactionChain.js +40 -41
  24. package/src/{vcs/vcm/interaction → interaction}/interactionType.js +24 -31
  25. package/src/{vcs/vcm/layer/cesium/cesiumTilesetCesium.js → layer/cesium/cesiumTilesetCesiumImpl.js} +83 -70
  26. package/src/{vcs/vcm/layer → layer}/cesium/clusterContext.js +33 -8
  27. package/src/{vcs/vcm/layer/cesium/dataSourceCesium.js → layer/cesium/dataSourceCesiumImpl.js} +24 -13
  28. package/src/layer/cesium/openStreetMapCesiumImpl.js +32 -0
  29. package/src/{vcs/vcm/layer/cesium/rasterLayerCesium.js → layer/cesium/rasterLayerCesiumImpl.js} +12 -9
  30. package/src/{vcs/vcm/layer/cesium/singleImageCesium.js → layer/cesium/singleImageCesiumImpl.js} +19 -9
  31. package/src/{vcs/vcm/layer/cesium/terrainCesium.js → layer/cesium/terrainCesiumImpl.js} +8 -9
  32. package/src/{vcs/vcm/layer/cesium/tmsCesium.js → layer/cesium/tmsCesiumImpl.js} +21 -10
  33. package/src/{vcs/vcm/layer/cesium/vectorCesium.js → layer/cesium/vectorCesiumImpl.js} +93 -35
  34. package/src/layer/cesium/vectorContext.js +363 -0
  35. package/src/{vcs/vcm/layer/cesium/vectorRasterTileCesium.js → layer/cesium/vectorRasterTileCesiumImpl.js} +21 -13
  36. package/src/{vcs/vcm/layer → layer}/cesium/vectorTileImageryProvider.js +58 -21
  37. package/src/{vcs/vcm/layer/cesium/wmsCesium.js → layer/cesium/wmsCesiumImpl.js} +20 -9
  38. package/src/{vcs/vcm/layer/cesium/wmtsCesium.js → layer/cesium/wmtsCesiumImpl.js} +24 -13
  39. package/src/{vcs/vcm/layer → layer}/cesium/x3dmHelper.js +6 -3
  40. package/src/{vcs/vcm/layer/cesiumTileset.js → layer/cesiumTilesetLayer.js} +71 -112
  41. package/src/{vcs/vcm/layer/czml.js → layer/czmlLayer.js} +23 -20
  42. package/src/{vcs/vcm/layer/dataSource.js → layer/dataSourceLayer.js} +55 -90
  43. package/src/{vcs/vcm/layer → layer}/featureLayer.js +89 -74
  44. package/src/{vcs/vcm/layer/featureStore.js → layer/featureStoreLayer.js} +197 -150
  45. package/src/{vcs/vcm/layer/featureStoreChanges.js → layer/featureStoreLayerChanges.js} +150 -92
  46. package/src/{vcs/vcm/layer/featureStoreState.js → layer/featureStoreLayerState.js} +1 -2
  47. package/src/{vcs/vcm/layer → layer}/featureVisibility.js +114 -82
  48. package/src/{vcs/vcm/layer → layer}/geojsonHelpers.js +84 -69
  49. package/src/{vcs/vcm/layer/geojson.js → layer/geojsonLayer.js} +30 -27
  50. package/src/{vcs/vcm/layer → layer}/globalHider.js +25 -39
  51. package/src/{vcs/vcm/layer → layer}/layer.js +171 -96
  52. package/src/{vcs/vcm/layer → layer}/layerImplementation.js +13 -6
  53. package/src/{vcs/vcm/layer → layer}/layerState.js +0 -1
  54. package/src/{vcs/vcm/layer → layer}/layerSymbols.js +2 -1
  55. package/src/{vcs/vcm/layer/oblique/layerOblique.js → layer/oblique/layerObliqueImpl.js} +7 -5
  56. package/src/{vcs/vcm/layer → layer}/oblique/obliqueHelpers.js +76 -31
  57. package/src/{vcs/vcm/layer/oblique/vectorOblique.js → layer/oblique/vectorObliqueImpl.js} +198 -80
  58. package/src/{vcs/vcm/layer/openStreetMap.js → layer/openStreetMapLayer.js} +59 -40
  59. package/src/layer/openlayers/layerOpenlayersImpl.js +165 -0
  60. package/src/layer/openlayers/openStreetMapOpenlayersImpl.js +28 -0
  61. package/src/layer/openlayers/rasterLayerOpenlayersImpl.js +44 -0
  62. package/src/{vcs/vcm/layer/openlayers/singleImageOpenlayers.js → layer/openlayers/singleImageOpenlayersImpl.js} +8 -7
  63. package/src/{vcs/vcm/layer/openlayers/tileDebugOpenlayers.js → layer/openlayers/tileDebugOpenlayersImpl.js} +7 -6
  64. package/src/{vcs/vcm/layer/openlayers/tmsOpenlayers.js → layer/openlayers/tmsOpenlayersImpl.js} +12 -10
  65. package/src/{vcs/vcm/layer/openlayers/vectorOpenlayers.js → layer/openlayers/vectorOpenlayersImpl.js} +21 -12
  66. package/src/{vcs/vcm/layer/openlayers/vectorTileOpenlayers.js → layer/openlayers/vectorTileOpenlayersImpl.js} +18 -12
  67. package/src/{vcs/vcm/layer/openlayers/wmsOpenlayers.js → layer/openlayers/wmsOpenlayersImpl.js} +9 -8
  68. package/src/{vcs/vcm/layer/openlayers/wmtsOpenlayers.js → layer/openlayers/wmtsOpenlayersImpl.js} +19 -12
  69. package/src/{vcs/vcm/layer/pointCloud.js → layer/pointCloudLayer.js} +42 -39
  70. package/src/{vcs/vcm/layer → layer}/rasterLayer.js +86 -37
  71. package/src/{vcs/vcm/layer/singleImage.js → layer/singleImageLayer.js} +25 -22
  72. package/src/layer/terrainHelpers.js +95 -0
  73. package/src/{vcs/vcm/layer/terrain.js → layer/terrainLayer.js} +28 -21
  74. package/src/{vcs/vcm/layer → layer}/tileLoadedHelper.js +13 -8
  75. package/src/{vcs/vcm/layer → layer}/tileProvider/mvtTileProvider.js +51 -8
  76. package/src/layer/tileProvider/staticGeojsonTileProvider.js +87 -0
  77. package/src/{vcs/vcm/layer → layer}/tileProvider/tileProvider.js +200 -89
  78. package/src/{vcs/vcm/layer → layer}/tileProvider/urlTemplateTileProvider.js +54 -13
  79. package/src/{vcs/vcm/layer/tms.js → layer/tmsLayer.js} +22 -22
  80. package/src/layer/vectorHelpers.js +129 -0
  81. package/src/{vcs/vcm/layer/vector.js → layer/vectorLayer.js} +124 -94
  82. package/src/{vcs/vcm/layer → layer}/vectorProperties.js +419 -107
  83. package/src/{vcs/vcm/layer → layer}/vectorSymbols.js +11 -1
  84. package/src/{vcs/vcm/layer/vectorTile.js → layer/vectorTileLayer.js} +181 -116
  85. package/src/{vcs/vcm/layer/wfs.js → layer/wfsLayer.js} +33 -23
  86. package/src/{vcs/vcm/layer → layer}/wmsHelpers.js +14 -7
  87. package/src/{vcs/vcm/layer/wms.js → layer/wmsLayer.js} +53 -32
  88. package/src/{vcs/vcm/layer/wmts.js → layer/wmtsLayer.js} +56 -42
  89. package/src/{vcs/vcm/maps → map}/baseOLMap.js +83 -35
  90. package/src/{vcs/vcm/maps → map}/cameraLimiter.js +64 -37
  91. package/src/{vcs/vcm/maps/cesium.js → map/cesiumMap.js} +431 -277
  92. package/src/{vcs/vcm/maps → map}/mapState.js +0 -1
  93. package/src/{vcs/vcm/maps/oblique.js → map/obliqueMap.js} +132 -97
  94. package/src/{vcs/vcm/maps/openlayers.js → map/openlayersMap.js} +69 -45
  95. package/src/{vcs/vcm/maps/map.js → map/vcsMap.js} +118 -46
  96. package/src/oblique/defaultObliqueCollection.js +62 -0
  97. package/src/{vcs/vcm/oblique → oblique}/helpers.js +221 -78
  98. package/src/{vcs/vcm/oblique/ObliqueCollection.js → oblique/obliqueCollection.js} +151 -55
  99. package/src/{vcs/vcm/oblique/ObliqueDataSet.js → oblique/obliqueDataSet.js} +77 -46
  100. package/src/{vcs/vcm/oblique/ObliqueImage.js → oblique/obliqueImage.js} +58 -26
  101. package/src/{vcs/vcm/oblique/ObliqueImageMeta.js → oblique/obliqueImageMeta.js} +9 -9
  102. package/src/{vcs/vcm/oblique/ObliqueProvider.js → oblique/obliqueProvider.js} +85 -35
  103. package/src/{vcs/vcm/oblique/ObliqueView.js → oblique/obliqueView.js} +45 -5
  104. package/src/{vcs/vcm/oblique/ObliqueViewDirection.js → oblique/obliqueViewDirection.js} +3 -5
  105. package/src/{vcs/vcm/oblique → oblique}/parseImageJson.js +62 -28
  106. package/src/ol/feature.js +34 -1
  107. package/src/ol/geom/circle.js +14 -5
  108. package/src/ol/geom/geometryCollection.js +14 -8
  109. package/src/ol/render/canvas/canvasTileRenderer.js +11 -10
  110. package/src/overrideClassRegistry.js +214 -0
  111. package/src/style/arcStyle.js +453 -0
  112. package/src/style/arrowStyle.js +304 -0
  113. package/src/{vcs/vcm/util/style → style}/declarativeStyleItem.js +147 -82
  114. package/src/{vcs/vcm/util/style → style}/shapesCategory.js +8 -8
  115. package/src/style/styleFactory.js +32 -0
  116. package/src/{vcs/vcm/util/style → style}/styleHelpers.js +24 -26
  117. package/src/style/styleItem.js +174 -0
  118. package/src/{vcs/vcm/util/style → style}/vectorStyleItem.js +230 -156
  119. package/src/{vcs/vcm/util/style → style}/writeStyle.js +7 -12
  120. package/src/{vcs/vcm/util → util}/clipping/clippingObject.js +79 -49
  121. package/src/{vcs/vcm/util → util}/clipping/clippingObjectManager.js +56 -23
  122. package/src/{vcs/vcm/util → util}/clipping/clippingPlaneHelper.js +149 -88
  123. package/src/{vcs/vcm/util → util}/collection.js +28 -10
  124. package/src/util/editor/createFeatureSession.js +195 -0
  125. package/src/util/editor/editFeaturesSession.js +325 -0
  126. package/src/util/editor/editGeometrySession.js +452 -0
  127. package/src/util/editor/editorHelpers.js +300 -0
  128. package/src/util/editor/editorSessionHelpers.js +132 -0
  129. package/src/util/editor/editorSymbols.js +21 -0
  130. package/src/util/editor/interactions/createBBoxInteraction.js +154 -0
  131. package/src/util/editor/interactions/createCircleInteraction.js +119 -0
  132. package/src/util/editor/interactions/createLineStringInteraction.js +119 -0
  133. package/src/util/editor/interactions/createPointInteraction.js +73 -0
  134. package/src/util/editor/interactions/createPolygonInteraction.js +136 -0
  135. package/src/util/editor/interactions/editFeaturesMouseOverInteraction.js +88 -0
  136. package/src/util/editor/interactions/editGeometryMouseOverInteraction.js +119 -0
  137. package/src/util/editor/interactions/ensureHandlerSelectionInteraction.js +50 -0
  138. package/src/util/editor/interactions/insertVertexInteraction.js +103 -0
  139. package/src/util/editor/interactions/mapInteractionController.js +119 -0
  140. package/src/util/editor/interactions/removeVertexInteraction.js +42 -0
  141. package/src/util/editor/interactions/selectFeatureMouseOverInteraction.js +152 -0
  142. package/src/util/editor/interactions/selectMultiFeatureInteraction.js +165 -0
  143. package/src/util/editor/interactions/selectSingleFeatureInteraction.js +120 -0
  144. package/src/util/editor/interactions/translateVertexInteraction.js +60 -0
  145. package/src/util/editor/selectFeaturesSession.js +303 -0
  146. package/src/util/editor/transformation/create2DHandlers.js +339 -0
  147. package/src/util/editor/transformation/create3DHandlers.js +678 -0
  148. package/src/util/editor/transformation/extrudeInteraction.js +106 -0
  149. package/src/util/editor/transformation/rotateInteraction.js +201 -0
  150. package/src/util/editor/transformation/scaleInteraction.js +201 -0
  151. package/src/util/editor/transformation/transformationHandler.js +178 -0
  152. package/src/util/editor/transformation/transformationTypes.js +88 -0
  153. package/src/util/editor/transformation/translateInteraction.js +263 -0
  154. package/src/util/editor/validateGeoemetry.js +24 -0
  155. package/src/{vcs/vcm/util → util}/exclusiveManager.js +6 -3
  156. package/src/{vcs/vcm/util → util}/extent.js +26 -20
  157. package/src/util/featureconverter/arcToCesium.js +121 -0
  158. package/src/{vcs/vcm/util → util}/featureconverter/circleToCesium.js +70 -37
  159. package/src/{vcs/vcm/util → util}/featureconverter/convert.js +94 -16
  160. package/src/util/featureconverter/extent3D.js +284 -0
  161. package/src/{vcs/vcm/util → util}/featureconverter/featureconverterHelper.js +253 -94
  162. package/src/util/featureconverter/lineStringToCesium.js +343 -0
  163. package/src/util/featureconverter/pointHelpers.js +413 -0
  164. package/src/{vcs/vcm/util → util}/featureconverter/pointToCesium.js +157 -107
  165. package/src/{vcs/vcm/util → util}/featureconverter/polygonToCesium.js +57 -24
  166. package/src/util/fetch.js +34 -0
  167. package/src/{vcs/vcm/util → util}/geometryHelpers.js +25 -17
  168. package/src/{vcs/vcm/util → util}/indexedCollection.js +27 -8
  169. package/src/{vcs/vcm/util → util}/isMobile.js +8 -2
  170. package/src/{vcs/vcm/util → util}/layerCollection.js +109 -19
  171. package/src/util/locale.js +12 -0
  172. package/src/{vcs/vcm/util → util}/mapCollection.js +170 -63
  173. package/src/util/math.js +193 -0
  174. package/src/util/overrideCollection.js +261 -0
  175. package/src/{vcs/vcm/util → util}/projection.js +23 -31
  176. package/src/{vcs/vcm/util → util}/urlHelpers.js +5 -3
  177. package/src/{vcs/vcm/util → util}/viewpoint.js +83 -57
  178. package/src/vcsApp.js +657 -0
  179. package/src/{vcs/vcm/event/vcsEvent.js → vcsEvent.js} +2 -3
  180. package/src/vcsModule.js +130 -0
  181. package/src/vcsModuleHelpers.js +136 -0
  182. package/src/{vcs/vcm/object.js → vcsObject.js} +3 -10
  183. package/tests/data/dynamicPointCzml.json +53 -0
  184. package/tests/data/oblique/imageData/imagev34.json +136 -0
  185. package/tests/data/oblique/imageData/imagev35.json +307 -0
  186. package/tests/data/oblique/imageData/imagev35PerImageSize.json +333 -0
  187. package/tests/data/oblique/tiledImageData/12/2199/1342.json +11056 -0
  188. package/tests/data/oblique/tiledImageData/12/2199/1343.json +11236 -0
  189. package/tests/data/oblique/tiledImageData/12/2199/1344.json +11077 -0
  190. package/tests/data/oblique/tiledImageData/12/2200/1342.json +11036 -0
  191. package/tests/data/oblique/tiledImageData/12/2200/1343.json +11277 -0
  192. package/tests/data/oblique/tiledImageData/12/2200/1344.json +11131 -0
  193. package/tests/data/oblique/tiledImageData/12/2201/1342.json +10870 -0
  194. package/tests/data/oblique/tiledImageData/12/2201/1343.json +11492 -0
  195. package/tests/data/oblique/tiledImageData/12/2201/1344.json +10909 -0
  196. package/tests/data/oblique/tiledImageData/image.json +70 -0
  197. package/tests/data/terrain/13/8800/6485.terrain +0 -0
  198. package/tests/data/terrain/13/8800/6486.terrain +0 -0
  199. package/tests/data/terrain/13/8801/6485.terrain +0 -0
  200. package/tests/data/terrain/13/8801/6486.terrain +0 -0
  201. package/tests/data/terrain/layer.json +127 -0
  202. package/tests/data/testGeoJSON.json +149 -0
  203. package/tests/data/tile.pbf +0 -0
  204. package/tests/unit/helpers/cesiumHelpers.js +326 -0
  205. package/tests/unit/helpers/getFileNameFromUrl.js +12 -0
  206. package/tests/unit/helpers/helpers.js +32 -0
  207. package/tests/unit/helpers/imageHelpers.js +24 -0
  208. package/tests/unit/helpers/importJSON.js +15 -0
  209. package/tests/unit/helpers/obliqueData.js +102 -0
  210. package/tests/unit/helpers/obliqueHelpers.js +115 -0
  211. package/tests/unit/helpers/openlayersHelpers.js +25 -0
  212. package/tests/unit/helpers/terrain/terrainData.js +45 -0
  213. package/src/vcs/vcm/classRegistry.js +0 -106
  214. package/src/vcs/vcm/globalCollections.js +0 -11
  215. package/src/vcs/vcm/interaction/featureProviderInteraction.js +0 -54
  216. package/src/vcs/vcm/layer/buildings.js +0 -17
  217. package/src/vcs/vcm/layer/cesium/openStreetMapCesium.js +0 -29
  218. package/src/vcs/vcm/layer/cesium/pointCloudCesium.js +0 -58
  219. package/src/vcs/vcm/layer/cesium/vectorContext.js +0 -167
  220. package/src/vcs/vcm/layer/openlayers/layerOpenlayers.js +0 -79
  221. package/src/vcs/vcm/layer/openlayers/openStreetMapOpenlayers.js +0 -27
  222. package/src/vcs/vcm/layer/openlayers/rasterLayerOpenlayers.js +0 -121
  223. package/src/vcs/vcm/layer/terrainHelpers.js +0 -119
  224. package/src/vcs/vcm/layer/tileProvider/staticGeojsonTileProvider.js +0 -67
  225. package/src/vcs/vcm/layer/tileProvider/tileProviderFactory.js +0 -28
  226. package/src/vcs/vcm/layer/vectorHelpers.js +0 -206
  227. package/src/vcs/vcm/util/dateTime.js +0 -60
  228. package/src/vcs/vcm/util/featureProvider/featureProviderHelpers.js +0 -51
  229. package/src/vcs/vcm/util/featureconverter/extent3d.js +0 -154
  230. package/src/vcs/vcm/util/featureconverter/lineStringToCesium.js +0 -171
  231. package/src/vcs/vcm/util/locale.js +0 -53
  232. package/src/vcs/vcm/util/math.js +0 -71
  233. package/src/vcs/vcm/util/splitScreen.js +0 -233
  234. package/src/vcs/vcm/util/style/styleFactory.js +0 -48
  235. package/src/vcs/vcm/util/style/styleItem.js +0 -243
  236. /package/src/{vcs/vcm/util/featureProvider → featureProvider}/featureProviderSymbols.js +0 -0
@@ -1,11 +1,12 @@
1
1
  import { check } from '@vcsuite/check';
2
2
  import RasterLayer from './rasterLayer.js';
3
- import SingleImageCesium from './cesium/singleImageCesium.js';
4
- import SingleImageOpenlayers from './openlayers/singleImageOpenlayers.js';
5
- import CesiumMap from '../maps/cesium.js';
6
- import Openlayers from '../maps/openlayers.js';
3
+ import SingleImageCesiumImpl from './cesium/singleImageCesiumImpl.js';
4
+ import SingleImageOpenlayersImpl from './openlayers/singleImageOpenlayersImpl.js';
5
+ import CesiumMap from '../map/cesiumMap.js';
6
+ import OpenlayersMap from '../map/openlayersMap.js';
7
7
  import Extent from '../util/extent.js';
8
- import { VcsClassRegistry } from '../classRegistry.js';
8
+ import { layerClassRegistry } from '../classRegistry.js';
9
+ import { wgs84Projection } from '../util/projection.js';
9
10
 
10
11
  /**
11
12
  * @typedef {RasterLayerOptions} SingleImageOptions
@@ -19,14 +20,15 @@ import { VcsClassRegistry } from '../classRegistry.js';
19
20
  */
20
21
 
21
22
  /**
22
- * Image layer for Cesium and Openlayers
23
+ * Image layer for Cesium and OpenlayersMap
23
24
  * @class
24
- * @export
25
25
  * @extends {RasterLayer}
26
26
  * @api stable
27
27
  */
28
- class SingleImage extends RasterLayer {
29
- static get className() { return 'vcs.vcm.layer.SingleImage'; }
28
+ class SingleImageLayer extends RasterLayer {
29
+ static get className() {
30
+ return 'SingleImageLayer';
31
+ }
30
32
 
31
33
  /**
32
34
  * @returns {SingleImageOptions}
@@ -43,22 +45,21 @@ class SingleImage extends RasterLayer {
43
45
  */
44
46
  constructor(options) {
45
47
  super(options);
46
- const defaultOptions = SingleImage.getDefaultOptions();
48
+ const defaultOptions = SingleImageLayer.getDefaultOptions();
47
49
  /** @type {string} */
48
50
  this.credit = options.credit || defaultOptions.credit;
49
51
 
50
52
  if (!this.extent.isValid()) {
51
- this.getLogger().warning(`layer ${this.name} was constructed with an invalid extent, defaulting to global extent`);
53
+ this.getLogger().warning(
54
+ `layer ${this.name} was constructed with an invalid extent, defaulting to global extent`,
55
+ );
52
56
  this.extent = new Extent({
53
- epsg: 'EPSG:4326',
57
+ projection: wgs84Projection.toJSON(),
54
58
  coordinates: [-180, -90, 180, 90],
55
59
  });
56
60
  }
57
61
 
58
- this._supportedMaps = [
59
- CesiumMap.className,
60
- Openlayers.className,
61
- ];
62
+ this._supportedMaps = [CesiumMap.className, OpenlayersMap.className];
62
63
  }
63
64
 
64
65
  /**
@@ -73,13 +74,15 @@ class SingleImage extends RasterLayer {
73
74
 
74
75
  /**
75
76
  * @param {import("@vcmap/core").VcsMap} map
76
- * @returns {Array<SingleImageOpenlayers|SingleImageCesium>}
77
+ * @returns {Array<SingleImageOpenlayersImpl|SingleImageCesiumImpl>}
77
78
  */
78
79
  createImplementationsForMap(map) {
79
80
  if (map instanceof CesiumMap) {
80
- return [new SingleImageCesium(map, this.getImplementationOptions())];
81
- } else if (map instanceof Openlayers) {
82
- return [new SingleImageOpenlayers(map, this.getImplementationOptions())];
81
+ return [new SingleImageCesiumImpl(map, this.getImplementationOptions())];
82
+ } else if (map instanceof OpenlayersMap) {
83
+ return [
84
+ new SingleImageOpenlayersImpl(map, this.getImplementationOptions()),
85
+ ];
83
86
  }
84
87
  return [];
85
88
  }
@@ -115,5 +118,5 @@ class SingleImage extends RasterLayer {
115
118
  }
116
119
  }
117
120
 
118
- VcsClassRegistry.registerClass(SingleImage.className, SingleImage);
119
- export default SingleImage;
121
+ layerClassRegistry.registerClass(SingleImageLayer.className, SingleImageLayer);
122
+ export default SingleImageLayer;
@@ -0,0 +1,95 @@
1
+ import {
2
+ CesiumTerrainProvider,
3
+ Cartographic,
4
+ Cartesian2,
5
+ sampleTerrainMostDetailed,
6
+ } from '@vcmap-cesium/engine';
7
+ import { getTransform } from 'ol/proj.js';
8
+ import { wgs84Projection } from '../util/projection.js';
9
+
10
+ /**
11
+ * @typedef {Object} TerrainProviderOptions
12
+ * @property {boolean|undefined} requestVertexNormals
13
+ * @property {boolean|undefined} requestWaterMask
14
+ * @api
15
+ */
16
+
17
+ /**
18
+ * @type {Object<string, import("@vcmap-cesium/engine").CesiumTerrainProvider>}
19
+ */
20
+ const terrainProviders = {};
21
+
22
+ /**
23
+ * @param {string} url
24
+ * @param {TerrainProviderOptions} options
25
+ * @returns {Promise<import("@vcmap-cesium/engine").CesiumTerrainProvider>}
26
+ */
27
+ export async function getTerrainProviderForUrl(url, options) {
28
+ if (!terrainProviders[url]) {
29
+ terrainProviders[url] = await CesiumTerrainProvider.fromUrl(url, options);
30
+ return terrainProviders[url];
31
+ }
32
+ let terrainProvider = terrainProviders[url];
33
+ if (
34
+ (options.requestVertexNormals !== undefined &&
35
+ terrainProvider.requestVertexNormals !== options.requestVertexNormals) ||
36
+ (options.requestWaterMask !== undefined &&
37
+ terrainProvider.requestWaterMask !== options.requestWaterMask)
38
+ ) {
39
+ terrainProviders[url] = await CesiumTerrainProvider.fromUrl(url, options);
40
+ terrainProvider = terrainProviders[url];
41
+ }
42
+ return terrainProvider;
43
+ }
44
+
45
+ /**
46
+ * changes input coordinate Array in place, new height can also be accessed by coordinates[x][2]
47
+ * @param {import("@vcmap-cesium/engine").CesiumTerrainProvider} terrainProvider
48
+ * @param {Array<import("ol/coordinate").Coordinate>} coordinates
49
+ * @param {import("@vcmap/core").Projection=} optSourceProjection - if input is not WGS84
50
+ * @param {Array<import("ol/coordinate").Coordinate>=} result
51
+ * @returns {Promise<Array<import("ol/coordinate").Coordinate>>}
52
+ */
53
+ export function getHeightFromTerrainProvider(
54
+ terrainProvider,
55
+ coordinates,
56
+ optSourceProjection,
57
+ result,
58
+ ) {
59
+ const sourceTransformer = optSourceProjection
60
+ ? getTransform(optSourceProjection.proj, wgs84Projection.proj)
61
+ : null;
62
+
63
+ const positions = coordinates.map((coord) => {
64
+ const wgs84 = sourceTransformer
65
+ ? sourceTransformer(coord, coord.slice(), coord.length)
66
+ : coord;
67
+ return Cartographic.fromDegrees(wgs84[0], wgs84[1]);
68
+ });
69
+
70
+ const outArray = result || coordinates.map((c) => c.slice());
71
+ return sampleTerrainMostDetailed(terrainProvider, positions).then(
72
+ (updatedPositions) => {
73
+ updatedPositions.forEach((position, index) => {
74
+ outArray[index][2] = position.height || 0;
75
+ });
76
+ return outArray;
77
+ },
78
+ );
79
+ }
80
+
81
+ /**
82
+ * checks, whether a terrain tile is available at given position or not
83
+ * @param {import("@vcmap-cesium/engine").CesiumTerrainProvider} terrainProvider
84
+ * @param {number} level
85
+ * @param {import("@vcmap-cesium/engine").Cartographic} position
86
+ * @returns {boolean}
87
+ */
88
+ export function isTerrainTileAvailable(terrainProvider, level, position) {
89
+ const tileXY = terrainProvider.tilingScheme.positionToTileXY(
90
+ position,
91
+ level,
92
+ new Cartesian2(),
93
+ );
94
+ return terrainProvider.getTileDataAvailable(tileXY.x, tileXY.y, level);
95
+ }
@@ -1,9 +1,12 @@
1
1
  import { parseBoolean } from '@vcsuite/parsers';
2
2
  import Layer from './layer.js';
3
- import { getHeightFromTerrainProvider, getTerrainProviderForUrl } from './terrainHelpers.js';
4
- import CesiumMap from '../maps/cesium.js';
5
- import TerrainCesium from './cesium/terrainCesium.js';
6
- import { VcsClassRegistry } from '../classRegistry.js';
3
+ import {
4
+ getHeightFromTerrainProvider,
5
+ getTerrainProviderForUrl,
6
+ } from './terrainHelpers.js';
7
+ import CesiumMap from '../map/cesiumMap.js';
8
+ import TerrainCesiumImpl from './cesium/terrainCesiumImpl.js';
9
+ import { layerClassRegistry } from '../classRegistry.js';
7
10
 
8
11
  /**
9
12
  * @typedef {LayerOptions} TerrainOptions
@@ -21,12 +24,13 @@ import { VcsClassRegistry } from '../classRegistry.js';
21
24
  /**
22
25
  * represents a terrain layer.
23
26
  * @class
24
- * @export
25
27
  * @extends {Layer}
26
28
  * @api stable
27
29
  */
28
- class Terrain extends Layer {
29
- static get className() { return 'vcs.vcm.layer.Terrain'; }
30
+ class TerrainLayer extends Layer {
31
+ static get className() {
32
+ return 'TerrainLayer';
33
+ }
30
34
 
31
35
  /**
32
36
  * @returns {TerrainOptions}
@@ -44,23 +48,27 @@ class Terrain extends Layer {
44
48
  */
45
49
  constructor(options) {
46
50
  super(options);
47
- const defaultOptions = Terrain.getDefaultOptions();
51
+ const defaultOptions = TerrainLayer.getDefaultOptions();
48
52
 
49
- this._supportedMaps = [
50
- CesiumMap.className,
51
- ];
53
+ this._supportedMaps = [CesiumMap.className];
52
54
 
53
55
  /**
54
56
  * @type {boolean}
55
57
  * @api
56
58
  */
57
- this.requestVertexNormals = parseBoolean(options.requestVertexNormals, defaultOptions.requestVertexNormals);
59
+ this.requestVertexNormals = parseBoolean(
60
+ options.requestVertexNormals,
61
+ defaultOptions.requestVertexNormals,
62
+ );
58
63
 
59
64
  /**
60
65
  * @type {boolean}
61
66
  * @api
62
67
  */
63
- this.requestWaterMask = parseBoolean(options.requestWaterMask, defaultOptions.requestWaterMask);
68
+ this.requestWaterMask = parseBoolean(
69
+ options.requestWaterMask,
70
+ defaultOptions.requestWaterMask,
71
+ );
64
72
  }
65
73
 
66
74
  /**
@@ -77,11 +85,11 @@ class Terrain extends Layer {
77
85
  /**
78
86
  * @inheritDoc
79
87
  * @param {import("@vcmap/core").VcsMap} map
80
- * @returns {Array<TerrainCesium>}
88
+ * @returns {Array<TerrainCesiumImpl>}
81
89
  */
82
90
  createImplementationsForMap(map) {
83
91
  if (map instanceof CesiumMap) {
84
- return [new TerrainCesium(map, this.getImplementationOptions())];
92
+ return [new TerrainCesiumImpl(map, this.getImplementationOptions())];
85
93
  }
86
94
  return [];
87
95
  }
@@ -92,9 +100,8 @@ class Terrain extends Layer {
92
100
  * @returns {Promise<Array<import("ol/coordinate").Coordinate>>}
93
101
  * @api stable
94
102
  */
95
- getHeightForWGS84Coordinates(coords) {
96
- const terrainProvider = getTerrainProviderForUrl({
97
- url: this.url,
103
+ async getHeightForWGS84Coordinates(coords) {
104
+ const terrainProvider = await getTerrainProviderForUrl(this.url, {
98
105
  requestVertexNormals: this.requestVertexNormals,
99
106
  requestWaterMask: this.requestWaterMask,
100
107
  });
@@ -106,7 +113,7 @@ class Terrain extends Layer {
106
113
  */
107
114
  toJSON() {
108
115
  const config = /** @type {TerrainOptions} */ (super.toJSON());
109
- const defaultOptions = Terrain.getDefaultOptions();
116
+ const defaultOptions = TerrainLayer.getDefaultOptions();
110
117
 
111
118
  if (this.requestVertexNormals !== defaultOptions.requestVertexNormals) {
112
119
  config.requestVertexNormals = this.requestVertexNormals;
@@ -118,5 +125,5 @@ class Terrain extends Layer {
118
125
  }
119
126
  }
120
127
 
121
- VcsClassRegistry.registerClass(Terrain.className, Terrain);
122
- export default Terrain;
128
+ layerClassRegistry.registerClass(TerrainLayer.className, TerrainLayer);
129
+ export default TerrainLayer;
@@ -1,7 +1,7 @@
1
- import CesiumTilesetCesium from './cesium/cesiumTilesetCesium.js';
1
+ import CesiumTilesetCesiumImpl from './cesium/cesiumTilesetCesiumImpl.js';
2
2
 
3
3
  /**
4
- * @param {CesiumTilesetCesium} impl
4
+ * @param {CesiumTilesetCesiumImpl} impl
5
5
  * @param {number=} timeout
6
6
  * @returns {Promise<void>}
7
7
  */
@@ -26,22 +26,27 @@ function waitForImplTilesLoaded(impl, timeout) {
26
26
  }
27
27
 
28
28
  /**
29
- * @param {import("@vcmap/core").CesiumTileset|import("@vcmap/core").FeatureStore} layer
29
+ * @param {import("@vcmap/core").CesiumTilesetLayer|import("@vcmap/core").FeatureStoreLayer} layer
30
30
  * @param {number=} timeout
31
31
  * @returns {Promise<void>}
32
32
  */
33
33
  export async function tiledLayerLoaded(layer, timeout) {
34
- const impls = /** @type {Array<CesiumTilesetCesium>} */
35
- (layer.getImplementations().filter(i => i instanceof CesiumTilesetCesium));
36
- if (!layer.active || impls.every(i => i.cesium3DTileset.tilesLoaded)) {
34
+ const impls =
35
+ /** @type {Array<CesiumTilesetCesiumImpl>} */
36
+ (
37
+ layer
38
+ .getImplementations()
39
+ .filter((i) => i instanceof CesiumTilesetCesiumImpl)
40
+ );
41
+ if (!layer.active || impls.every((i) => i.cesium3DTileset.tilesLoaded)) {
37
42
  return;
38
43
  }
39
44
 
40
- await Promise.all(impls.map(i => waitForImplTilesLoaded(i, timeout)));
45
+ await Promise.all(impls.map((i) => waitForImplTilesLoaded(i, timeout)));
41
46
  }
42
47
 
43
48
  /**
44
- * @param {import("@vcmap/cesium").Globe} globe
49
+ * @param {import("@vcmap-cesium/engine").Globe} globe
45
50
  * @param {number=} timeout
46
51
  * @returns {Promise<void>}
47
52
  */
@@ -1,9 +1,10 @@
1
- import axios from 'axios';
2
1
  import MVT from 'ol/format/MVT.js';
3
2
  import Feature from 'ol/Feature.js';
4
3
  import { getCenter } from 'ol/extent.js';
5
4
  import TileProvider, { rectangleToExtent } from './tileProvider.js';
6
5
  import { getURL } from './urlTemplateTileProvider.js';
6
+ import { requestArrayBuffer } from '../../util/fetch.js';
7
+ import { tileProviderClassRegistry } from '../../classRegistry.js';
7
8
 
8
9
  /**
9
10
  * @typedef {TileProviderOptions} MVTTileProviderOptions
@@ -17,7 +18,6 @@ import { getURL } from './urlTemplateTileProvider.js';
17
18
  *
18
19
  * @class
19
20
  * @extends {TileProvider}
20
- * @export
21
21
  * @api
22
22
  */
23
23
  class MVTTileProvider extends TileProvider {
@@ -25,7 +25,9 @@ class MVTTileProvider extends TileProvider {
25
25
  * @readonly
26
26
  * @returns {string}
27
27
  */
28
- static get className() { return 'vcs.vcm.layer.tileProvider.MVTTileProvider'; }
28
+ static get className() {
29
+ return 'MVTTileProvider';
30
+ }
29
31
 
30
32
  /**
31
33
  * @returns {MVTTileProviderOptions}
@@ -62,6 +64,26 @@ class MVTTileProvider extends TileProvider {
62
64
  this._MVTFormat = new MVT({ featureClass: Feature });
63
65
  }
64
66
 
67
+ /**
68
+ * @type {string}
69
+ */
70
+ get locale() {
71
+ return super.locale;
72
+ }
73
+
74
+ /**
75
+ * sets the locale and clears the Cache if the URL is a locale aware Object.
76
+ * @param {string} value
77
+ */
78
+ set locale(value) {
79
+ if (this.locale !== value) {
80
+ super.locale = value;
81
+ if (this.url.includes('{locale}')) {
82
+ this.clearCache();
83
+ }
84
+ }
85
+ }
86
+
65
87
  /**
66
88
  * @inheritDoc
67
89
  * @param {number} x
@@ -71,13 +93,14 @@ class MVTTileProvider extends TileProvider {
71
93
  */
72
94
  async loader(x, y, z) {
73
95
  const rectangle = this.tilingScheme.tileXYToRectangle(x, y, z);
74
- const url = getURL(this.url, x, y, z, rectangle);
96
+ const url = getURL(this.url, x, y, z, rectangle, this.locale);
75
97
  const extent = rectangleToExtent(rectangle);
76
98
  const center = getCenter(extent);
77
- const response = await axios.get(url, { responseType: 'arraybuffer' });
78
- const features = /** @type {Array<import("ol").Feature<import("ol/geom/Geometry").default>>} */
79
- (this._MVTFormat.readFeatures(response.data));
80
- const sx = ((extent[2] - extent[0]) / 4096);
99
+ const data = await requestArrayBuffer(url);
100
+ const features =
101
+ /** @type {Array<import("ol").Feature<import("ol/geom/Geometry").default>>} */
102
+ (this._MVTFormat.readFeatures(data));
103
+ const sx = (extent[2] - extent[0]) / 4096;
81
104
  const sy = -((extent[3] - extent[1]) / 4096);
82
105
  features.forEach((feature) => {
83
106
  const idToUse = feature.get(this.idProperty);
@@ -99,6 +122,26 @@ class MVTTileProvider extends TileProvider {
99
122
  });
100
123
  return features;
101
124
  }
125
+
126
+ /**
127
+ * @returns {MVTTileProviderOptions}
128
+ */
129
+ toJSON() {
130
+ const config = /** @type {MVTTileProviderOptions} */ (super.toJSON());
131
+
132
+ if (this.url) {
133
+ config.url = this.url;
134
+ }
135
+
136
+ if (this.idProperty) {
137
+ config.idProperty = this.idProperty;
138
+ }
139
+ return config;
140
+ }
102
141
  }
103
142
 
104
143
  export default MVTTileProvider;
144
+ tileProviderClassRegistry.registerClass(
145
+ MVTTileProvider.className,
146
+ MVTTileProvider,
147
+ );
@@ -0,0 +1,87 @@
1
+ import { parseGeoJSON } from '../geojsonHelpers.js';
2
+ import TileProvider from './tileProvider.js';
3
+ import { requestJson } from '../../util/fetch.js';
4
+ import { tileProviderClassRegistry } from '../../classRegistry.js';
5
+
6
+ /**
7
+ * @typedef {TileProviderOptions} StaticGeoJSONTileProviderOptions
8
+ * @property {string} url - url to the geojson
9
+ * @api
10
+ */
11
+
12
+ /**
13
+ * Loads the provided geojson url and tiles the content in memory, data is only requested once
14
+ *
15
+ * @class
16
+ * @extends {TileProvider}
17
+ * @api
18
+ */
19
+ class StaticGeoJSONTileProvider extends TileProvider {
20
+ /**
21
+ * @readonly
22
+ * @returns {string}
23
+ */
24
+ static get className() {
25
+ return 'StaticGeoJSONTileProvider';
26
+ }
27
+
28
+ /**
29
+ * @returns {StaticGeoJSONTileProviderOptions}
30
+ */
31
+ static getDefaultOptions() {
32
+ return {
33
+ ...TileProvider.getDefaultOptions(),
34
+ url: undefined,
35
+ baseLevels: [0],
36
+ };
37
+ }
38
+
39
+ /**
40
+ * @param {StaticGeoJSONTileProviderOptions} options
41
+ */
42
+ constructor(options) {
43
+ const defaultOptions = StaticGeoJSONTileProvider.getDefaultOptions();
44
+ options.baseLevels = defaultOptions.baseLevels;
45
+ super(options);
46
+
47
+ /**
48
+ * @type {string}
49
+ */
50
+ this.url = options.url || defaultOptions.url;
51
+ }
52
+
53
+ /**
54
+ * @inheritDoc
55
+ * @param {number} x
56
+ * @param {number} y
57
+ * @param {number} z
58
+ * @returns {Promise<Array<import("ol").Feature<import("ol/geom/Geometry").default>>>}
59
+ */
60
+ // eslint-disable-next-line no-unused-vars
61
+ async loader(x, y, z) {
62
+ const data = await requestJson(this.url);
63
+ const { features } = parseGeoJSON(data, { dynamicStyle: true });
64
+ return features;
65
+ }
66
+
67
+ /**
68
+ * @returns {StaticGeoJSONTileProviderOptions}
69
+ */
70
+ toJSON() {
71
+ const config = /** @type {StaticGeoJSONTileProviderOptions} */ (
72
+ super.toJSON()
73
+ );
74
+ delete config.baseLevels;
75
+
76
+ if (this.url) {
77
+ config.url = this.url;
78
+ }
79
+ return config;
80
+ }
81
+ }
82
+
83
+ export default StaticGeoJSONTileProvider;
84
+ tileProviderClassRegistry.registerClass(
85
+ StaticGeoJSONTileProvider.className,
86
+ StaticGeoJSONTileProvider,
87
+ );