@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,10 +1,11 @@
1
1
  import Cartesian2 from "../Core/Cartesian2.js";
2
2
  import Cartesian3 from "../Core/Cartesian3.js";
3
3
  import Cartographic from "../Core/Cartographic.js";
4
+ import Check from "../Core/Check.js";
4
5
  import Credit from "../Core/Credit.js";
5
6
  import defaultValue from "../Core/defaultValue.js";
6
7
  import defined from "../Core/defined.js";
7
- import DeveloperError from "../Core/DeveloperError.js";
8
+ import deprecationWarning from "../Core/deprecationWarning.js";
8
9
  import Event from "../Core/Event.js";
9
10
  import GeographicProjection from "../Core/GeographicProjection.js";
10
11
  import GeographicTilingScheme from "../Core/GeographicTilingScheme.js";
@@ -24,8 +25,8 @@ import ImageryProvider from "./ImageryProvider.js";
24
25
  *
25
26
  * Initialization options for the ArcGisMapServerImageryProvider constructor
26
27
  *
27
- * @property {Resource|string} url The URL of the ArcGIS MapServer service.
28
- * @property {string} [token] The ArcGIS token used to authenticate with the ArcGIS MapServer service.
28
+ * @property {Resource|string} [url] The URL of the ArcGIS MapServer service. Deprecated.
29
+ * @property {string} [token] The ArcGIS token used to authenticate with the ArcGIS MapServer service. Deprecated.
29
30
  * @property {TileDiscardPolicy} [tileDiscardPolicy] The policy that determines if a tile
30
31
  * is invalid and should be discarded. If this value is not specified, a default
31
32
  * {@link DiscardMissingTileImagePolicy} is used for tiled map servers, and a
@@ -61,14 +62,220 @@ import ImageryProvider from "./ImageryProvider.js";
61
62
  */
62
63
 
