@cesium/engine 2.1.0 → 2.2.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 (193) hide show
  1. package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-379015ef.js} +1 -1
  2. package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-57f2b24f.js} +1 -1
  3. package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-ecabfc78.js} +1 -1
  4. package/Build/Workers/{Color-f85df1be.js → Color-14d1a36d.js} +1 -1
  5. package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-048c3c14.js} +1 -1
  6. package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-520c8619.js} +1 -1
  7. package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-119068b8.js} +1 -1
  8. package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-2dfc3523.js} +1 -1
  9. package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-0a1e0170.js} +1 -1
  10. package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-c5251669.js} +1 -1
  11. package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-d10a5221.js} +1 -1
  12. package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-7039a0ae.js} +1 -1
  13. package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-857186be.js} +1 -1
  14. package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-400fa1b7.js} +2 -2
  15. package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-7a2de5c6.js} +1 -1
  16. package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-916636fa.js} +1 -1
  17. package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-b4d02d4d.js} +1 -1
  18. package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-96fe1752.js} +5 -3
  19. package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-931f1ec6.js} +1 -1
  20. package/Build/Workers/{PolygonPipeline-d31ff61c.js → PolygonPipeline-32fc92cc.js} +1 -1
  21. package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-6d5c63e5.js} +1 -1
  22. package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-f068c1fb.js} +1 -1
  23. package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-879f996a.js} +1 -1
  24. package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-2d6f36f3.js} +1 -1
  25. package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-82882059.js} +1 -1
  26. package/Build/Workers/{Transforms-9e9df299.js → Transforms-9052372a.js} +6 -5
  27. package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-db7a64fb.js} +1 -1
  28. package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
  29. package/Build/Workers/combineGeometry.js +1 -1
  30. package/Build/Workers/createBoxGeometry.js +1 -1
  31. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  32. package/Build/Workers/createCircleGeometry.js +1 -1
  33. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  34. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  35. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  36. package/Build/Workers/createCorridorGeometry.js +1 -1
  37. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  38. package/Build/Workers/createCylinderGeometry.js +1 -1
  39. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  40. package/Build/Workers/createEllipseGeometry.js +1 -1
  41. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  42. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  43. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  44. package/Build/Workers/createFrustumGeometry.js +1 -1
  45. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  46. package/Build/Workers/createGeometry.js +1 -1
  47. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  48. package/Build/Workers/createPlaneGeometry.js +1 -1
  49. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  50. package/Build/Workers/createPolygonGeometry.js +1 -1
  51. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  52. package/Build/Workers/createPolylineGeometry.js +1 -1
  53. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  54. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  55. package/Build/Workers/createRectangleGeometry.js +1 -1
  56. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  57. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  58. package/Build/Workers/createSphereGeometry.js +1 -1
  59. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  60. package/Build/Workers/createVectorTileGeometries.js +1 -1
  61. package/Build/Workers/createVectorTilePolygons.js +1 -1
  62. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  63. package/Build/Workers/createVerticesFromHeightmap.js +1 -1
  64. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
  65. package/Build/Workers/createWallGeometry.js +1 -1
  66. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  67. package/Build/Workers/package.js +1 -1
  68. package/Build/Workers/transferTypedArrayTest.js +1 -1
  69. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  70. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +291 -191
  71. package/Source/Core/CesiumTerrainProvider.js +571 -434
  72. package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
  73. package/Source/Core/EllipsoidTerrainProvider.js +17 -10
  74. package/Source/Core/FrustumGeometry.js +1 -1
  75. package/Source/Core/GoogleEarthEnterpriseMetadata.js +86 -34
  76. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +119 -82
  77. package/Source/Core/Ion.js +1 -1
  78. package/Source/Core/IonResource.js +14 -3
  79. package/Source/Core/OrientedBoundingBox.js +4 -2
  80. package/Source/Core/RequestScheduler.js +1 -1
  81. package/Source/Core/Resource.js +2 -2
  82. package/Source/Core/TerrainProvider.js +9 -14
  83. package/Source/Core/TileProviderError.js +8 -8
  84. package/Source/Core/VRTheWorldTerrainProvider.js +193 -124
  85. package/Source/Core/buildModuleUrl.js +4 -3
  86. package/Source/Core/createWorldTerrain.js +20 -2
  87. package/Source/Core/createWorldTerrainAsync.js +48 -0
  88. package/Source/Core/sampleTerrain.js +9 -10
  89. package/Source/Core/sampleTerrainMostDetailed.js +66 -72
  90. package/Source/DataSources/Cesium3DTilesetVisualizer.js +37 -26
  91. package/Source/DataSources/Entity.js +6 -1
  92. package/Source/DataSources/ModelVisualizer.js +99 -31
  93. package/Source/DataSources/PolygonGraphics.js +1 -1
  94. package/Source/Scene/ArcGisMapServerImageryProvider.js +552 -376
  95. package/Source/Scene/BingMapsImageryProvider.js +511 -305
  96. package/Source/Scene/BufferLoader.js +29 -34
  97. package/Source/Scene/Cesium3DTile.js +388 -251
  98. package/Source/Scene/Cesium3DTileBatchTable.js +2 -2
  99. package/Source/Scene/Cesium3DTileContent.js +16 -0
  100. package/Source/Scene/Cesium3DTileContentFactory.js +4 -4
  101. package/Source/Scene/Cesium3DTilePass.js +8 -11
  102. package/Source/Scene/Cesium3DTileStyleEngine.js +1 -1
  103. package/Source/Scene/Cesium3DTilesVoxelProvider.js +225 -117
  104. package/Source/Scene/Cesium3DTileset.js +755 -481
  105. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +301 -0
  106. package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +33 -46
  107. package/Source/Scene/Cesium3DTilesetSkipTraversal.js +421 -0
  108. package/Source/Scene/Cesium3DTilesetTraversal.js +219 -671
  109. package/Source/Scene/ClassificationPrimitive.js +7 -0
  110. package/Source/Scene/Composite3DTileContent.js +69 -26
  111. package/Source/Scene/CreditDisplay.js +20 -4
  112. package/Source/Scene/DepthPlane.js +1 -1
  113. package/Source/Scene/Empty3DTileContent.js +31 -1
  114. package/Source/Scene/Geometry3DTileContent.js +47 -7
  115. package/Source/Scene/Globe.js +5 -1
  116. package/Source/Scene/GlobeSurfaceTile.js +2 -1
  117. package/Source/Scene/GlobeSurfaceTileProvider.js +50 -27
  118. package/Source/Scene/GltfBufferViewLoader.js +47 -91
  119. package/Source/Scene/GltfDracoLoader.js +110 -112
  120. package/Source/Scene/GltfImageLoader.js +71 -78
  121. package/Source/Scene/GltfIndexBufferLoader.js +108 -121
  122. package/Source/Scene/GltfJsonLoader.js +75 -74
  123. package/Source/Scene/GltfLoader.js +392 -280
  124. package/Source/Scene/GltfStructuralMetadataLoader.js +109 -110
  125. package/Source/Scene/GltfTextureLoader.js +97 -96
  126. package/Source/Scene/GltfVertexBufferLoader.js +128 -133
  127. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +353 -225
  128. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +491 -331
  129. package/Source/Scene/GridImageryProvider.js +267 -104
  130. package/Source/Scene/GroundPolylinePrimitive.js +12 -1
  131. package/Source/Scene/GroundPrimitive.js +8 -1
  132. package/Source/Scene/I3SDataProvider.js +214 -113
  133. package/Source/Scene/I3SFeature.js +7 -6
  134. package/Source/Scene/I3SLayer.js +26 -37
  135. package/Source/Scene/I3SNode.js +59 -66
  136. package/Source/Scene/Imagery.js +6 -1
  137. package/Source/Scene/ImageryLayer.js +299 -48
  138. package/Source/Scene/ImageryLayerCollection.js +26 -0
  139. package/Source/Scene/ImageryProvider.js +129 -111
  140. package/Source/Scene/Implicit3DTileContent.js +72 -23
  141. package/Source/Scene/ImplicitSubtree.js +66 -45
  142. package/Source/Scene/IonImageryProvider.js +471 -264
  143. package/Source/Scene/MapboxImageryProvider.js +272 -112
  144. package/Source/Scene/MapboxStyleImageryProvider.js +270 -111
  145. package/Source/Scene/MetadataSchemaLoader.js +26 -36
  146. package/Source/Scene/Model/B3dmLoader.js +42 -46
  147. package/Source/Scene/Model/GeoJsonLoader.js +8 -32
  148. package/Source/Scene/Model/I3dmLoader.js +48 -74
  149. package/Source/Scene/Model/Model.js +470 -132
  150. package/Source/Scene/Model/Model3DTileContent.js +83 -31
  151. package/Source/Scene/Model/ModelAnimationCollection.js +3 -3
  152. package/Source/Scene/Model/ModelDrawCommand.js +15 -26
  153. package/Source/Scene/Model/ModelUtility.js +16 -16
  154. package/Source/Scene/Model/PntsLoader.js +27 -32
  155. package/Source/Scene/Multiple3DTileContent.js +134 -115
  156. package/Source/Scene/PointCloud.js +11 -19
  157. package/Source/Scene/Primitive.js +20 -0
  158. package/Source/Scene/QuadtreePrimitive.js +2 -0
  159. package/Source/Scene/QuadtreeTileProvider.js +4 -8
  160. package/Source/Scene/ResourceCache.js +47 -105
  161. package/Source/Scene/ResourceCacheStatistics.js +24 -58
  162. package/Source/Scene/ResourceLoader.js +5 -17
  163. package/Source/Scene/ResourceLoaderState.js +12 -4
  164. package/Source/Scene/Scene.js +65 -0
  165. package/Source/Scene/ScreenSpaceCameraController.js +1 -1
  166. package/Source/Scene/SingleTileImageryProvider.js +382 -209
  167. package/Source/Scene/Terrain.js +196 -0
  168. package/Source/Scene/TileCoordinatesImageryProvider.js +267 -104
  169. package/Source/Scene/TileMapServiceImageryProvider.js +177 -85
  170. package/Source/Scene/Tileset3DTileContent.js +47 -5
  171. package/Source/Scene/TimeDynamicPointCloud.js +15 -2
  172. package/Source/Scene/UrlTemplateImageryProvider.js +343 -215
  173. package/Source/Scene/Vector3DTileClampedPolylines.js +96 -84
  174. package/Source/Scene/Vector3DTileContent.js +47 -22
  175. package/Source/Scene/Vector3DTileGeometry.js +57 -52
  176. package/Source/Scene/Vector3DTilePoints.js +72 -68
  177. package/Source/Scene/Vector3DTilePolygons.js +118 -117
  178. package/Source/Scene/Vector3DTilePolylines.js +86 -82
  179. package/Source/Scene/Vector3DTilePrimitive.js +0 -1
  180. package/Source/Scene/VoxelContent.js +61 -63
  181. package/Source/Scene/VoxelPrimitive.js +39 -91
  182. package/Source/Scene/VoxelProvider.js +2 -2
  183. package/Source/Scene/WebMapServiceImageryProvider.js +272 -111
  184. package/Source/Scene/WebMapTileServiceImageryProvider.js +270 -107
  185. package/Source/Scene/computeFlyToLocationForRectangle.js +33 -37
  186. package/Source/Scene/createOsmBuildings.js +6 -0
  187. package/Source/Scene/createOsmBuildingsAsync.js +82 -0
  188. package/Source/Scene/createWorldImagery.js +14 -5
  189. package/Source/Scene/createWorldImageryAsync.js +39 -0
  190. package/Source/Widget/CesiumWidget.js +55 -27
  191. package/index.d.ts +2158 -1395
  192. package/index.js +58 -51
  193. package/package.json +1 -1
