@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,7 +1,7 @@
1
1
  import Check from "../Core/Check.js";
2
2
  import defaultValue from "../Core/defaultValue.js";
3
3
  import defined from "../Core/defined.js";
4
- import DeveloperError from "../Core/DeveloperError.js";
4
+ import deprecationWarning from "../Core/deprecationWarning.js";
5
5
  import Event from "../Core/Event.js";
6
6
  import IonResource from "../Core/IonResource.js";
7
7
  import RuntimeError from "../Core/RuntimeError.js";
@@ -35,17 +35,59 @@ const ImageryProviderMapping = {
35
35
  WMTS: createFactory(WebMapTileServiceImageryProvider),
36
36
  };
37
37
 
38
+ const ImageryProviderAsyncMapping = {
39
+ ARCGIS_MAPSERVER: ArcGisMapServerImageryProvider.fromUrl,
40
+ BING: async (url, options) => {
41
+ return BingMapsImageryProvider.fromUrl(url, options);
42
+ },
43
+ GOOGLE_EARTH: async (url, options) => {
44
+ const channel = options.channel;
45
+ delete options.channel;
46
+ return GoogleEarthEnterpriseMapsProvider.fromUrl(url, channel, options);
47
+ },
48
+ MAPBOX: (url, options) => {
49
+ return new MapboxImageryProvider({
50
+ url: url,
51
+ ...options,
52
+ });
53
+ },
54
+ SINGLE_TILE: SingleTileImageryProvider.fromUrl,
55
+ TMS: TileMapServiceImageryProvider.fromUrl,
56
+ URL_TEMPLATE: (url, options) => {
57
+ return new UrlTemplateImageryProvider({
58
+ url: url,
59
+ ...options,
60
+ });
61
+ },
62
+ WMS: (url, options) => {
63
+ return new WebMapServiceImageryProvider({
64
+ url: url,
65
+ ...options,
66
+ });
67
+ },
68
+ WMTS: (url, options) => {
69
+ return new WebMapTileServiceImageryProvider({
70
+ url: url,
71
+ ...options,
72
+ });
73
+ },
74
+ };
75
+
38
76
  /**
39
77
  * @typedef {object} IonImageryProvider.ConstructorOptions
40
78
  *
41
79
  * Initialization options for the TileMapServiceImageryProvider constructor
42
80
  *
43
- * @property {number} assetId An ion imagery asset ID
81
+ * @property {number} [assetId] An ion imagery asset ID. Deprecated.
44
82
  * @property {string} [accessToken=Ion.defaultAccessToken] The access token to use.
45
83
  * @property {string|Resource} [server=Ion.defaultServer] The resource to the Cesium ion API server.
46
84
  */
47
85
 
48
86
  /**
87
+ * <div class="notice">
88
+ * To construct a IonImageryProvider, call {@link IonImageryProvider.fromAssetId}. Do not call the constructor directly.
89
+ * </div>
90
+ *
49
91
  * Provides tiled imagery using the Cesium ion REST API.
50
92
  *
51
93
  * @alias IonImageryProvider
@@ -54,168 +96,38 @@ const ImageryProviderMapping = {
54
96
  * @param {IonImageryProvider.ConstructorOptions} options Object describing initialization options
55
97
  *
56
98
  * @example
57
- * viewer.imageryLayers.addImageryProvider(new Cesium.IonImageryProvider({ assetId : 23489024 }));
99
+ * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));
100
+ * viewer.imageryLayers.add(imageryLayer);
101
+ *
102
+ * @see IonImageryProvider.fromAssetId
58
103
  */