63
64
  /**
65
+ * Used to track creation details while fetching initial metadata
66
+ *
67
+ * @constructor
68
+ * @private
69
+ *
70
+ * @param {ArcGisMapServerImageryProvider.ConstructorOptions} options An object describing initialization options
71
+ */
72
+ function ImageryProviderBuilder(options) {
73
+ this.useTiles = defaultValue(options.usePreCachedTilesIfAvailable, true);
74
+
75
+ const ellipsoid = options.ellipsoid;
76
+ this.tilingScheme = defaultValue(
77
+ options.tilingScheme,
78
+ new GeographicTilingScheme({ ellipsoid: ellipsoid })
79
+ );
80
+ this.rectangle = defaultValue(options.rectangle, this.tilingScheme.rectangle);
81
+ this.ellipsoid = ellipsoid;
82
+
83
+ let credit = options.credit;
84
+ if (typeof credit === "string") {
85
+ credit = new Credit(credit);
86
+ }
87
+ this.credit = credit;
88
+ this.tileDiscardPolicy = options.tileDiscardPolicy;
89
+
90
+ this.tileWidth = defaultValue(options.tileWidth, 256);
91
+ this.tileHeight = defaultValue(options.tileHeight, 256);
92
+ this.maximumLevel = options.maximumLevel;
93
+ }
94
+
95
+ /**
96
+ * Complete ArcGisMapServerImageryProvider creation based on builder values.
97
+ *
98
+ * @private
99
+ *
100
+ * @param {ArcGisMapServerImageryProvider} provider
101
+ */
102
+ ImageryProviderBuilder.prototype.build = function (provider) {
103
+ provider._useTiles = this.useTiles;
104
+ provider._tilingScheme = this.tilingScheme;
105
+ provider._rectangle = this.rectangle;
106
+ provider._credit = this.credit;
107
+ provider._tileDiscardPolicy = this.tileDiscardPolicy;
108
+ provider._tileWidth = this.tileWidth;
109
+ provider._tileHeight = this.tileHeight;
110
+ provider._maximumLevel = this.maximumLevel;
111
+
112
+ // Install the default tile discard policy if none has been supplied.
113
+ if (this.useTiles && !defined(this.tileDiscardPolicy)) {
114
+ provider._tileDiscardPolicy = new DiscardMissingTileImagePolicy({
115
+ missingImageUrl: buildImageResource(provider, 0, 0, this.maximumLevel)
116
+ .url,
117
+ pixelsToCheck: [
118
+ new Cartesian2(0, 0),
119
+ new Cartesian2(200, 20),
120
+ new Cartesian2(20, 200),
121
+ new Cartesian2(80, 110),
122
+ new Cartesian2(160, 130),
123
+ ],
124
+ disableCheckIfAllPixelsAreTransparent: true,
125
+ });
126
+ }
127
+
128
+ provider._ready = true;
129
+ };
130
+
131
+ function metadataSuccess(data, imageryProviderBuilder) {
132
+ const tileInfo = data.tileInfo;
133
+ if (!defined(tileInfo)) {
134
+ imageryProviderBuilder.useTiles = false;
135
+ } else {
136
+ imageryProviderBuilder.tileWidth = tileInfo.rows;
137
+ imageryProviderBuilder.tileHeight = tileInfo.cols;
138
+
139
+ if (
140
+ tileInfo.spatialReference.wkid === 102100 ||
141
+ tileInfo.spatialReference.wkid === 102113
142
+ ) {
143
+ imageryProviderBuilder.tilingScheme = new WebMercatorTilingScheme({
144
+ ellipsoid: imageryProviderBuilder.ellipsoid,
145
+ });
146
+ } else if (data.tileInfo.spatialReference.wkid === 4326) {
147
+ imageryProviderBuilder.tilingScheme = new GeographicTilingScheme({
148
+ ellipsoid: imageryProviderBuilder.ellipsoid,
149
+ });
150
+ } else {
151
+ const message = `Tile spatial reference WKID ${data.tileInfo.spatialReference.wkid} is not supported.`;
152
+ throw new RuntimeError(message);
153
+ }
154
+ imageryProviderBuilder.maximumLevel = data.tileInfo.lods.length - 1;
155
+
156
+ if (defined(data.fullExtent)) {
157
+ if (
158
+ defined(data.fullExtent.spatialReference) &&
159
+ defined(data.fullExtent.spatialReference.wkid)
160
+ ) {
161
+ if (
162
+ data.fullExtent.spatialReference.wkid === 102100 ||
163
+ data.fullExtent.spatialReference.wkid === 102113
164
+ ) {
165
+ const projection = new WebMercatorProjection();
166
+ const extent = data.fullExtent;
167
+ const sw = projection.unproject(
168
+ new Cartesian3(
169
+ Math.max(
170
+ extent.xmin,
171
+ -imageryProviderBuilder.tilingScheme.ellipsoid.maximumRadius *
172
+ Math.PI
173
+ ),
174
+ Math.max(
175
+ extent.ymin,
176
+ -imageryProviderBuilder.tilingScheme.ellipsoid.maximumRadius *
177
+ Math.PI
178
+ ),
179
+ 0.0
180
+ )
181
+ );
182
+ const ne = projection.unproject(
183
+ new Cartesian3(
184
+ Math.min(
185
+ extent.xmax,
186
+ imageryProviderBuilder.tilingScheme.ellipsoid.maximumRadius *
187
+ Math.PI
188
+ ),
189
+ Math.min(
190
+ extent.ymax,
191
+ imageryProviderBuilder.tilingScheme.ellipsoid.maximumRadius *
192
+ Math.PI
193
+ ),
194
+ 0.0
195
+ )
196
+ );
197
+ imageryProviderBuilder.rectangle = new Rectangle(
198
+ sw.longitude,
199
+ sw.latitude,
200
+ ne.longitude,
201
+ ne.latitude
202
+ );
203
+ } else if (data.fullExtent.spatialReference.wkid === 4326) {
204
+ imageryProviderBuilder.rectangle = Rectangle.fromDegrees(
205
+ data.fullExtent.xmin,
206
+ data.fullExtent.ymin,
207
+ data.fullExtent.xmax,
208
+ data.fullExtent.ymax
209
+ );
210
+ } else {
211
+ const extentMessage = `fullExtent.spatialReference WKID ${data.fullExtent.spatialReference.wkid} is not supported.`;
212
+ throw new RuntimeError(extentMessage);
213
+ }
214
+ }
215
+ } else {
216
+ imageryProviderBuilder.rectangle =
217
+ imageryProviderBuilder.tilingScheme.rectangle;
218
+ }
219
+
220
+ imageryProviderBuilder.useTiles = true;
221
+ }
222
+
223
+ if (defined(data.copyrightText) && data.copyrightText.length > 0) {
224
+ imageryProviderBuilder.credit = new Credit(data.copyrightText);
225
+ }
226
+ }
227
+
228
+ function metadataFailure(resource, error, provider) {
229
+ let message = `An error occurred while accessing ${resource.url}`;
230
+ if (defined(error) && defined(error.message)) {
231
+ message += `: ${error.message}`;
232
+ }
233
+
234
+ // When readyPromise is deprecated, TileProviderError.reportError,
235
+ // and related parameters can be removed
236
+ TileProviderError.reportError(
237
+ undefined,
238
+ provider,
239
+ defined(provider) ? provider._errorEvent : undefined,
240
+ message,
241
+ undefined,
242
+ undefined,
243
+ undefined,
244
+ error
245
+ );
246
+
247
+ throw new RuntimeError(message);
248
+ }
249
+
250
+ async function requestMetadata(resource, imageryProviderBuilder, provider) {
251
+ const jsonResource = resource.getDerivedResource({
252
+ queryParameters: {
253
+ f: "json",
254
+ },
255
+ });
256
+
257
+ try {
258
+ const data = await jsonResource.fetchJsonp();
259
+ metadataSuccess(data, imageryProviderBuilder);
260
+ } catch (error) {
261
+ metadataFailure(resource, error, provider);
262
+ }
263
+ }
264
+
265
+ /**
266
+ * <div class="notice">
267
+ * To construct a ArcGisMapServerImageryProvider call {@link ArcGisMapServerImageryProvider.fromUrl}. Do not call the constructor directly.
268
+ * </div>
269
+ *
64
270
  * Provides tiled imagery hosted by an ArcGIS MapServer. By default, the server's pre-cached tiles are
65
271
  * used, if available.
66
272
  *
67
273
  * @alias ArcGisMapServerImageryProvider
68
274
  * @constructor
69
275
  *
70
- * @param {ArcGisMapServerImageryProvider.ConstructorOptions} options Object describing initialization options
276
+ * @param {ArcGisMapServerImageryProvider.ConstructorOptions} [options] Object describing initialization options
71
277
  *
278
+ * @see ArcGisMapServerImagery.fromUrl
72
279
  * @see BingMapsImageryProvider
73
280
  * @see GoogleEarthEnterpriseMapsProvider
74
281
  * @see OpenStreetMapImageryProvider
@@ -78,11 +285,10 @@ import ImageryProvider from "./ImageryProvider.js";
78
285
  * @see WebMapTileServiceImageryProvider
79
286
  * @see UrlTemplateImageryProvider
80
287
  *
81
- *
82
288
  * @example
83
- * const esri = new Cesium.ArcGisMapServerImageryProvider({
84
- * url : 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
85
- * });
289
+ * const esri = await Cesium.ArcGisMapServerImageryProvider.fromUrl(
290
+ * "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
291
+ * );
86
292
  *
87
293
  * @see {@link https://developers.arcgis.com/rest/|ArcGIS Server REST API}
88
294
  * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}
@@ -90,110 +296,18 @@ import ImageryProvider from "./ImageryProvider.js";
90
296
  function ArcGisMapServerImageryProvider(options) {
91
297
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
92
298
 
93
- //>>includeStart('debug', pragmas.debug);
94
- if (!defined(options.url)) {
95
- throw new DeveloperError("options.url is required.");
96
- }
97
- //>>includeEnd('debug');
98
-
99
- /**
100
- * The default alpha blending value of this provider, with 0.0 representing fully transparent and
101
- * 1.0 representing fully opaque.
102
- *
103
- * @type {number|undefined}
104
- * @default undefined
105
- */
106
- this.defaultAlpha = undefined;
299
+ this._defaultAlpha = undefined;
300
+ this._defaultNightAlpha = undefined;
301
+ this._defaultDayAlpha = undefined;
302
+ this._defaultBrightness = undefined;
303
+ this._defaultContrast = undefined;
304
+ this._defaultHue = undefined;
305
+ this._defaultSaturation = undefined;
306
+ this._defaultGamma = undefined;
307
+ this._defaultMinificationFilter = undefined;
308
+ this._defaultMagnificationFilter = undefined;
107
309
 