@@ -51,59 +51,77 @@ import Cartographic from "../Core/Cartographic.js";
51
51
  import Check from "../Core/Check.js";
52
52
  import defaultValue from "../Core/defaultValue.js";
53
53
  import defined from "../Core/defined.js";
54
+ import deprecationWarning from "../Core/deprecationWarning.js";
54
55
  import destroyObject from "../Core/destroyObject.js";
55
- import DeveloperError from "../Core/DeveloperError.js";
56
56
  import HeightmapEncoding from "../Core/HeightmapEncoding.js";
57
57
  import Resource from "../Core/Resource.js";
58
+ import RuntimeError from "../Core/RuntimeError.js";
58
59
  import TaskProcessor from "../Core/TaskProcessor.js";
59
60
  import WebMercatorProjection from "../Core/WebMercatorProjection.js";
60
61
  import I3SLayer from "./I3SLayer.js";
61
62
  import Lerc from "lerc";
62
63
  import Rectangle from "../Core/Rectangle.js";
63
64
 
65
+ /**
66
+ * @typedef {Object} I3SDataProvider.ConstructorOptions
67
+ *
68
+ * Initialization options for the I3SDataProvider constructor
69
+ *
70
+ * @property {Resource|string} [url] The url of the I3S dataset. Deprecated.
71
+ * @property {string} [name] The name of the I3S dataset.
72
+ * @property {boolean} [show=true] Determines if the dataset will be shown.
73
+ * @property {ArcGISTiledElevationTerrainProvider|Promise<ArcGISTiledElevationTerrainProvider>} [geoidTiledTerrainProvider] Tiled elevation provider describing an Earth Gravitational Model. If defined, geometry will be shifted based on the offsets given by this provider. Required to position I3S data sets with gravity-related height at the correct location.
74
+ * @property {boolean} [traceFetches=false] Debug option. When true, log a message whenever an I3S tile is fetched.
75
+ * @property {Cesium3DTileset.ConstructorOptions} [cesium3dTilesetOptions] Object containing options to pass to an internally created {@link Cesium3DTileset}. See {@link Cesium3DTileset} for list of valid properties. All options can be used with the exception of <code>url</code> and <code>show</code> which are overridden by values from I3SDataProvider.
76
+ */
77
+
64
78
  /**
65
79
  * An I3SDataProvider is the main public class for I3S support. The url option
66
80
  * should return a scene object. Currently supported I3S versions are 1.6 and
67
81
  * 1.7/1.8 (OGC I3S 1.2). I3SFeature and I3SNode classes implement the
68
82
  * Object Model for I3S entities, with public interfaces.
69
83
  *
84
+ * <div class="notice">
85
+ * This object is normally not instantiated directly, use {@link I3SDataProvider.fromUrl}.
86
+ * </div>
87
+ *
70
88
  * @alias I3SDataProvider
71
89
  * @constructor
72
90
  *
73
- * @param {object} options Object with the following properties:
74
- * @param {Resource|string} options.url The url of the I3S dataset.
75
- * @param {string} [options.name] The name of the I3S dataset.
76
- * @param {boolean} [options.show=true] Determines if the dataset will be shown.
77
- * @param {ArcGISTiledElevationTerrainProvider} [options.geoidTiledTerrainProvider] Tiled elevation provider describing an Earth Gravitational Model. If defined, geometry will be shifted based on the offsets given by this provider. Required to position I3S data sets with gravity-related height at the correct location.
78
- * @param {boolean} [options.traceFetches=false] Debug option. When true, log a message whenever an I3S tile is fetched.
79
- * @param {object} [options.cesium3dTilesetOptions] Object containing options to pass to an internally created {@link Cesium3DTileset}. See {@link Cesium3DTileset} for list of valid properties. All options can be used with the exception of <code>url</code> and <code>show</code> which are overridden by values from I3SDataProvider.
91
+ * @param {I3SDataProvider.ConstructorOptions} options An object describing initialization options
92
+ *
93
+ * @see I3SDataProvider.fromUrl
94
+ * @see ArcGISTiledElevationTerrainProvider
80
95
  *
81
96
  * @example
82
- * const i3sData = new I3SDataProvider({
83
- * url: 'https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0'
84
- * });
85
- * viewer.scene.primitives.add(i3sData);
97
+ * try {
98
+ * const i3sData = await I3SDataProvider.fromUrl(
99
+ * "https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0"
100
+ * );
101
+ * viewer.scene.primitives.add(i3sData);
102
+ * } catch (error) {
103
+ * console.log(`There was an error creating the I3S Data Provider: ${error}`);
104
+ * }
86
105
  *
87
106
  * @example
88
- * const geoidService = new Cesium.ArcGISTiledElevationTerrainProvider({
89
- * url: "https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/EGM2008/ImageServer",
90
- * });
91
- * let i3sData = new I3SDataProvider({
92
- * url: 'https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0',
93
- * geoidTiledTerrainProvider: geoidService
94
- * });
95
- * viewer.scene.primitives.add(i3sData);
107
+ * try {
108
+ * const geoidService = await Cesium.ArcGISTiledElevationTerrainProvider.fromUrl(
109
+ * "https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/EGM2008/ImageServer"
110
+ * );
111
+ * const i3sData = await I3SDataProvider.fromUrl(
112
+ * "https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0", {
113
+ * geoidTiledTerrainProvider: geoidService
114
+ * });
115
+ * viewer.scene.primitives.add(i3sData);
116
+ * } catch (error) {
117
+ * console.log(`There was an error creating the I3S Data Provider: ${error}`);
118
+ * }
96
119
  */