59
104
  function IonImageryProvider(options) {
60
105
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
61
106
 
62
- const assetId = options.assetId;
63
- //>>includeStart('debug', pragmas.debug);
64
- Check.typeOf.number("options.assetId", assetId);
65
- //>>includeEnd('debug');
66
-
67
- /**
68
- * The default alpha blending value of this provider, with 0.0 representing fully transparent and
69
- * 1.0 representing fully opaque.
70
- *
71
- * @type {number|undefined}
72
- * @default undefined
73
- */
74
- this.defaultAlpha = undefined;
75
-
76
- /**
77
- * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and
78
- * 1.0 representing fully opaque.
79
- *
80
- * @type {number|undefined}
81
- * @default undefined
82
- */
83
- this.defaultNightAlpha = undefined;
84
-
85
- /**
86
- * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and
87
- * 1.0 representing fully opaque.
88
- *
89
- * @type {number|undefined}
90
- * @default undefined
91
- */
92
- this.defaultDayAlpha = undefined;
93
-
94
- /**
95
- * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0
96
- * makes the imagery darker while greater than 1.0 makes it brighter.
97
- *
98
- * @type {number|undefined}
99
- * @default undefined
100
- */
101
- this.defaultBrightness = undefined;
102
-
103
- /**
104
- * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces
105
- * the contrast while greater than 1.0 increases it.
106
- *
107
- * @type {number|undefined}
108
- * @default undefined
109
- */
110
- this.defaultContrast = undefined;
111
-
112
- /**
113
- * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.
114
- *
115
- * @type {number|undefined}
116
- * @default undefined
117
- */
118
- this.defaultHue = undefined;
119
-
120
- /**
121
- * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the
122
- * saturation while greater than 1.0 increases it.
123
- *
124
- * @type {number|undefined}
125
- * @default undefined
126
- */
127
- this.defaultSaturation = undefined;
128
-
129
- /**
130
- * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.
131
- *
132
- * @type {number|undefined}
133
- * @default undefined
134
- */
135
- this.defaultGamma = undefined;
136
-
137
- /**
138
- * The default texture minification filter to apply to this provider.
139
- *
140
- * @type {TextureMinificationFilter}
141
- * @default undefined
142
- */
143
- this.defaultMinificationFilter = undefined;
144
-
145
- /**
146
- * The default texture magnification filter to apply to this provider.
147
- *
148
- * @type {TextureMagnificationFilter}
149
- * @default undefined
150
- */
151
- this.defaultMagnificationFilter = undefined;
107
+ this._defaultAlpha = undefined;
108
+ this._defaultNightAlpha = undefined;
109
+ this._defaultDayAlpha = undefined;
110
+ this._defaultBrightness = undefined;
111
+ this._defaultContrast = undefined;
112
+ this._defaultHue = undefined;
113
+ this._defaultSaturation = undefined;
114
+ this._defaultGamma = undefined;
115
+ this._defaultMinificationFilter = undefined;
116
+ this._defaultMagnificationFilter = undefined;
152
117
 
153
118
  this._ready = false;
154
119
  this._tileCredits = undefined;
155
120
  this._errorEvent = new Event();
156
121
 
157
- const that = this;
158
- const endpointResource = IonResource._createEndpointResource(
159
- assetId,
160
- options
161
- );
162
-
163
- // A simple cache to avoid making repeated requests to ion for endpoints we've
164
- // already retrieved. This exists mainly to support Bing caching to reduce
165
- // world imagery sessions, but provides a small boost of performance in general
166
- // if constantly reloading assets
167
- const cacheKey =
168
- options.assetId.toString() + options.accessToken + options.server;
169
- let promise = IonImageryProvider._endpointCache[cacheKey];
170
- if (!defined(promise)) {
171
- promise = endpointResource.fetchJson();
172
- IonImageryProvider._endpointCache[cacheKey] = promise;
173
- }
174
-
175
- this._readyPromise = promise.then(function (endpoint) {
176
- if (endpoint.type !== "IMAGERY") {
177
- return Promise.reject(
178
- new RuntimeError(`Cesium ion asset ${assetId} is not an imagery asset.`)
179
- );
180
- }
181
-
182
- let imageryProvider;
183
- const externalType = endpoint.externalType;
184
- if (!defined(externalType)) {
185
- imageryProvider = new TileMapServiceImageryProvider({
186
- url: new IonResource(endpoint, endpointResource),
187
- });
188
- } else {
189
- const factory = ImageryProviderMapping[externalType];
190
-
191
- if (!defined(factory)) {
192
- return Promise.reject(
193
- new RuntimeError(
194
- `Unrecognized Cesium ion imagery type: ${externalType}`
195
- )
196
- );
197
- }
198
- imageryProvider = factory(endpoint.options);
199
- }
200
-
201
- that._tileCredits = IonResource.getCreditsFromEndpoint(
202
- endpoint,
203
- endpointResource
122
+ const assetId = options.assetId;
123
+ if (defined(assetId)) {
124
+ deprecationWarning(
125
+ "IonImageryProvider options.assetId",
126
+ "options.assetId was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use IonImageryProvider.fromAssetId instead."
204
127
  );
205
128
 
206
- imageryProvider.errorEvent.addEventListener(function (tileProviderError) {
207
- //Propagate the errorEvent but set the provider to this instance instead
208
- //of the inner instance.
209
- tileProviderError.provider = that;
210
- that._errorEvent.raiseEvent(tileProviderError);
211
- });
212
-
213
- that._imageryProvider = imageryProvider;
214
- return imageryProvider.readyPromise.then(function () {
215
- that._ready = true;
216
- return true;
217
- });
218
- });
129
+ IonImageryProvider._initialize(this, assetId, options);
130
+ }
219
131
  }
220
132
 
221
133
  Object.defineProperties(IonImageryProvider.prototype, {
@@ -224,9 +136,14 @@ Object.defineProperties(IonImageryProvider.prototype, {
224
136
  * @memberof IonImageryProvider.prototype
225
137
  * @type {boolean}
226
138
  * @readonly
139
+ * @deprecated
227
140
  */
228
141
  ready: {
229
142
  get: function () {
143
+ deprecationWarning(
144
+ "IonImageryProvider.ready",
145
+ "IonImageryProvider.ready was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use IonImageryProvider.fromAssetId instead."
146
+ );
230
147
  return this._ready;
231
148
  },
232
149
  },
@@ -236,96 +153,68 @@ Object.defineProperties(IonImageryProvider.prototype, {
236
153
  * @memberof IonImageryProvider.prototype
237
154
  * @type {Promise<boolean>}
238
155
  * @readonly
156
+ * @deprecated
239
157
  */
240
158
  readyPromise: {
241
159
  get: function () {
160
+ deprecationWarning(
161
+ "IonImageryProvider.readyPromise",
162
+ "IonImageryProvider.readyPromise was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use IonImageryProvider.fromAssetId instead."
163
+ );
242
164
  return this._readyPromise;
243
165
  },
244
166
  },
245
167
 
246
168
  /**
247
- * Gets the rectangle, in radians, of the imagery provided by the instance. This function should
248
- * not be called before {@link IonImageryProvider#ready} returns true.
169
+ * Gets the rectangle, in radians, of the imagery provided by the instance.
249
170
  * @memberof IonImageryProvider.prototype
250
171
  * @type {Rectangle}
251
172
  * @readonly
252
173
  */
253
174
  rectangle: {
254
175
  get: function () {
255
- //>>includeStart('debug', pragmas.debug);
256
- if (!this._ready) {
257
- throw new DeveloperError(
258
- "tileHeight must not be called before the imagery provider is ready."
259
- );
260
- }
261
- //>>includeEnd('debug');
262
176
  return this._imageryProvider.rectangle;
263
177
  },
264
178
  },
265
179
 
266
180
  /**
267
- * Gets the width of each tile, in pixels. This function should
268
- * not be called before {@link IonImageryProvider#ready} returns true.
181
+ * Gets the width of each tile, in pixels.
269
182
  * @memberof IonImageryProvider.prototype
270
183
  * @type {number}
271
184
  * @readonly
272
185
  */
273
186
  tileWidth: {
274
187
  get: function () {
275
- //>>includeStart('debug', pragmas.debug);
276
- if (!this._ready) {
277
- throw new DeveloperError(
278
- "tileWidth must not be called before the imagery provider is ready."
279
- );
280
- }
281
- //>>includeEnd('debug');
282
188
  return this._imageryProvider.tileWidth;
283
189
  },
284
190
  },
285
191
 
286
192
  /**
287
- * Gets the height of each tile, in pixels. This function should
288
- * not be called before {@link IonImageryProvider#ready} returns true.
193
+ * Gets the height of each tile, in pixels.
289
194
  * @memberof IonImageryProvider.prototype
290
195
  * @type {number}
291
196
  * @readonly
292
197
  */
293
198
  tileHeight: {
294
199
  get: function () {
295
- //>>includeStart('debug', pragmas.debug);
296
- if (!this._ready) {
297
- throw new DeveloperError(
298
- "tileHeight must not be called before the imagery provider is ready."
299
- );
300
- }
301
- //>>includeEnd('debug');
302
200
  return this._imageryProvider.tileHeight;
303
201
  },
304
202
  },
305
203
 
306
204
  /**
307
- * Gets the maximum level-of-detail that can be requested. This function should
308
- * not be called before {@link IonImageryProvider#ready} returns true.
205
+ * Gets the maximum level-of-detail that can be requested.
309
206
  * @memberof IonImageryProvider.prototype
310
207
  * @type {number|undefined}
311
208
  * @readonly
312
209
  */
313
210
  maximumLevel: {
314
211
  get: function () {
315
- //>>includeStart('debug', pragmas.debug);
316
- if (!this._ready) {
317
- throw new DeveloperError(
318
- "maximumLevel must not be called before the imagery provider is ready."
319
- );
320
- }
321
- //>>includeEnd('debug');
322
212
  return this._imageryProvider.maximumLevel;
323
213
  },
324
214
  },
325
215
 
326
216
  /**
327
- * Gets the minimum level-of-detail that can be requested. This function should
328
- * not be called before {@link IonImageryProvider#ready} returns true. Generally,
217
+ * Gets the minimum level-of-detail that can be requested. Generally,
329
218
  * a minimum level should only be used when the rectangle of the imagery is small
330
219
  * enough that the number of tiles at the minimum level is small. An imagery
331
220
  * provider with more than a few tiles at the minimum level will lead to
@@ -336,33 +225,18 @@ Object.defineProperties(IonImageryProvider.prototype, {
336
225
  */
337
226
  minimumLevel: {
338
227
  get: function () {
339
- //>>includeStart('debug', pragmas.debug);
340
- if (!this._ready) {
341
- throw new DeveloperError(
342
- "minimumLevel must not be called before the imagery provider is ready."
343
- );
344
- }
345
- //>>includeEnd('debug');
346
228
  return this._imageryProvider.minimumLevel;
347
229
  },
348
230
  },
349
231
 
350
232
  /**
351
- * Gets the tiling scheme used by the provider. This function should
352
- * not be called before {@link IonImageryProvider#ready} returns true.
233
+ * Gets the tiling scheme used by the provider.
353
234
  * @memberof IonImageryProvider.prototype
354
235
  * @type {TilingScheme}
355
236
  * @readonly
356
237
  */
357
238
  tilingScheme: {
358
239
  get: function () {
359
- //>>includeStart('debug', pragmas.debug);
360
- if (!this._ready) {
361
- throw new DeveloperError(
362
- "tilingScheme must not be called before the imagery provider is ready."
363
- );
364
- }
365
- //>>includeEnd('debug');
366
240
  return this._imageryProvider.tilingScheme;
367
241
  },
368
242
  },
@@ -370,21 +244,13 @@ Object.defineProperties(IonImageryProvider.prototype, {
370
244
  /**
371
245
  * Gets the tile discard policy. If not undefined, the discard policy is responsible
372
246
  * for filtering out "missing" tiles via its shouldDiscardImage function. If this function
373
- * returns undefined, no tiles are filtered. This function should
374
- * not be called before {@link IonImageryProvider#ready} returns true.
247
+ * returns undefined, no tiles are filtered.
375
248
  * @memberof IonImageryProvider.prototype
376
249
  * @type {TileDiscardPolicy}
377
250
  * @readonly
378
251
  */
379
252
  tileDiscardPolicy: {
380
253
  get: function () {
381
- //>>includeStart('debug', pragmas.debug);
382
- if (!this._ready) {
383
- throw new DeveloperError(
384
- "tileDiscardPolicy must not be called before the imagery provider is ready."
385
- );
386
- }
387
- //>>includeEnd('debug');
388
254
  return this._imageryProvider.tileDiscardPolicy;
389
255
  },
390
256
  },
@@ -405,21 +271,13 @@ Object.defineProperties(IonImageryProvider.prototype, {
405
271
 
406
272
  /**
407
273
  * Gets the credit to display when this imagery provider is active. Typically this is used to credit
408
- * the source of the imagery. This function should
409
- * not be called before {@link IonImageryProvider#ready} returns true.
274
+ * the source of the imagery.
410
275
  * @memberof IonImageryProvider.prototype
411
276
  * @type {Credit}
412
277
  * @readonly
413
278
  */
414
279
  credit: {
415
280
  get: function () {
416
- //>>includeStart('debug', pragmas.debug);
417
- if (!this._ready) {
418
- throw new DeveloperError(
419
- "credit must not be called before the imagery provider is ready."
420
- );
421
- }
422
- //>>includeEnd('debug');
423
281
  return this._imageryProvider.credit;
424
282
  },
425
283
  },
@@ -436,13 +294,6 @@ Object.defineProperties(IonImageryProvider.prototype, {
436
294
  */
437
295
  hasAlphaChannel: {
438
296
  get: function () {
439
- //>>includeStart('debug', pragmas.debug);
440
- if (!this._ready) {
441
- throw new DeveloperError(
442
- "hasAlphaChannel must not be called before the imagery provider is ready."
443
- );
444
- }
445
- //>>includeEnd('debug');
446
297
  return this._imageryProvider.hasAlphaChannel;
447
298
  },
448
299
 
@@ -459,8 +310,394 @@ Object.defineProperties(IonImageryProvider.prototype, {
459
310
  },
460
311
  },
461
312
  },
313
+
314
+ /**
315
+ * The default alpha blending value of this provider, with 0.0 representing fully transparent and
316
+ * 1.0 representing fully opaque.
317
+ * @memberof IonImageryProvider.prototype
318
+ * @type {Number|undefined}
319
+ * @deprecated
320
+ */
321
+ defaultAlpha: {
322
+ get: function () {
323
+ deprecationWarning(
324
+ "IonImageryProvider.defaultAlpha",
325
+ "IonImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.alpha instead."
326
+ );
327
+ return this._defaultAlpha;
328
+ },
329
+ set: function (value) {
330
+ deprecationWarning(
331
+ "IonImageryProvider.defaultAlpha",
332
+ "IonImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.alpha instead."
333
+ );
334
+ this._defaultAlpha = value;
335
+ },
336
+ },
337
+
338
+ /**
339
+ * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and
340
+ * 1.0 representing fully opaque.
341
+ * @memberof IonImageryProvider.prototype
342
+ * @type {Number|undefined}
343
+ * @deprecated
344
+ */
345
+ defaultNightAlpha: {
346
+ get: function () {
347
+ deprecationWarning(
348
+ "IonImageryProvider.defaultNightAlpha",
349
+ "IonImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead."
350
+ );
351
+ return this.defaultNightAlpha;
352
+ },
353
+ set: function (value) {
354
+ deprecationWarning(
355
+ "IonImageryProvider.defaultNightAlpha",
356
+ "IonImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead."
357
+ );
358
+ this.defaultNightAlpha = value;
359
+ },
360
+ },
361
+
362
+ /**
363
+ * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and
364
+ * 1.0 representing fully opaque.
365
+ * @memberof IonImageryProvider.prototype
366
+ * @type {Number|undefined}
367
+ * @deprecated
368
+ */
369
+ defaultDayAlpha: {
370
+ get: function () {
371
+ deprecationWarning(
372
+ "IonImageryProvider.defaultDayAlpha",
373
+ "IonImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead."
374
+ );
375
+ return this._defaultDayAlpha;
376
+ },
377
+ set: function (value) {
378
+ deprecationWarning(
379
+ "IonImageryProvider.defaultDayAlpha",
380
+ "IonImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead."
381
+ );
382
+ this._defaultDayAlpha = value;
383
+ },
384
+ },
385
+
386
+ /**
387
+ * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0
388
+ * makes the imagery darker while greater than 1.0 makes it brighter.
389
+ * @memberof IonImageryProvider.prototype
390
+ * @type {Number|undefined}
391
+ * @deprecated
392
+ */
393
+ defaultBrightness: {
394
+ get: function () {
395
+ deprecationWarning(
396
+ "IonImageryProvider.defaultBrightness",
397
+ "IonImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.brightness instead."
398
+ );
399
+ return this._defaultBrightness;
400
+ },
401
+ set: function (value) {
402
+ deprecationWarning(
403
+ "IonImageryProvider.defaultBrightness",
404
+ "IonImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.brightness instead."
405
+ );
406
+ this._defaultBrightness = value;
407
+ },
408
+ },
409
+
410
+ /**
411
+ * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces
412
+ * the contrast while greater than 1.0 increases it.
413
+ * @memberof IonImageryProvider.prototype
414
+ * @type {Number|undefined}
415
+ * @deprecated
416
+ */
417
+ defaultContrast: {
418
+ get: function () {
419
+ deprecationWarning(
420
+ "IonImageryProvider.defaultContrast",
421
+ "IonImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.contrast instead."
422
+ );
423
+ return this._defaultContrast;
424
+ },
425
+ set: function (value) {
426
+ deprecationWarning(
427
+ "IonImageryProvider.defaultContrast",
428
+ "IonImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.contrast instead."
429
+ );
430
+ this._defaultContrast = value;
431
+ },
432
+ },
433
+
434
+ /**
435
+ * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.
436
+ * @memberof IonImageryProvider.prototype
437
+ * @type {Number|undefined}
438
+ * @deprecated
439
+ */
440
+ defaultHue: {
441
+ get: function () {
442
+ deprecationWarning(
443
+ "IonImageryProvider.defaultHue",
444
+ "IonImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.hue instead."
445
+ );
446
+ return this._defaultHue;
447
+ },
448
+ set: function (value) {
449
+ deprecationWarning(
450
+ "IonImageryProvider.defaultHue",
451
+ "IonImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.hue instead."
452
+ );
453
+ this._defaultHue = value;
454
+ },
455
+ },
456
+
457
+ /**
458
+ * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the
459
+ * saturation while greater than 1.0 increases it.
460
+ * @memberof IonImageryProvider.prototype
461
+ * @type {Number|undefined}
462
+ * @deprecated
463
+ */
464
+ defaultSaturation: {
465
+ get: function () {
466
+ deprecationWarning(
467
+ "IonImageryProvider.defaultSaturation",
468
+ "IonImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.saturation instead."
469
+ );
470
+ return this._defaultSaturation;
471
+ },
472
+ set: function (value) {
473
+ deprecationWarning(
474
+ "IonImageryProvider.defaultSaturation",
475
+ "IonImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.saturation instead."
476
+ );
477
+ this._defaultSaturation = value;
478
+ },
479
+ },
480
+
481
+ /**
482
+ * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.
483
+ * @memberof IonImageryProvider.prototype
484
+ * @type {Number|undefined}
485
+ * @deprecated
486
+ */
487
+ defaultGamma: {
488
+ get: function () {
489
+ deprecationWarning(
490
+ "IonImageryProvider.defaultGamma",
491
+ "IonImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.gamma instead."
492
+ );
493
+ return this._defaultGamma;
494
+ },
495
+ set: function (value) {
496
+ deprecationWarning(
497
+ "IonImageryProvider.defaultGamma",
498
+ "IonImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.gamma instead."
499
+ );
500
+ this._defaultGamma = value;
501
+ },
502
+ },
503
+
504
+ /**
505
+ * The default texture minification filter to apply to this provider.
506
+ * @memberof IonImageryProvider.prototype
507
+ * @type {TextureMinificationFilter}
508
+ * @deprecated
509
+ */
510
+ defaultMinificationFilter: {
511
+ get: function () {
512
+ deprecationWarning(
513
+ "IonImageryProvider.defaultMinificationFilter",
514
+ "IonImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead."
515
+ );
516
+ return this._defaultMinificationFilter;
517
+ },
518
+ set: function (value) {
519
+ deprecationWarning(
520
+ "IonImageryProvider.defaultMinificationFilter",
521
+ "IonImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead."
522
+ );
523
+ this._defaultMinificationFilter = value;
524
+ },
525
+ },
526
+
527
+ /**
528
+ * The default texture magnification filter to apply to this provider.
529
+ * @memberof IonImageryProvider.prototype
530
+ * @type {TextureMagnificationFilter}
531
+ * @deprecated
532
+ */
533
+ defaultMagnificationFilter: {
534
+ get: function () {
535
+ deprecationWarning(
536
+ "IonImageryProvider.defaultMagnificationFilter",
537
+ "IonImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead."
538
+ );
539
+ return this._defaultMagnificationFilter;
540
+ },
541
+ set: function (value) {
542
+ deprecationWarning(
543
+ "IonImageryProvider.defaultMagnificationFilter",
544
+ "IonImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead."
545
+ );
546
+ this._defaultMagnificationFilter = value;
547
+ },
548
+ },
462
549
  });
463
550
 
551
+ // This is here for backwards compatibility
552
+ IonImageryProvider._initialize = function (provider, assetId, options) {
553
+ const endpointResource = IonResource._createEndpointResource(
554
+ assetId,
555
+ options
556
+ );
557
+
558
+ // A simple cache to avoid making repeated requests to ion for endpoints we've
559
+ // already retrieved. This exists mainly to support Bing caching to reduce
560
+ // world imagery sessions, but provides a small boost of performance in general
561
+ // if constantly reloading assets
562
+ const cacheKey = assetId.toString() + options.accessToken + options.server;
563
+ let promise = IonImageryProvider._endpointCache[cacheKey];
564
+ if (!defined(promise)) {
565
+ promise = endpointResource.fetchJson();
566
+ IonImageryProvider._endpointCache[cacheKey] = promise;
567
+ }
568
+
569
+ provider._readyPromise = promise.then(function (endpoint) {
570
+ if (endpoint.type !== "IMAGERY") {
571
+ return Promise.reject(
572
+ new RuntimeError(`Cesium ion asset ${assetId} is not an imagery asset.`)
573
+ );
574
+ }
575
+
576
+ let imageryProvider;
577
+ const externalType = endpoint.externalType;
578
+ if (!defined(externalType)) {
579
+ imageryProvider = new TileMapServiceImageryProvider({
580
+ url: new IonResource(endpoint, endpointResource),
581
+ });
582
+ } else {
583
+ const factory = ImageryProviderMapping[externalType];
584
+
585
+ if (!defined(factory)) {
586
+ return Promise.reject(
587
+ new RuntimeError(
588
+ `Unrecognized Cesium ion imagery type: ${externalType}`
589
+ )
590
+ );
591
+ }
592
+ imageryProvider = factory(endpoint.options);
593
+ }
594
+
595
+ provider._tileCredits = IonResource.getCreditsFromEndpoint(
596
+ endpoint,
597
+ endpointResource
598
+ );
599
+
600
+ imageryProvider.errorEvent.addEventListener(function (tileProviderError) {
601
+ //Propagate the errorEvent but set the provider to this instance instead
602
+ //of the inner instance.
603
+ tileProviderError.provider = provider;
604
+ provider._errorEvent.raiseEvent(tileProviderError);
605
+ });
606
+
607
+ provider._imageryProvider = imageryProvider;
608
+ // readyPromise is deprecated. This is here for backwards compatibility
609
+ return Promise.resolve(imageryProvider._readyPromise).then(function () {
610
+ provider._ready = true;
611
+ return true;
612
+ });
613
+ });
614
+ };
615
+
616
+ /**
617
+ * Creates a provider for tiled imagery using the Cesium ion REST API.
618
+ *
619
+ * @param {Number} assetId An ion imagery asset ID.
620
+ * @param {IonImageryProvider.ConstructorOptions} options Object describing initialization options.
621
+ * @returns {Promise<IonImageryProvider>} A promise which resolves to the created IonImageryProvider.
622
+ *
623
+ * @example
624
+ * const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));
625
+ * viewer.imageryLayers.add(imageryLayer);
626
+ *
627
+ * @exception {RuntimeError} Cesium ion assetId is not an imagery asset
628
+ * @exception {RuntimeError} Unrecognized Cesium ion imagery type
629
+ */
630
+ IonImageryProvider.fromAssetId = async function (assetId, options) {
631
+ //>>includeStart('debug', pragmas.debug);
632
+ Check.typeOf.number("assetId", assetId);
633
+ //>>includeEnd('debug');
634
+
635
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
636
+ const endpointResource = IonResource._createEndpointResource(
637
+ assetId,
638
+ options
639
+ );
640
+
641
+ // A simple cache to avoid making repeated requests to ion for endpoints we've
642
+ // already retrieved. This exists mainly to support Bing caching to reduce
643
+ // world imagery sessions, but provides a small boost of performance in general
644
+ // if constantly reloading assets
645
+ const cacheKey = assetId.toString() + options.accessToken + options.server;
646
+ let promise = IonImageryProvider._endpointCache[cacheKey];
647
+ if (!defined(promise)) {
648
+ promise = endpointResource.fetchJson();
649
+ IonImageryProvider._endpointCache[cacheKey] = promise;
650
+ }
651
+
652
+ const endpoint = await promise;
653
+ if (endpoint.type !== "IMAGERY") {
654
+ throw new RuntimeError(
655
+ `Cesium ion asset ${assetId} is not an imagery asset.`
656
+ );
657
+ }
658
+
659
+ let imageryProvider;
660
+ const externalType = endpoint.externalType;
661
+ if (!defined(externalType)) {
662
+ imageryProvider = await TileMapServiceImageryProvider.fromUrl(
663
+ new IonResource(endpoint, endpointResource)
664
+ );
665
+ } else {
666
+ const factory = ImageryProviderAsyncMapping[externalType];
667
+
668
+ if (!defined(factory)) {
669
+ throw new RuntimeError(
670
+ `Unrecognized Cesium ion imagery type: ${externalType}`
671
+ );
672
+ }
673
+ // Make a copy before editing since this object reference is cached;
674
+ const options = { ...endpoint.options };
675
+ const url = options.url;
676
+ delete options.url;
677
+ imageryProvider = await factory(url, options);
678
+ }
679
+
680
+ const provider = new IonImageryProvider(options);
681
+
682
+ imageryProvider.errorEvent.addEventListener(function (tileProviderError) {
683
+ //Propagate the errorEvent but set the provider to this instance instead
684
+ //of the inner instance.
685
+ tileProviderError.provider = provider;
686
+ provider._errorEvent.raiseEvent(tileProviderError);
687
+ });
688
+
689
+ provider._tileCredits = IonResource.getCreditsFromEndpoint(
690
+ endpoint,
691
+ endpointResource
692
+ );
693
+
694
+ provider._imageryProvider = imageryProvider;
695
+ provider._ready = true;
696
+ provider._readyPromise = Promise.resolve(true);
697
+
698
+ return provider;
699
+ };
700
+
464
701
  /**
465
702
  * Gets the credits to be displayed when a given tile is displayed.
466
703
  * @function
@@ -469,18 +706,8 @@ Object.defineProperties(IonImageryProvider.prototype, {
469
706
  * @param {number} y The tile Y coordinate.
470
707
  * @param {number} level The tile level;
471
708
  * @returns {Credit[]} The credits to be displayed when the tile is displayed.
472
- *
473
- * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.
474
709
  */
475
710
  IonImageryProvider.prototype.getTileCredits = function (x, y, level) {
476
- //>>includeStart('debug', pragmas.debug);
477
- if (!this._ready) {
478
- throw new DeveloperError(
479
- "getTileCredits must not be called before the imagery provider is ready."
480
- );
481
- }
482
- //>>includeEnd('debug');
483
-
484
711
  const innerCredits = this._imageryProvider.getTileCredits(x, y, level);
485
712
  if (!defined(innerCredits)) {
486
713
  return this._tileCredits;
@@ -490,8 +717,7 @@ IonImageryProvider.prototype.getTileCredits = function (x, y, level) {
490
717
  };
491
718
 
492
719
  /**
493
- * Requests the image for a given tile. This function should
494
- * not be called before {@link IonImageryProvider#ready} returns true.
720
+ * Requests the image for a given tile.
495
721
  * @function
496
722
  *
497
723
  * @param {number} x The tile X coordinate.
@@ -500,24 +726,14 @@ IonImageryProvider.prototype.getTileCredits = function (x, y, level) {
500
726
  * @param {Request} [request] The request object. Intended for internal use only.
501
727
  * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or
502
728
  * undefined if there are too many active requests to the server, and the request should be retried later.
503
- *
504
- * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.
505
729
  */
506
730
  IonImageryProvider.prototype.requestImage = function (x, y, level, request) {
507
- //>>includeStart('debug', pragmas.debug);
508
- if (!this._ready) {
509
- throw new DeveloperError(
510
- "requestImage must not be called before the imagery provider is ready."
511
- );
512
- }
513
- //>>includeEnd('debug');
514
731
  return this._imageryProvider.requestImage(x, y, level, request);
515
732
  };
516
733
 
517
734
  /**
518
735
  * Asynchronously determines what features, if any, are located at a given longitude and latitude within
519
- * a tile. This function should not be called before {@link IonImageryProvider#ready} returns true.
520
- * This function is optional, so it may not exist on all ImageryProviders.
736
+ * a tile. This function is optional, so it may not exist on all ImageryProviders.
521
737
  *
522
738
  * @function
523
739
  *
@@ -530,8 +746,6 @@ IonImageryProvider.prototype.requestImage = function (x, y, level, request) {
530
746
  * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}
531
747
  * instances. The array may be empty if no features are found at the given location.
532
748
  * It may also be undefined if picking is not supported.
533
- *
534
- * @exception {DeveloperError} <code>pickFeatures</code> must not be called before the imagery provider is ready.
535
749
  */
536
750
  IonImageryProvider.prototype.pickFeatures = function (
537
751
  x,
@@ -540,13 +754,6 @@ IonImageryProvider.prototype.pickFeatures = function (
540
754
  longitude,
541
755
  latitude
542
756
  ) {
543
- //>>includeStart('debug', pragmas.debug);
544
- if (!this._ready) {
545
- throw new DeveloperError(
546
- "pickFeatures must not be called before the imagery provider is ready."
547
- );
548
- }
549
- //>>includeEnd('debug');
550
757
  return this._imageryProvider.pickFeatures(x, y, level, longitude, latitude);
551
758
  };
552
759