108
- /**
109
- * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and
110
- * 1.0 representing fully opaque.
111
- *
112
- * @type {number|undefined}
113
- * @default undefined
114
- */
115
- this.defaultNightAlpha = undefined;
116
-
117
- /**
118
- * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and
119
- * 1.0 representing fully opaque.
120
- *
121
- * @type {number|undefined}
122
- * @default undefined
123
- */
124
- this.defaultDayAlpha = undefined;
125
-
126
- /**
127
- * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0
128
- * makes the imagery darker while greater than 1.0 makes it brighter.
129
- *
130
- * @type {number|undefined}
131
- * @default undefined
132
- */
133
- this.defaultBrightness = undefined;
134
-
135
- /**
136
- * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces
137
- * the contrast while greater than 1.0 increases it.
138
- *
139
- * @type {number|undefined}
140
- * @default undefined
141
- */
142
- this.defaultContrast = undefined;
143
-
144
- /**
145
- * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.
146
- *
147
- * @type {number|undefined}
148
- * @default undefined
149
- */
150
- this.defaultHue = undefined;
151
-
152
- /**
153
- * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the
154
- * saturation while greater than 1.0 increases it.
155
- *
156
- * @type {number|undefined}
157
- * @default undefined
158
- */
159
- this.defaultSaturation = undefined;
160
-
161
- /**
162
- * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.
163
- *
164
- * @type {number|undefined}
165
- * @default undefined
166
- */
167
- this.defaultGamma = undefined;
168
-
169
- /**
170
- * The default texture minification filter to apply to this provider.
171
- *
172
- * @type {TextureMinificationFilter}
173
- * @default undefined
174
- */
175
- this.defaultMinificationFilter = undefined;
176
-
177
- /**
178
- * The default texture magnification filter to apply to this provider.
179
- *
180
- * @type {TextureMagnificationFilter}
181
- * @default undefined
182
- */
183
- this.defaultMagnificationFilter = undefined;
184
-
185
- const resource = Resource.createIfNeeded(options.url);
186
- resource.appendForwardSlash();
187
-
188
- if (defined(options.token)) {
189
- resource.setQueryParameters({
190
- token: options.token,
191
- });
192
- }
193
-
194
- this._resource = resource;
195
310
  this._tileDiscardPolicy = options.tileDiscardPolicy;
196
-
197
311
  this._tileWidth = defaultValue(options.tileWidth, 256);
198
312
  this._tileHeight = defaultValue(options.tileHeight, 256);
199
313
  this._maximumLevel = options.maximumLevel;
@@ -207,12 +321,7 @@ function ArcGisMapServerImageryProvider(options) {
207
321
  this._tilingScheme.rectangle
208
322
  );
209
323
  this._layers = options.layers;
210
-
211
- let credit = options.credit;
212
- if (typeof credit === "string") {
213
- credit = new Credit(credit);
214
- }
215
- this._credit = credit;
324
+ this._credit = undefined;
216
325
 