97
120
  function I3SDataProvider(options) {
98
121
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
99
122
 
100
- //>>includeStart('debug', pragmas.debug);
101
- Check.defined("options.url", options.url);
102
- //>>includeEnd('debug');
103
-
104
123
  // All public configuration is defined as ES5 properties
105
124
  // These are just the "private" variables and their defaults.
106
- this._resource = Resource.createIfNeeded(options.url);
107
125
  this._name = options.name;
108
126
  this._show = defaultValue(options.show, true);
109
127
  this._geoidTiledTerrainProvider = options.geoidTiledTerrainProvider;
@@ -117,13 +135,22 @@ function I3SDataProvider(options) {
117
135
  this._layers = [];
118
136
  this._data = undefined;
119
137
  this._extent = undefined;
120
- this._geoidDataIsReadyPromise = undefined;
138
+ this._geoidDataPromise = undefined;
121
139
  this._geoidDataList = undefined;
122
140
  this._decoderTaskProcessor = undefined;
123
- this._readyPromise = undefined;
124
- this._ready = false;
141
+ this._taskProcessorReadyPromise = undefined;
142
+
143
+ if (defined(options.url)) {
144
+ deprecationWarning(
145
+ "I3SDataProvider options.url",
146
+ "I3SDataProvider constructor parameter options.url was deprecated in CesiumJS 1.104. It will be removed in 1.107. Use I3SDataProvider.fromUrl instead."
147
+ );
148
+ this._readyPromise = undefined;
149
+ this._ready = false;
125
150
 
126
- this._load();
151
+ this._resource = Resource.createIfNeeded(options.url);
152
+ this._load();
153
+ }
127
154
  }
128
155
 
129
156
  Object.defineProperties(I3SDataProvider.prototype, {
@@ -200,14 +227,6 @@ Object.defineProperties(I3SDataProvider.prototype, {
200
227
  */
201
228
  layers: {
202
229
  get: function () {
203
- //>>includeStart('debug', pragmas.debug);
204
- if (!this.ready) {
205
- throw new DeveloperError(
206
- "The dataset is not loaded. Use I3SDataProvider.readyPromise or wait for I3SDataProvider.ready to be true."
207
- );
208
- }
209
- //>>includeEnd('debug');
210
-
211
230
  return this._layers;
212
231
  },
213
232
  },
@@ -220,14 +239,6 @@ Object.defineProperties(I3SDataProvider.prototype, {
220
239
  */
221
240
  data: {
222
241
  get: function () {
223
- //>>includeStart('debug', pragmas.debug);
224
- if (!this.ready) {
225
- throw new DeveloperError(
226
- "The dataset is not loaded. Use I3SDataProvider.readyPromise or wait for I3SDataProvider.ready to be true."
227
- );
228
- }
229
- //>>includeEnd('debug');
230
-
231
242
  return this._data;
232
243
  },
233
244
  },
@@ -240,14 +251,6 @@ Object.defineProperties(I3SDataProvider.prototype, {
240
251
  */
241
252
  extent: {
242
253
  get: function () {
243
- //>>includeStart('debug', pragmas.debug);
244
- if (!this.ready) {
245
- throw new DeveloperError(
246
- "The dataset is not loaded. Use I3SDataProvider.readyPromise or wait for I3SDataProvider.ready to be true."
247
- );
248
- }
249
- //>>includeEnd('debug');
250
-
251
254
  return this._extent;
252
255
  },
253
256
  },
@@ -257,9 +260,14 @@ Object.defineProperties(I3SDataProvider.prototype, {
257
260
  * @memberof I3SDataProvider.prototype
258
261
  * @type {Promise<I3SDataProvider>}
259
262
  * @readonly
263
+ * @deprecated
260
264
  */
261
265
  readyPromise: {
262
266
  get: function () {
267
+ deprecationWarning(
268
+ "I3SDataProvider.readyPromise",
269
+ "I3SDataProvider.readyPromise was deprecated in CesiumJS 1.104. It will be removed in 1.107. Use I3SDataProvider.fromUrl instead."
270
+ );
263
271
  return this._readyPromise;
264
272
  },
265
273
  },
@@ -270,9 +278,14 @@ Object.defineProperties(I3SDataProvider.prototype, {
270
278
  * @memberof I3SDataProvider.prototype
271
279
  * @type {boolean}
272
280
  * @readonly
281
+ * @deprecated
273
282
  */
274
283
  ready: {
275
284
  get: function () {
285
+ deprecationWarning(
286
+ "I3SDataProvider.ready",
287
+ "I3SDataProvider.ready was deprecated in CesiumJS 1.104. It will be removed in 1.107. Use I3SDataProvider.fromUrl instead."
288
+ );
276
289
  return this._ready;
277
290
  },
278
291
  },
@@ -333,9 +346,7 @@ I3SDataProvider.prototype.isDestroyed = function () {
333
346
  */
334
347
  I3SDataProvider.prototype.update = function (frameState) {
335
348
  for (let i = 0; i < this._layers.length; i++) {
336
- // Reintroducing tileset.ready check to prevent random failures
337
- // when initially loading the tileset
338
- if (defined(this._layers[i]._tileset) && this._layers[i]._tileset.ready) {
349
+ if (defined(this._layers[i]._tileset)) {
339
350
  this._layers[i]._tileset.update(frameState);
340
351
  }
341
352
  }
@@ -346,7 +357,7 @@ I3SDataProvider.prototype.update = function (frameState) {
346
357
  */
347
358
  I3SDataProvider.prototype.prePassesUpdate = function (frameState) {
348
359
  for (let i = 0; i < this._layers.length; i++) {
349
- if (defined(this._layers[i]._tileset) && this._layers[i]._tileset.ready) {
360
+ if (defined(this._layers[i]._tileset)) {
350
361
  this._layers[i]._tileset.prePassesUpdate(frameState);
351
362
  }
352
363
  }
@@ -357,7 +368,7 @@ I3SDataProvider.prototype.prePassesUpdate = function (frameState) {
357
368
  */
358
369
  I3SDataProvider.prototype.postPassesUpdate = function (frameState) {
359
370
  for (let i = 0; i < this._layers.length; i++) {
360
- if (defined(this._layers[i]._tileset) && this._layers[i]._tileset.ready) {
371
+ if (defined(this._layers[i]._tileset)) {
361
372
  this._layers[i]._tileset.postPassesUpdate(frameState);
362
373
  }
363
374
  }
@@ -368,40 +379,113 @@ I3SDataProvider.prototype.postPassesUpdate = function (frameState) {
368
379
  */
369
380
  I3SDataProvider.prototype.updateForPass = function (frameState, passState) {
370
381
  for (let i = 0; i < this._layers.length; i++) {
371
- if (defined(this._layers[i]._tileset) && this._layers[i]._tileset.ready) {
382
+ if (defined(this._layers[i]._tileset)) {
372
383
  this._layers[i]._tileset.updateForPass(frameState, passState);
373
384
  }
374
385
  }
375
386
  };
376
387
 
388
+ /**
389
+ * Creates an I3SDataProvider. Currently supported I3S versions are 1.6 and
390
+ * 1.7/1.8 (OGC I3S 1.2).
391
+ *
392
+ * @param {string|Resource} url The url of the I3S dataset, which should return an I3S scene object
393
+ * @param {I3SDataProvider.ConstructorOptions} options An object describing initialization options
394
+ * @returns {Promise<I3SDataProvider>}
395
+ *
396
+ * @example
397
+ * try {
398
+ * const i3sData = await I3SDataProvider.fromUrl(
399
+ * "https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0"
400
+ * );
401
+ * viewer.scene.primitives.add(i3sData);
402
+ * } catch (error) {
403
+ * console.log(`There was an error creating the I3S Data Provider: ${error}`);
404
+ * }
405
+ *
406
+ * @example
407
+ * try {
408
+ * const geoidService = await Cesium.ArcGISTiledElevationTerrainProvider.fromUrl(
409
+ * "https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/EGM2008/ImageServer"
410
+ * );
411
+ * const i3sData = await I3SDataProvider.fromUrl(
412
+ * "https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/Frankfurt2017_vi3s_18/SceneServer/layers/0", {
413
+ * geoidTiledTerrainProvider: geoidService
414
+ * });
415
+ * viewer.scene.primitives.add(i3sData);
416
+ * } catch (error) {
417
+ * console.log(`There was an error creating the I3S Data Provider: ${error}`);
418
+ * }
419
+ */
420
+ I3SDataProvider.fromUrl = async function (url, options) {
421
+ //>>includeStart('debug', pragmas.debug);
422
+ Check.defined("url", url);
423
+ //>>includeEnd('debug');
424
+
425
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
426
+
427
+ const resource = Resource.createIfNeeded(url);
428
+ const data = await I3SDataProvider.loadJson(resource);
429
+
430
+ const provider = new I3SDataProvider(options);
431
+ provider._resource = resource;
432
+ provider._data = data;
433
+
434
+ // Success
435
+ if (defined(data.layers)) {
436
+ for (let layerIndex = 0; layerIndex < data.layers.length; layerIndex++) {
437
+ const newLayer = new I3SLayer(
438
+ provider,
439
+ data.layers[layerIndex],
440
+ layerIndex
441
+ );
442
+ provider._layers.push(newLayer);
443
+ }
444
+ } else {
445
+ const newLayer = new I3SLayer(provider, data, data.id);
446
+ provider._layers.push(newLayer);
447
+ }
448
+
449
+ provider._computeExtent();
450
+
451
+ // Start loading all of the tiles
452
+ const layerPromises = [];
453
+ for (let i = 0; i < provider._layers.length; i++) {
454
+ layerPromises.push(provider._layers[i].load());
455
+ }
456
+
457
+ await Promise.all(layerPromises);
458
+ provider._ready = true;
459
+ provider._readyPromise = Promise.resolve(provider);
460
+ return provider;
461
+ };
462
+
377
463
  /**
378
464
  * @private
379
465
  */
380
466
  I3SDataProvider.prototype._load = function () {
381
467
  const that = this;
382
- this._readyPromise = this._loadJson(this._resource).then(function (data) {
468
+ this._readyPromise = I3SDataProvider.loadJson(
469
+ this._resource,
470
+ this._traceFetches
471
+ ).then(function (data) {
383
472
  // Success
384
473
  that._data = data;
385
- if (defined(that._data.layers)) {
386
- for (
387
- let layerIndex = 0;
388
- layerIndex < that._data.layers.length;
389
- layerIndex++
390
- ) {
474
+ if (defined(data.layers)) {
475
+ for (let layerIndex = 0; layerIndex < data.layers.length; layerIndex++) {
391
476
  const newLayer = new I3SLayer(
392
477
  that,
393
- that._data.layers[layerIndex],
478
+ data.layers[layerIndex],
394
479
  layerIndex
395
480
  );
396
481
  that._layers.push(newLayer);
397
482
  }
398
483
  } else {
399
- const newLayer = new I3SLayer(that, that._data, that._data.id);
484
+ const newLayer = new I3SLayer(that, data, data.id);
400
485
  that._layers.push(newLayer);
401
486
  }
402
487
 
403
488
  that._computeExtent();
404
- that._loadGeoidData();
405
489
 
406
490
  // Start loading all of the tiles
407
491
  const layerPromises = [];
@@ -427,27 +511,32 @@ I3SDataProvider._fetchJson = function (resource) {
427
511
 
428
512
  /**
429
513
  * @private
514
+ *
515
+ * @param {Resource} resource The JSON resource to request
516
+ * @param {boolean} [trace=false] Log the resource
517
+ * @returns {Promise<object>} The fetched data
430
518
  */
431
- I3SDataProvider.prototype._loadJson = function (resource) {
432
- if (this._traceFetches) {
519
+ I3SDataProvider.loadJson = async function (resource, trace) {
520
+ if (trace) {
433
521
  console.log("I3S FETCH:", resource.url);
434
522
  }
435
523
 
436
- return I3SDataProvider._fetchJson(resource).then(function (data) {
437
- if (defined(data.error)) {
438
- console.error("Failed to fetch I3S ", resource.url);
439
- if (defined(data.error.message)) {
440
- console.error(data.error.message);
441
- }
442
- if (defined(data.error.details)) {
443
- for (let i = 0; i < data.error.details.length; i++) {
444
- console.log(data.error.details[i]);
445
- }
524
+ const data = await I3SDataProvider._fetchJson(resource);
525
+ if (defined(data.error)) {
526
+ console.error("Failed to fetch I3S ", resource.url);
527
+ if (defined(data.error.message)) {
528
+ console.error(data.error.message);
529
+ }
530
+ if (defined(data.error.details)) {
531
+ for (let i = 0; i < data.error.details.length; i++) {
532
+ console.log(data.error.details[i]);
446
533
  }
447
- return Promise.reject(data.error);
448
534
  }
449
- return data;
450
- });
535
+
536
+ throw new RuntimeError(data.error);
537
+ }
538
+
539
+ return data;
451
540
  };
452
541
 
453
542
  /**
@@ -496,25 +585,32 @@ I3SDataProvider.prototype._binarizeGltf = function (rawGltf) {
496
585
 
497
586
  /**
498
587
  * @private
588
+ * @returns {Promise<TaskProcessor>}
499
589
  */
500
- I3SDataProvider.prototype._getDecoderTaskProcessor = function () {
590
+ I3SDataProvider.prototype.getDecoderTaskProcessor = function () {
591
+ if (defined(this._taskProcessorReadyPromise)) {
592
+ return this._taskProcessorReadyPromise;
593
+ }
594
+
501
595
  if (!defined(this._decoderTaskProcessor)) {
502
596
  const processor = new TaskProcessor("decodeI3S");
503
- this._taskProcessorReadyPromise = processor.initWebAssemblyModule({
504
- modulePath: "ThirdParty/Workers/draco_decoder_nodejs.js",
505
- wasmBinaryFile: "ThirdParty/draco_decoder.wasm",
506
- });
597
+ this._taskProcessorReadyPromise = processor
598
+ .initWebAssemblyModule({
599
+ modulePath: "ThirdParty/Workers/draco_decoder_nodejs.js",
600
+ wasmBinaryFile: "ThirdParty/draco_decoder.wasm",
601
+ })
602
+ .then(() => {
603
+ return processor;
604
+ });
507
605
 
508
606
  this._decoderTaskProcessor = processor;
509
607
  }
510
608
 
511
- return this._decoderTaskProcessor;
609
+ return this._taskProcessorReadyPromise;
512
610
  };
513
611
 
514
612
  function getCoveredTiles(terrainProvider, extent) {
515
- return terrainProvider.readyPromise.then(function () {
516
- return getTiles(terrainProvider, extent);
517
- });
613
+ return getTiles(terrainProvider, extent);
518
614
  }
519
615
 
520
616
  const scratchCartesian2 = new Cartesian2();
@@ -614,35 +710,40 @@ function getTiles(terrainProvider, extent) {
614
710
  });
615
711
  }
616
712
 
617
- /**
618
- * @private
619
- */
620
- I3SDataProvider.prototype._loadGeoidData = function () {
713
+ async function loadGeoidData(provider) {
621
714
  // Load tiles from arcgis
622
- const that = this;
623
- const geoidTerrainProvider = this._geoidTiledTerrainProvider;
715
+ const geoidTerrainProvider = provider._geoidTiledTerrainProvider;
624
716
 
625
717
  if (!defined(geoidTerrainProvider)) {
626
718
  console.log(
627
719
  "No Geoid Terrain service provided - no geoid conversion will be performed."
628
720
  );
629
- this._geoidDataIsReadyPromise = Promise.resolve();
630
- return this._geoidDataIsReadyPromise;
721
+ return;
631
722
  }
632
723
 
633
- this._geoidDataIsReadyPromise = geoidTerrainProvider.readyPromise.then(
634
- function () {
635
- const tilesReadyPromise = getCoveredTiles(
636
- geoidTerrainProvider,
637
- that._extent
638
- );
639
- return tilesReadyPromise.then(function (heightMaps) {
640
- that._geoidDataList = heightMaps;
641
- });
642
- }
643
- );
724
+ try {
725
+ const heightMaps = await getCoveredTiles(
726
+ geoidTerrainProvider,
727
+ provider._extent
728
+ );
729
+ provider._geoidDataList = heightMaps;
730
+ } catch (error) {
731
+ console.log(
732
+ "Error retrieving Geoid Terrain tiles - no geoid conversion will be performed."
733
+ );
734
+ }
735
+ }
736
+
737
+ /**
738
+ * @private
739
+ */
740
+ I3SDataProvider.prototype.loadGeoidData = async function () {
741
+ if (defined(this._geoidDataPromise)) {
742
+ return this._geoidDataPromise;
743
+ }
644
744
 
645
- return this._geoidDataIsReadyPromise;
745
+ this._geoidDataPromise = loadGeoidData(this);
746
+ return this._geoidDataPromise;
646
747
  };
647
748
 
648
749
  /**
@@ -1,4 +1,5 @@
1
1
  import defined from "../Core/defined.js";
2
+ import I3SDataProvider from "./I3SDataProvider.js";
2
3
 
3
4
  /**
4
5
  * This class implements an I3S Feature.
@@ -52,12 +53,12 @@ Object.defineProperties(I3SFeature.prototype, {
52
53
  * @returns {Promise} A promise that is resolved when the data of the I3S feature is loaded
53
54
  * @private
54
55
  */
55
- I3SFeature.prototype.load = function () {
56
- const that = this;
57
- return this._dataProvider._loadJson(this._resource).then(function (data) {
58
- that._data = data;
59
- return data;
60
- });
56
+ I3SFeature.prototype.load = async function () {
57
+ this._data = await I3SDataProvider.loadJson(
58
+ this._resource,
59
+ this._dataProvider._traceFetches
60
+ );
61
+ return this._data;
61
62
  };
62
63
 
63
64
  export default I3SFeature;
@@ -1,6 +1,7 @@
1
1
  import defined from "../Core/defined.js";
2
2
  import Rectangle from "../Core/Rectangle.js";
3
3
  import Resource from "../Core/Resource.js";
4
+ import RuntimeError from "../Core/RuntimeError.js";
4
5
  import Cesium3DTileset from "./Cesium3DTileset.js";
5
6
  import I3SNode from "./I3SNode.js";
6
7
 
@@ -84,7 +85,7 @@ Object.defineProperties(I3SLayer.prototype, {
84
85
  /**
85
86
  * Gets the Cesium3DTileset for this layer.
86
87
  * @memberof I3SLayer.prototype
87
- * @type {Cesium3DTileset}
88
+ * @type {Cesium3DTileset|undefined}
88
89
  * @readonly
89
90
  */
90
91
  tileset: {
@@ -167,28 +168,22 @@ Object.defineProperties(I3SLayer.prototype, {
167
168
  * @returns {Promise} A promise that is resolved when the layer data is loaded
168
169
  * @private
169
170
  */
170
- I3SLayer.prototype.load = function () {
171
- const that = this;
172
-
171
+ I3SLayer.prototype.load = async function () {
173
172
  if (this._data.spatialReference.wkid !== 4326) {
174
- console.log(
173
+ throw new RuntimeError(
175
174
  `Unsupported spatial reference: ${this._data.spatialReference.wkid}`
176
175
  );
177
- return Promise.reject();
178
176
  }
179
177
 
180
- return this._dataProvider._geoidDataIsReadyPromise.then(function () {
181
- return that._loadRootNode().then(function () {
182
- that._create3DTileset();
183
- return that._tileset.readyPromise.then(function () {
184
- that._rootNode._tile = that._tileset._root;
185
- that._tileset._root._i3sNode = that._rootNode;
186
- if (that.legacyVersion16) {
187
- return that._rootNode._loadChildren();
188
- }
189
- });
190
- });
191
- });
178
+ await this._dataProvider.loadGeoidData();
179
+ await this._loadRootNode();
180
+ await this._create3DTileset();
181
+
182
+ this._rootNode._tile = this._tileset._root;
183
+ this._tileset._root._i3sNode = this._rootNode;
184
+ if (this.legacyVersion16) {
185
+ return this._rootNode._loadChildren();
186
+ }
192
187
  };
193
188
 
194
189
  /**
@@ -378,7 +373,7 @@ I3SLayer.prototype._computeExtent = function () {
378
373
  /**
379
374
  * @private
380
375
  */
381
- I3SLayer.prototype._create3DTileset = function () {
376
+ I3SLayer.prototype._create3DTileset = async function () {
382
377
  const inPlaceTileset = {
383
378
  asset: {
384
379
  version: "1.0",
@@ -391,7 +386,7 @@ I3SLayer.prototype._create3DTileset = function () {
391
386
  type: "application/json",
392
387
  });
393
388
 
394
- const inPlaceTilesetURL = URL.createObjectURL(tilesetBlob);
389
+ const tilesetUrl = URL.createObjectURL(tilesetBlob);
395
390
 
396
391
  const tilesetOptions = {};
397
392
  if (defined(this._dataProvider._cesium3dTilesetOptions)) {
@@ -401,26 +396,20 @@ I3SLayer.prototype._create3DTileset = function () {
401
396
  }
402
397
  }
403
398
  }
404
- tilesetOptions.url = inPlaceTilesetURL;
405
- tilesetOptions.show = this._dataProvider.show;
406
-
407
- this._tileset = new Cesium3DTileset(tilesetOptions);
408
399
 
400
+ this._tileset = await Cesium3DTileset.fromUrl(tilesetUrl, tilesetOptions);
401
+ this._tileset.show = this._dataProvider.show;
409
402
  this._tileset._isI3STileSet = true;
403
+ this._tileset.tileUnload.addEventListener(function (tile) {
404
+ tile._i3sNode._clearGeometryData();
405
+ URL.revokeObjectURL(tile._contentResource._url);
406
+ tile._contentResource = tile._i3sNode.resource;
407
+ });
410
408
 
411
- const that = this;
412
- this._tileset.readyPromise.then(function () {
413
- that._tileset.tileUnload.addEventListener(function (tile) {
414
- tile._i3sNode._clearGeometryData();
415
- URL.revokeObjectURL(tile._contentResource._url);
416
- tile._contentResource = tile._i3sNode.resource;
417
- });
418
-
419
- that._tileset.tileVisible.addEventListener(function (tile) {
420
- if (defined(tile._i3sNode)) {
421
- tile._i3sNode._loadChildren();
422
- }
423
- });
409
+ this._tileset.tileVisible.addEventListener(function (tile) {
410
+ if (defined(tile._i3sNode)) {
411
+ tile._i3sNode._loadChildren();
412
+ }
424
413
  });
425
414
  };
426
415