@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
@@ -1,8 +1,9 @@
1
1
  import Cartesian2 from "../Core/Cartesian2.js";
2
2
  import Cartographic from "../Core/Cartographic.js";
3
+ import Check from "../Core/Check.js";
3
4
  import defaultValue from "../Core/defaultValue.js";
4
5
  import defined from "../Core/defined.js";
5
- import DeveloperError from "../Core/DeveloperError.js";
6
+ import deprecationWarning from "../Core/deprecationWarning.js";
6
7
  import GeographicProjection from "../Core/GeographicProjection.js";
7
8
  import GeographicTilingScheme from "../Core/GeographicTilingScheme.js";
8
9
  import Rectangle from "../Core/Rectangle.js";
@@ -18,7 +19,7 @@ import UrlTemplateImageryProvider from "./UrlTemplateImageryProvider.js";
18
19
  *
19
20
  * Initialization options for the TileMapServiceImageryProvider constructor
20
21
  *
21
- * @property {Resource|string|Promise<Resource>|Promise<string>} [url='.'] Path to image tiles on server.
22
+ * @property {Resource|string|Promise<Resource>|Promise<string>} [url] Path to image tiles on server. Deprecated
22
23
  * @property {string} [fileExtension='png'] The file extension for images on the server.
23
24
  * @property {Credit|string} [credit=''] A credit for the data source, which is displayed on the canvas.
24
25
  * @property {number} [minimumLevel=0] The minimum level-of-detail supported by the imagery provider. Take care when specifying
@@ -35,10 +36,15 @@ import UrlTemplateImageryProvider from "./UrlTemplateImageryProvider.js";
35
36
  * @property {number} [tileWidth=256] Pixel width of image tiles.
36
37
  * @property {number} [tileHeight=256] Pixel height of image tiles.
37
38
  * @property {boolean} [flipXY] Older versions of gdal2tiles.py flipped X and Y values in tilemapresource.xml.
39
+ * @property {TileDiscardPolicy} [tileDiscardPolicy] A policy for discarding tile images according to some criteria
38
40
  * Specifying this option will do the same, allowing for loading of these incorrect tilesets.
39
41
  */
40
42
 