217
326
  /**
218
327
  * Gets or sets a value indicating whether feature picking is enabled. If true, {@link ArcGisMapServerImageryProvider#pickFeatures} will
@@ -228,173 +337,37 @@ function ArcGisMapServerImageryProvider(options) {
228
337
 
229
338
  this._ready = false;
230
339
 
231
- // Grab the details of this MapServer.
232
- const that = this;
233
- let metadataError;
234
-
235
- function metadataSuccess(data) {
236
- const tileInfo = data.tileInfo;
237
- if (!defined(tileInfo)) {
238
- that._useTiles = false;
239
- } else {
240
- that._tileWidth = tileInfo.rows;
241
- that._tileHeight = tileInfo.cols;
242
-
243
- if (
244
- tileInfo.spatialReference.wkid === 102100 ||
245
- tileInfo.spatialReference.wkid === 102113
246
- ) {
247
- that._tilingScheme = new WebMercatorTilingScheme({
248
- ellipsoid: options.ellipsoid,
249
- });
250
- } else if (data.tileInfo.spatialReference.wkid === 4326) {
251
- that._tilingScheme = new GeographicTilingScheme({
252
- ellipsoid: options.ellipsoid,
253
- });
254
- } else {
255
- const message = `Tile spatial reference WKID ${data.tileInfo.spatialReference.wkid} is not supported.`;
256
- metadataError = TileProviderError.reportError(
257
- metadataError,
258
- that,
259
- that._errorEvent,
260
- message,
261
- undefined,
262
- undefined,
263
- undefined
264
- );
265
- if (metadataError.retry) {
266
- return requestMetadata();
267
- }
268
- return Promise.reject(new RuntimeError(message));
269
- }
270
- that._maximumLevel = data.tileInfo.lods.length - 1;
271
-
272
- if (defined(data.fullExtent)) {
273
- if (
274
- defined(data.fullExtent.spatialReference) &&
275
- defined(data.fullExtent.spatialReference.wkid)
276
- ) {
277
- if (
278
- data.fullExtent.spatialReference.wkid === 102100 ||
279
- data.fullExtent.spatialReference.wkid === 102113
280
- ) {
281
- const projection = new WebMercatorProjection();
282
- const extent = data.fullExtent;
283
- const sw = projection.unproject(
284
- new Cartesian3(
285
- Math.max(
286
- extent.xmin,
287
- -that._tilingScheme.ellipsoid.maximumRadius * Math.PI
288
- ),
289
- Math.max(
290
- extent.ymin,
291
- -that._tilingScheme.ellipsoid.maximumRadius * Math.PI
292
- ),
293
- 0.0
294
- )
295
- );
296
- const ne = projection.unproject(
297
- new Cartesian3(
298
- Math.min(
299
- extent.xmax,
300
- that._tilingScheme.ellipsoid.maximumRadius * Math.PI
301
- ),
302
- Math.min(
303
- extent.ymax,
304
- that._tilingScheme.ellipsoid.maximumRadius * Math.PI
305
- ),
306
- 0.0
307
- )
308
- );
309
- that._rectangle = new Rectangle(
310
- sw.longitude,
311
- sw.latitude,
312
- ne.longitude,
313
- ne.latitude
314
- );
315
- } else if (data.fullExtent.spatialReference.wkid === 4326) {
316
- that._rectangle = Rectangle.fromDegrees(
317
- data.fullExtent.xmin,
318
- data.fullExtent.ymin,
319
- data.fullExtent.xmax,
320
- data.fullExtent.ymax
321
- );
322
- } else {
323
- const extentMessage = `fullExtent.spatialReference WKID ${data.fullExtent.spatialReference.wkid} is not supported.`;
324
- metadataError = TileProviderError.reportError(
325
- metadataError,
326
- that,
327
- that._errorEvent,
328
- extentMessage,
329
- undefined,
330
- undefined,
331
- undefined
332
- );
333
- if (metadataError.retry) {
334
- return requestMetadata();
335
- }
336
- return Promise.reject(new RuntimeError(extentMessage));
337
- }
338
- }
339
- } else {
340
- that._rectangle = that._tilingScheme.rectangle;
341
- }
340
+ if (defined(options.url)) {
341
+ deprecationWarning(
342
+ "ArcGisMapServerImageryProvider options.url",
343
+ "options.url was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ArcGisMapServerImageryProvider.fromUrl instead."
344
+ );
345
+ const resource = Resource.createIfNeeded(options.url);
346
+ resource.appendForwardSlash();
342
347
 
343
- // Install the default tile discard policy if none has been supplied.
344
- if (!defined(that._tileDiscardPolicy)) {
345
- that._tileDiscardPolicy = new DiscardMissingTileImagePolicy({
346
- missingImageUrl: buildImageResource(that, 0, 0, that._maximumLevel)
347
- .url,
348
- pixelsToCheck: [
349
- new Cartesian2(0, 0),
350
- new Cartesian2(200, 20),
351
- new Cartesian2(20, 200),
352
- new Cartesian2(80, 110),
353
- new Cartesian2(160, 130),
354
- ],
355
- disableCheckIfAllPixelsAreTransparent: true,
356
- });
357
- }
348
+ this._tileDiscardPolicy = options.tileDiscardPolicy;
358
349
 
359
- that._useTiles = true;
350
+ if (defined(options.token)) {
351
+ resource.setQueryParameters({
352
+ token: options.token,
353
+ });
360
354
  }
361
355
 
362
- if (defined(data.copyrightText) && data.copyrightText.length > 0) {
363
- that._credit = new Credit(data.copyrightText);
356
+ this._resource = resource;
357
+ const imageryProviderBuilder = new ImageryProviderBuilder(options);
358
+ if (imageryProviderBuilder.useTiles) {
359
+ this._readyPromise = requestMetadata(
360
+ resource,
361
+ imageryProviderBuilder,
362
+ this
363
+ ).then(() => {
364
+ imageryProviderBuilder.build(this);
365
+ return true;
366
+ });
367
+ } else {
368
+ imageryProviderBuilder.build(this);
369
+ this._readyPromise = Promise.resolve(true);
364
370
  }
365
-
366
- that._ready = true;
367
- TileProviderError.reportSuccess(metadataError);
368
- return Promise.resolve(true);
369
- }
370
-
371
- function metadataFailure(e) {
372
- const message = `An error occurred while accessing ${that._resource.url}.`;
373
- metadataError = TileProviderError.reportError(
374
- metadataError,
375
- that,
376
- that._errorEvent,
377
- message,
378
- undefined,
379
- undefined,
380
- undefined
381
- );
382
- return Promise.reject(new RuntimeError(message));
383
- }
384
- function requestMetadata() {
385
- const resource = that._resource.getDerivedResource({
386
- queryParameters: {
387
- f: "json",
388
- },
389
- });
390
- return resource.fetchJsonp().then(metadataSuccess).catch(metadataFailure);
391
- }
392
-
393
- if (this._useTiles) {
394
- this._readyPromise = requestMetadata();
395
- } else {
396
- this._ready = true;
397
- this._readyPromise = Promise.resolve(true);
398
371
  }
399
372
  }
400
373
 
@@ -482,127 +455,73 @@ Object.defineProperties(ArcGisMapServerImageryProvider.prototype, {
482
455
  },
483
456
 
484
457
  /**
485
- * Gets the width of each tile, in pixels. This function should
486
- * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.
458
+ * Gets the width of each tile, in pixels.
487
459
  * @memberof ArcGisMapServerImageryProvider.prototype
488
460
  * @type {number}
489
461
  * @readonly
490
462
  */