41
43
  /**
44
+ * <div class="notice">
45
+ * To construct a TileMapServiceImageryProvider, call {@link TileMapServiceImageryProvider.fromUrl}. Do not call the constructor directly.
46
+ * </div>
47
+ *
42
48
  * An imagery provider that provides tiled imagery as generated by
43
49
  * {@link http://www.maptiler.org/|MapTiler}, {@link http://www.klokan.cz/projects/gdal2tiles/|GDAL2Tiles}, etc.
44
50
  *
@@ -58,11 +64,11 @@ import UrlTemplateImageryProvider from "./UrlTemplateImageryProvider.js";
58
64
  * @see UrlTemplateImageryProvider
59
65
  *
60
66
  * @example
61
- * const tms = new Cesium.TileMapServiceImageryProvider({
62
- * url : '../images/cesium_maptiler/Cesium_Logo_Color',
63
- * fileExtension: 'png',
64
- * maximumLevel: 4,
65
- * rectangle: new Cesium.Rectangle(
67
+ * const tms = await Cesium.TileMapServiceImageryProvider.fromUrl(
68
+ * "../images/cesium_maptiler/Cesium_Logo_Color", {
69
+ * fileExtension: 'png',
70
+ * maximumLevel: 4,
71
+ * rectangle: new Cesium.Rectangle(
66
72
  * Cesium.Math.toRadians(-120.0),
67
73
  * Cesium.Math.toRadians(20.0),
68
74
  * Cesium.Math.toRadians(-60.0),
@@ -72,43 +78,122 @@ import UrlTemplateImageryProvider from "./UrlTemplateImageryProvider.js";
72
78
  function TileMapServiceImageryProvider(options) {
73
79
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
74
80
 
75
- //>>includeStart('debug', pragmas.debug);
76
- if (!defined(options.url)) {
77
- throw new DeveloperError("options.url is required.");
78
- }
79
- //>>includeEnd('debug');
81
+ if (defined(options.url)) {
82
+ deprecationWarning(
83
+ "TileMapServiceImageryProvider options.url",
84
+ "options.url was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use TileMapServiceImageryProvider.fromUrl instead."
85
+ );
80
86
 
81
- this._tmsResource = undefined;
82
- this._xmlResource = undefined;
83
- this._options = options;
84
- this._metadataError = undefined;
85
-
86
- this._metadataSuccess = this._metadataSuccess.bind(this);
87
- this._metadataFailure = this._metadataFailure.bind(this);
88
- this._requestMetadata = this._requestMetadata.bind(this);
89
-
90
- let resource;
91
- const that = this;
92
- const promise = Promise.resolve(options.url)
93
- .then(function (url) {
94
- resource = Resource.createIfNeeded(url);
95
- resource.appendForwardSlash();
96
-
97
- that._tmsResource = resource;
98
- that._xmlResource = resource.getDerivedResource({
99
- url: "tilemapresource.xml",
87
+ this._metadataError = undefined;
88
+ this._ready = false;
89
+
90
+ let resource;
91
+ const that = this;
92
+ const promise = Promise.resolve(options.url)
93
+ .then(function (url) {
94
+ resource = Resource.createIfNeeded(url);
95
+ resource.appendForwardSlash();
96
+
97
+ that._tmsResource = resource;
98
+ that._xmlResource = resource.getDerivedResource({
99
+ url: "tilemapresource.xml",
100
+ });
101
+
102
+ return TileMapServiceImageryProvider._requestMetadata(
103
+ options,
104
+ that._tmsResource,
105
+ that._xmlResource,
106
+ that
107
+ );
108
+ })
109
+ .catch((e) => {
110
+ return Promise.reject(e);
100
111
  });
101
112
 
102
- return that._requestMetadata();
103
- })
104
- .catch((e) => {
105
- return Promise.reject(e);
106
- });
113
+ UrlTemplateImageryProvider.call(this, promise);
114
+ this._promise = promise;
115
+ }
107
116
 
108
- UrlTemplateImageryProvider.call(this, promise);
109
- this._promise = promise;
117
+ // After readyPromise deprecation, this should become just
118
+ // UrlTemplateImageryProvider.call(this, options);
110
119
  }
111
120
 
121
+ TileMapServiceImageryProvider._requestMetadata = async function (
122
+ options,
123
+ tmsResource,
124
+ xmlResource,
125
+ provider
126
+ ) {
127
+ // Try to load remaining parameters from XML
128
+ try {
129
+ const xml = await xmlResource.fetchXML();
130
+ return TileMapServiceImageryProvider._metadataSuccess(
131
+ xml,
132
+ options,
133
+ tmsResource,
134
+ xmlResource,
135
+ provider
136
+ );
137
+ } catch (e) {
138
+ if (e instanceof RequestErrorEvent) {
139
+ return TileMapServiceImageryProvider._metadataFailure(
140
+ options,
141
+ tmsResource
142
+ );
143
+ }
144
+
145
+ throw e;
146
+ }
147
+ };
148
+ /**
149
+ * Creates a TileMapServiceImageryProvider from the specified url.
150
+ *
151
+ * @param {Resource|String} url Path to image tiles on server.
152
+ * @param {TileMapServiceImageryProvider.ConstructorOptions} [options] Object describing initialization options.
153
+ * @returns {Promise<TileMapServiceImageryProvider>} A promise that resolves to the created TileMapServiceImageryProvider.
154
+ *
155
+ * @example
156
+ * const tms = await Cesium.TileMapServiceImageryProvider.fromUrl(
157
+ * '../images/cesium_maptiler/Cesium_Logo_Color', {
158
+ * fileExtension: 'png',
159
+ * maximumLevel: 4,
160
+ * rectangle: new Cesium.Rectangle(
161
+ * Cesium.Math.toRadians(-120.0),
162
+ * Cesium.Math.toRadians(20.0),
163
+ * Cesium.Math.toRadians(-60.0),
164
+ * Cesium.Math.toRadians(40.0))
165
+ * });
166
+ *
167
+ * @exception {RuntimeError} Unable to find expected tilesets or bbox attributes in tilemapresource.xml
168
+ * @exception {RuntimeError} tilemapresource.xml specifies an unsupported profile attribute
169
+ */
170
+ TileMapServiceImageryProvider.fromUrl = async function (url, options) {
171
+ //>>includeStart('debug', pragmas.debug);
172
+ Check.defined("url", url);
173
+ //>>includeEnd('debug');
174
+
175
+ const resource = Resource.createIfNeeded(url);
176
+ resource.appendForwardSlash();
177
+
178
+ const tmsResource = resource;
179
+ const xmlResource = resource.getDerivedResource({
180
+ url: "tilemapresource.xml",
181
+ });
182
+
183
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
184
+ const metadata = await TileMapServiceImageryProvider._requestMetadata(
185
+ options,
186
+ tmsResource,
187
+ xmlResource
188
+ );
189
+
190
+ // Once the deprecated behavior is removed, this can become
191
+ // return new TileMapServiceImageryProvider(metadata);
192
+ const provider = new TileMapServiceImageryProvider();
193
+ UrlTemplateImageryProvider.call(provider, metadata);
194
+ return provider;
195
+ };
196
+
112
197
  if (defined(Object.create)) {
113
198
  TileMapServiceImageryProvider.prototype = Object.create(
114
199
  UrlTemplateImageryProvider.prototype
@@ -116,19 +201,6 @@ if (defined(Object.create)) {
116
201
  TileMapServiceImageryProvider.prototype.constructor = TileMapServiceImageryProvider;
117
202
  }
118
203
 
119
- TileMapServiceImageryProvider.prototype._requestMetadata = function () {
120
- // Try to load remaining parameters from XML
121
- return this._xmlResource
122
- .fetchXML()
123
- .then(this._metadataSuccess)
124
- .catch((e) => {
125
- if (e instanceof RequestErrorEvent) {
126
- return this._metadataFailure();
127
- }
128
- return Promise.reject(e);
129
- });
130
- };
131
-
132
204
  /**
133
205
  * Mutates the properties of a given rectangle so it does not extend outside of the given tiling scheme's rectangle
134
206
  * @private
@@ -173,16 +245,29 @@ function calculateSafeMinimumDetailLevel(
173
245
  return minimumLevel;
174
246
  }
175
247
 
176
- TileMapServiceImageryProvider.prototype._metadataSuccess = function (xml) {
248
+ /**
249
+ * Parses the results of a successful xml request
250
+ * @private
251
+ *
252
+ * @param {Object} xml
253
+ * @param {TileMapServiceImageryProvider.ConstructorOptions} options
254
+ * @param {Resource} tmsResource
255
+ * @param {Resource} xmlResource
256
+ * @returns {UrlTemplateImageryProvider.ConstructorOptions}
257
+ */
258
+ TileMapServiceImageryProvider._metadataSuccess = function (
259
+ xml,
260
+ options,
261
+ tmsResource,
262
+ xmlResource,
263
+ provider
264
+ ) {
177
265
  const tileFormatRegex = /tileformat/i;
178
266
  const tileSetRegex = /tileset/i;
179
267
  const tileSetsRegex = /tilesets/i;
180
268
  const bboxRegex = /boundingbox/i;
181
269
  let format, bbox, tilesets;
182
270
  const tilesetsList = []; //list of TileSets
183
- const xmlResource = this._xmlResource;
184
- let metadataError = this._metadataError;
185
- const requestMetadata = this._requestMetadata;
186
271
 
187
272
  // Allowing options properties (already copied to that) to override XML values
188
273
 
@@ -209,20 +294,18 @@ TileMapServiceImageryProvider.prototype._metadataSuccess = function (xml) {
209
294
  let message;
210
295
  if (!defined(tilesets) || !defined(bbox)) {
211
296
  message = `Unable to find expected tilesets or bbox attributes in ${xmlResource.url}.`;
212
- metadataError = TileProviderError.reportError(
213
- metadataError,
214
- this,
215
- this.errorEvent,
216
- message
217
- );
218
- if (metadataError.retry) {
219
- this._metadataError = metadataError;
220
- return requestMetadata();
297
+ if (defined(provider)) {
298
+ TileProviderError.reportError(
299
+ undefined,
300
+ provider,
301
+ provider.errorEvent,
302
+ message
303
+ );
221
304
  }
222
- return Promise.reject(new RuntimeError(message));
305
+
306
+ throw new RuntimeError(message);
223
307
  }
224
308
 
225
- const options = this._options;
226
309
  const fileExtension = defaultValue(
227
310
  options.fileExtension,
228
311
  format.getAttribute("extension")
@@ -262,18 +345,17 @@ TileMapServiceImageryProvider.prototype._metadataSuccess = function (xml) {
262
345
  ellipsoid: options.ellipsoid,
263
346
  });
264
347
  } else {
265
- message = `${xmlResource.url}specifies an unsupported profile attribute, ${tilingSchemeName}.`;
266
- metadataError = TileProviderError.reportError(
267
- metadataError,
268
- this,
269
- this.errorEvent,
270
- message
271
- );
272
- if (metadataError.retry) {
273
- this._metadataError = metadataError;
274
- return requestMetadata();
348
+ message = `${xmlResource.url} specifies an unsupported profile attribute, ${tilingSchemeName}.`;
349
+ if (defined(provider)) {
350
+ TileProviderError.reportError(
351
+ undefined,
352
+ provider,
353
+ provider.errorEvent,
354
+ message
355
+ );
275
356
  }
276
- return Promise.reject(new RuntimeError(message));
357
+
358
+ throw new RuntimeError(message);
277
359
  }
278
360
  }
279
361
 
@@ -344,11 +426,11 @@ TileMapServiceImageryProvider.prototype._metadataSuccess = function (xml) {
344
426
  minimumLevel
345
427
  );
346
428
 
347
- const templateResource = this._tmsResource.getDerivedResource({
429
+ const templateResource = tmsResource.getDerivedResource({
348
430
  url: `{z}/{x}/{reverseY}.${fileExtension}`,
349
431
  });
350
432
 
351
- return Promise.resolve({
433
+ return {
352
434
  url: templateResource,
353
435
  tilingScheme: tilingScheme,
354
436
  rectangle: rectangle,
@@ -358,12 +440,22 @@ TileMapServiceImageryProvider.prototype._metadataSuccess = function (xml) {
358
440
  maximumLevel: maximumLevel,
359
441
  tileDiscardPolicy: options.tileDiscardPolicy,
360
442
  credit: options.credit,
361
- });
443
+ };
362
444
  };
363
445
 
364
- TileMapServiceImageryProvider.prototype._metadataFailure = function () {
446
+ /**
447
+ * Handle xml request failure by providing the default values
448
+ * @private
449
+ *
450
+ * @param {TileMapServiceImageryProvider.ConstructorOptions} options
451
+ * @param {Resource} tmsResource
452
+ * @returns {UrlTemplateImageryProvider.ConstructorOptions}
453
+ */
454
+ TileMapServiceImageryProvider._metadataFailure = function (
455
+ options,
456
+ tmsResource
457
+ ) {
365
458
  // Can't load XML, still allow options and defaults
366
- const options = this._options;
367
459
  const fileExtension = defaultValue(options.fileExtension, "png");
368
460
  const tileWidth = defaultValue(options.tileWidth, 256);
369
461
  const tileHeight = defaultValue(options.tileHeight, 256);
@@ -383,11 +475,11 @@ TileMapServiceImageryProvider.prototype._metadataFailure = function () {
383
475
  options.minimumLevel
384
476
  );
385
477
 
386
- const templateResource = this._tmsResource.getDerivedResource({
478
+ const templateResource = tmsResource.getDerivedResource({
387
479
  url: `{z}/{x}/{reverseY}.${fileExtension}`,
388
480
  });
389
481
 
390
- return Promise.resolve({
482
+ return {
391
483
  url: templateResource,
392
484
  tilingScheme: tilingScheme,
393
485
  rectangle: rectangle,
@@ -397,7 +489,7 @@ TileMapServiceImageryProvider.prototype._metadataFailure = function () {
397
489
  maximumLevel: maximumLevel,
398
490
  tileDiscardPolicy: options.tileDiscardPolicy,
399
491
  credit: options.credit,
400
- });
492
+ };
401
493
  };
402
494
 
403
495
  export default TileMapServiceImageryProvider;
@@ -1,4 +1,5 @@
1
1
  import destroyObject from "../Core/destroyObject.js";
2
+ import deprecationWarning from "../Core/deprecationWarning.js";
2
3
 
3
4
  /**
4
5
  * Represents content for a tile in a
@@ -13,7 +14,7 @@ import destroyObject from "../Core/destroyObject.js";
13
14
  *
14
15
  * @private
15
16
  */
16
- function Tileset3DTileContent(tileset, tile, resource, json) {
17
+ function Tileset3DTileContent(tileset, tile, resource) {
17
18
  this._tileset = tileset;
18
19
  this._tile = tile;
19
20
  this._resource = resource;
@@ -23,7 +24,8 @@ function Tileset3DTileContent(tileset, tile, resource, json) {
23
24
  this._metadata = undefined;
24
25
  this._group = undefined;
25
26
 
26
- this._readyPromise = initialize(this, json);
27
+ this._ready = false;
28
+ this._readyPromise = Promise.resolve(this);
27
29
  }
28
30
 
29
31
  Object.defineProperties(Tileset3DTileContent.prototype, {
@@ -69,8 +71,37 @@ Object.defineProperties(Tileset3DTileContent.prototype, {
69
71
  },
70
72
  },
71
73
 
74
+ /**
75
+ * Returns true when the tile's content is ready to render; otherwise false
76
+ *
77
+ * @memberof Tileset3DTileContent.prototype
78
+ *
79
+ * @type {boolean}
80
+ * @readonly
81
+ * @private
82
+ */
83
+ ready: {
84
+ get: function () {
85
+ return this._ready;
86
+ },
87
+ },
88
+
89
+ /**
90
+ * Gets the promise that will be resolved when the tile's content is ready to render.
91
+ *
92
+ * @memberof Tileset3DTileContent.prototype
93
+ *
94
+ * @type {Promise<Tileset3DTileContent>}
95
+ * @readonly
96
+ * @deprecated
97
+ * @private
98
+ */
72
99
  readyPromise: {
73
100
  get: function () {
101
+ deprecationWarning(
102
+ "Tileset3DTileContent.readyPromise",
103
+ "Tileset3DTileContent.readyPromise was deprecated in CesiumJS 1.104. It will be removed in 1.107. Wait for Tileset3DTileContent.ready to return true instead."
104
+ );
74
105
  return this._readyPromise;
75
106
  },
76
107
  },
@@ -118,10 +149,21 @@ Object.defineProperties(Tileset3DTileContent.prototype, {
118
149
  },
119
150
  });
120
151
 
121
- function initialize(content, json) {
152
+ /**
153
+ * Creates an instance of Tileset3DTileContent from a parsed JSON object
154
+ * @param {Cesium3DTileset} tileset
155
+ * @param {Cesium3DTile} tile
156
+ * @param {Resource} resource
157
+ * @param {object} json
158
+ * @returns {Tileset3DTileContent}
159
+ */
160
+ Tileset3DTileContent.fromJson = function (tileset, tile, resource, json) {
161
+ const content = new Tileset3DTileContent(tileset, tile, resource);
122
162
  content._tileset.loadTileset(content._resource, json, content._tile);
123
- return Promise.resolve(content);
124
- }
163
+ content._ready = true;
164
+
165
+ return content;
166
+ };
125
167
 
126
168
  /**
127
169
  * Part of the {@link Cesium3DTileContent} interface. <code>Tileset3DTileContent</code>
@@ -3,6 +3,7 @@ import combine from "../Core/combine.js";
3
3
  import defaultValue from "../Core/defaultValue.js";
4
4
  import defined from "../Core/defined.js";
5
5
  import destroyObject from "../Core/destroyObject.js";
6
+ import deprecationWarning from "../Core/deprecationWarning.js";
6
7
  import Event from "../Core/Event.js";
7
8
  import getTimestamp from "../Core/getTimestamp.js";
8
9
  import JulianDate from "../Core/JulianDate.js";
@@ -183,6 +184,7 @@ function TimeDynamicPointCloud(options) {
183
184
  this._clockMultiplier = 0.0;
184
185
  this._resolveReadyPromise = undefined;
185
186
  const that = this;
187
+ // This is here for backwards compatibility and can be removed when readyPromise is removed.
186
188
  this._readyPromise = new Promise(function (resolve) {
187
189
  that._resolveReadyPromise = resolve;
188
190
  });
@@ -252,9 +254,14 @@ Object.defineProperties(TimeDynamicPointCloud.prototype, {
252
254
  *
253
255
  * @type {Promise<TimeDynamicPointCloud>}
254
256
  * @readonly
257
+ * @deprecated
255
258
  */
256
259
  readyPromise: {
257
260
  get: function () {
261
+ deprecationWarning(
262
+ "TimeDynamicPointCloud.readyPromise",
263
+ "TimeDynamicPointCloud.readyPromise was deprecated in CesiumJS 1.104. It will be removed in 1.107. Use TimeDynamicPointCloud.frameFailed instead."
264
+ );
258
265
  return this._readyPromise;
259
266
  },
260
267
  },
@@ -395,6 +402,7 @@ function requestFrame(that, interval, frameState) {
395
402
  sequential: true,
396
403
  ready: false,
397
404
  touchedFrameNumber: frameState.frameNumber,
405
+ uri: uri,
398
406
  };
399
407
  frames[index] = frame;
400
408
  Resource.fetchArrayBuffer({
@@ -410,7 +418,6 @@ function requestFrame(that, interval, frameState) {
410
418
  uniformMapLoaded: getUniformMapLoaded(that),
411
419
  pickIdLoaded: getPickIdLoaded,
412
420
  });
413
- return frame.pointCloud.readyPromise;
414
421
  })
415
422
  .catch(handleFrameFailure(that, uri));
416
423
  }
@@ -507,7 +514,12 @@ function renderFrame(that, frame, updateState, frameState) {
507
514
  pointCloud.geometricErrorScale = shading.geometricErrorScale;
508
515
  pointCloud.maximumAttenuation = getMaximumAttenuation(that);
509
516
 
510
- pointCloud.update(frameState);
517
+ try {
518
+ pointCloud.update(frameState);
519
+ } catch (error) {
520
+ handleFrameFailure(that, frame.uri)(error);
521
+ }
522
+
511
523
  frame.touchedFrameNumber = frameState.frameNumber;
512
524
  }
513
525
 
@@ -738,6 +750,7 @@ TimeDynamicPointCloud.prototype.update = function (frameState) {
738
750
  const that = this;
739
751
  if (defined(frame) && !defined(this._lastRenderedFrame)) {
740
752
  frameState.afterRender.push(function () {
753
+ // This is here for backwards compatibility and can be removed when readyPromise is removed.
741
754
  that._resolveReadyPromise(that);
742
755
  return true;
743
756
  });