491
463
  tileWidth: {
492
464
  get: function () {
493
- //>>includeStart('debug', pragmas.debug);
494
- if (!this._ready) {
495
- throw new DeveloperError(
496
- "tileWidth must not be called before the imagery provider is ready."
497
- );
498
- }
499
- //>>includeEnd('debug');
500
-
501
465
  return this._tileWidth;
502
466
  },
503
467
  },
504
468
 
505
469
  /**
506
- * Gets the height of each tile, in pixels. This function should
507
- * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.
470
+ * Gets the height of each tile, in pixels.
508
471
  * @memberof ArcGisMapServerImageryProvider.prototype
509
472
  * @type {number}
510
473
  * @readonly
511
474
  */
512
475
  tileHeight: {
513
476
  get: function () {
514
- //>>includeStart('debug', pragmas.debug);
515
- if (!this._ready) {
516
- throw new DeveloperError(
517
- "tileHeight must not be called before the imagery provider is ready."
518
- );
519
- }
520
- //>>includeEnd('debug');
521
-
522
477
  return this._tileHeight;
523
478
  },
524
479
  },
525
480
 
526
481
  /**
527
- * Gets the maximum level-of-detail that can be requested. This function should
528
- * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.
482
+ * Gets the maximum level-of-detail that can be requested.
529
483
  * @memberof ArcGisMapServerImageryProvider.prototype
530
484
  * @type {number|undefined}
531
485
  * @readonly
532
486
  */
533
487
  maximumLevel: {
534
488
  get: function () {
535
- //>>includeStart('debug', pragmas.debug);
536
- if (!this._ready) {
537
- throw new DeveloperError(
538
- "maximumLevel must not be called before the imagery provider is ready."
539
- );
540
- }
541
- //>>includeEnd('debug');
542
-
543
489
  return this._maximumLevel;
544
490
  },
545
491
  },
546
492
 
547
493
  /**
548
- * Gets the minimum level-of-detail that can be requested. This function should
549
- * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.
494
+ * Gets the minimum level-of-detail that can be requested.
550
495
  * @memberof ArcGisMapServerImageryProvider.prototype
551
496
  * @type {number}
552
497
  * @readonly
553
498
  */
554
499
  minimumLevel: {
555
500
  get: function () {
556
- //>>includeStart('debug', pragmas.debug);
557
- if (!this._ready) {
558
- throw new DeveloperError(
559
- "minimumLevel must not be called before the imagery provider is ready."
560
- );
561
- }
562
- //>>includeEnd('debug');
563
-
564
501
  return 0;
565
502
  },
566
503
  },
567
504
 
568
505
  /**
569
- * Gets the tiling scheme used by this provider. This function should
570
- * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.
506
+ * Gets the tiling scheme used by this provider.
571
507
  * @memberof ArcGisMapServerImageryProvider.prototype
572
508
  * @type {TilingScheme}
573
509
  * @readonly
574
510
  */
575
511
  tilingScheme: {
576
512
  get: function () {
577
- //>>includeStart('debug', pragmas.debug);
578
- if (!this._ready) {
579
- throw new DeveloperError(
580
- "tilingScheme must not be called before the imagery provider is ready."
581
- );
582
- }
583
- //>>includeEnd('debug');
584
-
585
513
  return this._tilingScheme;
586
514
  },
587
515
  },
588
516
 
589
517
  /**
590
- * Gets the rectangle, in radians, of the imagery provided by this instance. This function should
591
- * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.
518
+ * Gets the rectangle, in radians, of the imagery provided by this instance.
592
519
  * @memberof ArcGisMapServerImageryProvider.prototype
593
520
  * @type {Rectangle}
594
521
  * @readonly
595
522
  */
596
523
  rectangle: {
597
524
  get: function () {
598
- //>>includeStart('debug', pragmas.debug);
599
- if (!this._ready) {
600
- throw new DeveloperError(
601
- "rectangle must not be called before the imagery provider is ready."
602
- );
603
- }
604
- //>>includeEnd('debug');
605
-
606
525
  return this._rectangle;
607
526
  },
608
527
  },
@@ -610,22 +529,13 @@ Object.defineProperties(ArcGisMapServerImageryProvider.prototype, {
610
529
  /**
611
530
  * Gets the tile discard policy. If not undefined, the discard policy is responsible
612
531
  * for filtering out "missing" tiles via its shouldDiscardImage function. If this function
613
- * returns undefined, no tiles are filtered. This function should
614
- * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.
532
+ * returns undefined, no tiles are filtered.
615
533
  * @memberof ArcGisMapServerImageryProvider.prototype
616
534
  * @type {TileDiscardPolicy}
617
535
  * @readonly
618
536
  */
619
537
  tileDiscardPolicy: {
620
538
  get: function () {
621
- //>>includeStart('debug', pragmas.debug);
622
- if (!this._ready) {
623
- throw new DeveloperError(
624
- "tileDiscardPolicy must not be called before the imagery provider is ready."
625
- );
626
- }
627
- //>>includeEnd('debug');
628
-
629
539
  return this._tileDiscardPolicy;
630
540
  },
631
541
  },
@@ -649,9 +559,14 @@ Object.defineProperties(ArcGisMapServerImageryProvider.prototype, {
649
559
  * @memberof ArcGisMapServerImageryProvider.prototype
650
560
  * @type {boolean}
651
561
  * @readonly
562
+ * @deprecated
652
563
  */
653
564
  ready: {
654
565
  get: function () {
566
+ deprecationWarning(
567
+ "ArcGisMapServerImageryProvider.ready",
568
+ "ArcGisMapServerImageryProvider.ready was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ArcGisMapServerImageryProvider.fromUrl instead."
569
+ );
655
570
  return this._ready;
656
571
  },
657
572
  },
@@ -661,9 +576,14 @@ Object.defineProperties(ArcGisMapServerImageryProvider.prototype, {
661
576
  * @memberof ArcGisMapServerImageryProvider.prototype
662
577
  * @type {Promise<boolean>}
663
578
  * @readonly
579
+ * @deprecated
664
580
  */
665
581
  readyPromise: {
666
582
  get: function () {
583
+ deprecationWarning(
584
+ "ArcGisMapServerImageryProvider.readyPromise",
585
+ "ArcGisMapServerImageryProvider.readyPromise was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ArcGisMapServerImageryProvider.fromUrl instead."
586
+ );
667
587
  return this._readyPromise;
668
588
  },
669
589
  },
@@ -683,9 +603,7 @@ Object.defineProperties(ArcGisMapServerImageryProvider.prototype, {
683
603
 
684
604
  /**
685
605
  * Gets a value indicating whether this imagery provider is using pre-cached tiles from the
686
- * ArcGIS MapServer. If the imagery provider is not yet ready ({@link ArcGisMapServerImageryProvider#ready}), this function
687
- * will return the value of `options.usePreCachedTilesIfAvailable`, even if the MapServer does
688
- * not have pre-cached tiles.
606
+ * ArcGIS MapServer.
689
607
  * @memberof ArcGisMapServerImageryProvider.prototype
690
608
  *
691
609
  * @type {boolean}
@@ -727,8 +645,289 @@ Object.defineProperties(ArcGisMapServerImageryProvider.prototype, {
727
645
  return this._layers;
728
646
  },
729
647
  },
648
+
649
+ /**
650
+ * The default alpha blending value of this provider, with 0.0 representing fully transparent and
651
+ * 1.0 representing fully opaque.
652
+ * @memberof ArcGisMapServerImageryProvider.prototype
653
+ * @type {Number|undefined}
654
+ * @deprecated
655
+ */
656
+ defaultAlpha: {
657
+ get: function () {
658
+ deprecationWarning(
659
+ "ArcGisMapServerImageryProvider.defaultAlpha",
660
+ "ArcGisMapServerImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.alpha instead."
661
+ );
662
+ return this._defaultAlpha;
663
+ },
664
+ set: function (value) {
665
+ deprecationWarning(
666
+ "ArcGisMapServerImageryProvider.defaultAlpha",
667
+ "ArcGisMapServerImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.alpha instead."
668
+ );
669
+ this._defaultAlpha = value;
670
+ },
671
+ },
672
+
673
+ /**
674
+ * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and
675
+ * 1.0 representing fully opaque.
676
+ * @memberof ArcGisMapServerImageryProvider.prototype
677
+ * @type {Number|undefined}
678
+ * @deprecated
679
+ */
680
+ defaultNightAlpha: {
681
+ get: function () {
682
+ deprecationWarning(
683
+ "ArcGisMapServerImageryProvider.defaultNightAlpha",
684
+ "ArcGisMapServerImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead."
685
+ );
686
+ return this._defaultNightAlpha;
687
+ },
688
+ set: function (value) {
689
+ deprecationWarning(
690
+ "ArcGisMapServerImageryProvider.defaultNightAlpha",
691
+ "ArcGisMapServerImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead."
692
+ );
693
+ this._defaultNightAlpha = value;
694
+ },
695
+ },
696
+
697
+ /**
698
+ * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and
699
+ * 1.0 representing fully opaque.
700
+ * @memberof ArcGisMapServerImageryProvider.prototype
701
+ * @type {Number|undefined}
702
+ * @deprecated
703
+ */
704
+ defaultDayAlpha: {
705
+ get: function () {
706
+ deprecationWarning(
707
+ "ArcGisMapServerImageryProvider.defaultDayAlpha",
708
+ "ArcGisMapServerImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead."
709
+ );
710
+ return this._defaultDayAlpha;
711
+ },
712
+ set: function (value) {
713
+ deprecationWarning(
714
+ "ArcGisMapServerImageryProvider.defaultDayAlpha",
715
+ "ArcGisMapServerImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead."
716
+ );
717
+ this._defaultDayAlpha = value;
718
+ },
719
+ },
720
+
721
+ /**
722
+ * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0
723
+ * makes the imagery darker while greater than 1.0 makes it brighter.
724
+ * @memberof ArcGisMapServerImageryProvider.prototype
725
+ * @type {Number|undefined}
726
+ * @deprecated
727
+ */
728
+ defaultBrightness: {
729
+ get: function () {
730
+ deprecationWarning(
731
+ "ArcGisMapServerImageryProvider.defaultBrightness",
732
+ "ArcGisMapServerImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.brightness instead."
733
+ );
734
+ return this._defaultBrightness;
735
+ },
736
+ set: function (value) {
737
+ deprecationWarning(
738
+ "ArcGisMapServerImageryProvider.defaultBrightness",
739
+ "ArcGisMapServerImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.brightness instead."
740
+ );
741
+ this._defaultBrightness = value;
742
+ },
743
+ },
744
+
745
+ /**
746
+ * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces
747
+ * the contrast while greater than 1.0 increases it.
748
+ * @memberof ArcGisMapServerImageryProvider.prototype
749
+ * @type {Number|undefined}
750
+ * @deprecated
751
+ */
752
+ defaultContrast: {
753
+ get: function () {
754
+ deprecationWarning(
755
+ "ArcGisMapServerImageryProvider.defaultContrast",
756
+ "ArcGisMapServerImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.contrast instead."
757
+ );
758
+ return this._defaultContrast;
759
+ },
760
+ set: function (value) {
761
+ deprecationWarning(
762
+ "ArcGisMapServerImageryProvider.defaultContrast",
763
+ "ArcGisMapServerImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.contrast instead."
764
+ );
765
+ this._defaultContrast = value;
766
+ },
767
+ },
768
+
769
+ /**
770
+ * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.
771
+ * @memberof ArcGisMapServerImageryProvider.prototype
772
+ * @type {Number|undefined}
773
+ * @deprecated
774
+ */
775
+ defaultHue: {
776
+ get: function () {
777
+ deprecationWarning(
778
+ "ArcGisMapServerImageryProvider.defaultHue",
779
+ "ArcGisMapServerImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.hue instead."
780
+ );
781
+ return this._defaultHue;
782
+ },
783
+ set: function (value) {
784
+ deprecationWarning(
785
+ "ArcGisMapServerImageryProvider.defaultHue",
786
+ "ArcGisMapServerImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.hue instead."
787
+ );
788
+ this._defaultHue = value;
789
+ },
790
+ },
791
+
792
+ /**
793
+ * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the
794
+ * saturation while greater than 1.0 increases it.
795
+ * @memberof ArcGisMapServerImageryProvider.prototype
796
+ * @type {Number|undefined}
797
+ * @deprecated
798
+ */
799
+ defaultSaturation: {
800
+ get: function () {
801
+ deprecationWarning(
802
+ "ArcGisMapServerImageryProvider.defaultSaturation",
803
+ "ArcGisMapServerImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.saturation instead."
804
+ );
805
+ return this._defaultSaturation;
806
+ },
807
+ set: function (value) {
808
+ deprecationWarning(
809
+ "ArcGisMapServerImageryProvider.defaultSaturation",
810
+ "ArcGisMapServerImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.saturation instead."
811
+ );
812
+ this._defaultSaturation = value;
813
+ },
814
+ },
815
+
816
+ /**
817
+ * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.
818
+ * @memberof ArcGisMapServerImageryProvider.prototype
819
+ * @type {Number|undefined}
820
+ * @deprecated
821
+ */
822
+ defaultGamma: {
823
+ get: function () {
824
+ deprecationWarning(
825
+ "ArcGisMapServerImageryProvider.defaultGamma",
826
+ "ArcGisMapServerImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.gamma instead."
827
+ );
828
+ return this._defaultGamma;
829
+ },
830
+ set: function (value) {
831
+ deprecationWarning(
832
+ "ArcGisMapServerImageryProvider.defaultGamma",
833
+ "ArcGisMapServerImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.gamma instead."
834
+ );
835
+ this._defaultGamma = value;
836
+ },
837
+ },
838
+
839
+ /**
840
+ * The default texture minification filter to apply to this provider.
841
+ * @memberof ArcGisMapServerImageryProvider.prototype
842
+ * @type {TextureMinificationFilter}
843
+ * @deprecated
844
+ */
845
+ defaultMinificationFilter: {
846
+ get: function () {
847
+ deprecationWarning(
848
+ "ArcGisMapServerImageryProvider.defaultMinificationFilter",
849
+ "ArcGisMapServerImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead."
850
+ );
851
+ return this._defaultMinificationFilter;
852
+ },
853
+ set: function (value) {
854
+ deprecationWarning(
855
+ "ArcGisMapServerImageryProvider.defaultMinificationFilter",
856
+ "ArcGisMapServerImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead."
857
+ );
858
+ this._defaultMinificationFilter = value;
859
+ },
860
+ },
861
+
862
+ /**
863
+ * The default texture magnification filter to apply to this provider.
864
+ * @memberof ArcGisMapServerImageryProvider.prototype
865
+ * @type {TextureMagnificationFilter}
866
+ * @deprecated
867
+ */
868
+ defaultMagnificationFilter: {
869
+ get: function () {
870
+ deprecationWarning(
871
+ "ArcGisMapServerImageryProvider.defaultMagnificationFilter",
872
+ "ArcGisMapServerImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead."
873
+ );
874
+ return this._defaultMagnificationFilter;
875
+ },
876
+ set: function (value) {
877
+ deprecationWarning(
878
+ "ArcGisMapServerImageryProvider.defaultMagnificationFilter",
879
+ "ArcGisMapServerImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead."
880
+ );
881
+ this._defaultMagnificationFilter = value;
882
+ },
883
+ },
730
884
  });
731
885
 
886
+ /**
887
+ * Creates an {@link ImageryProvider} which provides tiled imagery hosted by an ArcGIS MapServer. By default, the server's pre-cached tiles are
888
+ * used, if available.
889
+ *
890
+ * @param {Resource|String} url The URL of the ArcGIS MapServer service.
891
+ * @param {ArcGisMapServerImageryProvider.ConstructorOptions} [options] Object describing initialization options.
892
+ * @returns {Promise<ArcGisMapServerImageryProvider>} A promise that resolves to the created ArcGisMapServerImageryProvider.
893
+ *
894
+ * @example
895
+ * const esri = await Cesium.ArcGisMapServerImageryProvider.fromUrl(
896
+ * "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
897
+ * );
898
+ *
899
+ * @exception {RuntimeError} metadata spatial reference specifies an unknown WKID
900
+ * @exception {RuntimeError} metadata fullExtent.spatialReference specifies an unknown WKID
901
+ */
902
+ ArcGisMapServerImageryProvider.fromUrl = async function (url, options) {
903
+ //>>includeStart('debug', pragmas.debug);
904
+ Check.defined("url", url);
905
+ //>>includeEnd('debug');
906
+
907
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
908
+
909
+ const resource = Resource.createIfNeeded(url);
910
+ resource.appendForwardSlash();
911
+
912
+ if (defined(options.token)) {
913
+ resource.setQueryParameters({
914
+ token: options.token,
915
+ });
916
+ }
917
+
918
+ const provider = new ArcGisMapServerImageryProvider(options);
919
+ provider._resource = resource;
920
+ const imageryProviderBuilder = new ImageryProviderBuilder(options);
921
+ const useTiles = defaultValue(options.usePreCachedTilesIfAvailable, true);
922
+ if (useTiles) {
923
+ await requestMetadata(resource, imageryProviderBuilder);
924
+ }
925
+
926
+ imageryProviderBuilder.build(provider);
927
+ provider._readyPromise = Promise.resolve(true);
928
+ return provider;
929
+ };
930
+
732
931
  /**
733
932
  * Gets the credits to be displayed when a given tile is displayed.
734
933
  *
@@ -736,8 +935,6 @@ Object.defineProperties(ArcGisMapServerImageryProvider.prototype, {
736
935
  * @param {number} y The tile Y coordinate.
737
936
  * @param {number} level The tile level;
738
937
  * @returns {Credit[]} The credits to be displayed when the tile is displayed.
739
- *
740
- * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.
741
938
  */
742
939
  ArcGisMapServerImageryProvider.prototype.getTileCredits = function (
743
940
  x,
@@ -748,8 +945,7 @@ ArcGisMapServerImageryProvider.prototype.getTileCredits = function (
748
945
  };
749
946
 
750
947
  /**
751
- * Requests the image for a given tile. This function should
752
- * not be called before {@link ArcGisMapServerImageryProvider#ready} returns true.
948
+ * Requests the image for a given tile.
753
949
  *
754
950
  * @param {number} x The tile X coordinate.
755
951
  * @param {number} y The tile Y coordinate.
@@ -757,8 +953,6 @@ ArcGisMapServerImageryProvider.prototype.getTileCredits = function (
757
953
  * @param {Request} [request] The request object. Intended for internal use only.
758
954
  * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or
759
955
  * undefined if there are too many active requests to the server, and the request should be retried later.
760
- *
761
- * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.
762
956
  */
763
957
  ArcGisMapServerImageryProvider.prototype.requestImage = function (
764
958
  x,
@@ -766,14 +960,6 @@ ArcGisMapServerImageryProvider.prototype.requestImage = function (
766
960
  level,
767
961
  request
768
962
  ) {
769
- //>>includeStart('debug', pragmas.debug);
770
- if (!this._ready) {
771
- throw new DeveloperError(
772
- "requestImage must not be called before the imagery provider is ready."
773
- );
774
- }
775
- //>>includeEnd('debug');
776
-
777
963
  return ImageryProvider.loadImage(
778
964
  this,
779
965
  buildImageResource(this, x, y, level, request)
@@ -783,7 +969,7 @@ ArcGisMapServerImageryProvider.prototype.requestImage = function (
783
969
  /**
784
970
  /**
785
971
  * Asynchronously determines what features, if any, are located at a given longitude and latitude within
786
- * a tile. This function should not be called before {@link ImageryProvider#ready} returns true.
972
+ * a tile.
787
973
  *
788
974
  * @param {number} x The tile X coordinate.
789
975
  * @param {number} y The tile Y coordinate.
@@ -793,8 +979,6 @@ ArcGisMapServerImageryProvider.prototype.requestImage = function (
793
979
  * @return {Promise<ImageryLayerFeatureInfo[]>|undefined} A promise for the picked features that will resolve when the asynchronous
794
980
  * picking completes. The resolved value is an array of {@link ImageryLayerFeatureInfo}
795
981
  * instances. The array may be empty if no features are found at the given location.
796
- *
797
- * @exception {DeveloperError} <code>pickFeatures</code> must not be called before the imagery provider is ready.
798
982
  */
799
983
  ArcGisMapServerImageryProvider.prototype.pickFeatures = function (
800
984
  x,
@@ -803,14 +987,6 @@ ArcGisMapServerImageryProvider.prototype.pickFeatures = function (
803
987
  longitude,
804
988
  latitude
805
989
  ) {
806
- //>>includeStart('debug', pragmas.debug);
807
- if (!this._ready) {
808
- throw new DeveloperError(
809
- "pickFeatures must not be called before the imagery provider is ready."
810
- );
811
- }
812
- //>>includeEnd('debug');
813
-
814
990
  if (!this.enablePickFeatures) {
815
991
  return undefined;
816
992
  }