@cesium/engine 2.1.0 → 2.3.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 (240) hide show
  1. package/Build/Workers/{AttributeCompression-8a5a065e.js → AttributeCompression-f9f6c717.js} +1 -1
  2. package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-31fadcf0.js} +1 -1
  3. package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-995f0079.js} +1 -1
  4. package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-7eb1af60.js} +1 -1
  5. package/Build/Workers/{Color-f85df1be.js → Color-2dc49658.js} +1 -1
  6. package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-d7d972d6.js} +1 -1
  7. package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-1f5ef7b3.js} +1 -1
  8. package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-23c67a6c.js} +1 -1
  9. package/Build/Workers/{CylinderGeometryLibrary-135b0858.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
  10. package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-37014da4.js} +1 -1
  11. package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-92ab6b1e.js} +1 -1
  12. package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-12b6fef5.js} +1 -1
  13. package/Build/Workers/{EllipsoidGeodesic-dcff5cbd.js → EllipsoidGeodesic-5b3623dc.js} +1 -1
  14. package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-508da15c.js} +1 -1
  15. package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-40d97455.js} +1 -1
  16. package/Build/Workers/{EllipsoidRhumbLine-b672d507.js → EllipsoidRhumbLine-ef872433.js} +1 -1
  17. package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-46d4d9c2.js} +1 -1
  18. package/Build/Workers/{EncodedCartesian3-e8bbca36.js → EncodedCartesian3-57415c8a.js} +1 -1
  19. package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-38605e69.js} +32 -4
  20. package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-a466e9c7.js} +1 -1
  21. package/Build/Workers/{GeometryInstance-3fb607b7.js → GeometryInstance-34d9e21e.js} +1 -1
  22. package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-dcf79306.js} +1 -1
  23. package/Build/Workers/{IndexDatatype-b8f3e09d.js → IndexDatatype-2643aa47.js} +1 -1
  24. package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-88c49b2e.js} +1 -1
  25. package/Build/Workers/{Math-dad82b4d.js → Math-0a2ac845.js} +12 -2
  26. package/Build/Workers/{Matrix2-1e403d0e.js → Matrix2-e1298525.js} +1 -1
  27. package/Build/Workers/{Matrix3-fa806b97.js → Matrix3-41c58dde.js} +1 -1
  28. package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-2dd47921.js} +5 -3
  29. package/Build/Workers/{Plane-c27e1ac6.js → Plane-4c3d403b.js} +1 -1
  30. package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-59126025.js} +1 -1
  31. package/Build/Workers/PolygonPipeline-1fe328c0.js +1344 -0
  32. package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-896735cc.js} +1 -1
  33. package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-9c0639f7.js} +1 -1
  34. package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-fc1a47ff.js} +1 -1
  35. package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-a23c9ebe.js} +1 -1
  36. package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-51b8b33b.js} +1 -1
  37. package/Build/Workers/Transforms-bc45e707.js +14699 -0
  38. package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-007e9883.js} +1 -1
  39. package/Build/Workers/{WebMercatorProjection-76a3fcc0.js → WebMercatorProjection-13ed1a6e.js} +1 -1
  40. package/Build/Workers/{arrayRemoveDuplicates-fac118a8.js → arrayRemoveDuplicates-d2061e85.js} +1 -1
  41. package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
  42. package/Build/Workers/combineGeometry.js +1 -1
  43. package/Build/Workers/createBoxGeometry.js +1 -1
  44. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  45. package/Build/Workers/createCircleGeometry.js +1 -1
  46. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  47. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  48. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  49. package/Build/Workers/createCorridorGeometry.js +1 -1
  50. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  51. package/Build/Workers/createCylinderGeometry.js +1 -1
  52. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  53. package/Build/Workers/createEllipseGeometry.js +1 -1
  54. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  55. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  56. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  57. package/Build/Workers/createFrustumGeometry.js +1 -1
  58. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  59. package/Build/Workers/createGeometry.js +1 -1
  60. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  61. package/Build/Workers/createPlaneGeometry.js +1 -1
  62. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  63. package/Build/Workers/createPolygonGeometry.js +1 -1
  64. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  65. package/Build/Workers/createPolylineGeometry.js +1 -1
  66. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  67. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  68. package/Build/Workers/createRectangleGeometry.js +1 -1
  69. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  70. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  71. package/Build/Workers/createSphereGeometry.js +1 -1
  72. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  73. package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
  74. package/Build/Workers/createVectorTileGeometries.js +1 -1
  75. package/Build/Workers/createVectorTilePoints.js +1 -1
  76. package/Build/Workers/createVectorTilePolygons.js +1 -1
  77. package/Build/Workers/createVectorTilePolylines.js +1 -1
  78. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  79. package/Build/Workers/createVerticesFromHeightmap.js +5 -8
  80. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
  81. package/Build/Workers/createWallGeometry.js +1 -1
  82. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  83. package/Build/Workers/decodeDraco.js +1 -1
  84. package/Build/Workers/decodeI3S.js +1 -1
  85. package/Build/Workers/package.js +1 -1
  86. package/Build/Workers/transferTypedArrayTest.js +1 -1
  87. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  88. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +291 -191
  89. package/Source/Core/BingMapsGeocoderService.js +19 -1
  90. package/Source/Core/CartographicGeocoderService.js +15 -0
  91. package/Source/Core/CesiumTerrainProvider.js +571 -434
  92. package/Source/Core/Credit.js +1 -1
  93. package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
  94. package/Source/Core/EllipsoidTerrainProvider.js +17 -10
  95. package/Source/Core/FrustumGeometry.js +4 -3
  96. package/Source/Core/GeocoderService.js +32 -1
  97. package/Source/Core/GoogleEarthEnterpriseMetadata.js +86 -34
  98. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +119 -82
  99. package/Source/Core/Ion.js +1 -1
  100. package/Source/Core/IonGeocoderService.js +17 -2
  101. package/Source/Core/IonResource.js +14 -3
  102. package/Source/Core/OpenCageGeocoderService.js +18 -1
  103. package/Source/Core/OrientedBoundingBox.js +4 -2
  104. package/Source/Core/OrthographicFrustum.js +13 -0
  105. package/Source/Core/PeliasGeocoderService.js +14 -1
  106. package/Source/Core/PerspectiveFrustum.js +14 -0
  107. package/Source/Core/Request.js +3 -2
  108. package/Source/Core/RequestScheduler.js +10 -5
  109. package/Source/Core/Resource.js +230 -236
  110. package/Source/Core/TerrainProvider.js +9 -14
  111. package/Source/Core/TileProviderError.js +8 -8
  112. package/Source/Core/VRTheWorldTerrainProvider.js +193 -124
  113. package/Source/Core/buildModuleUrl.js +4 -3
  114. package/Source/Core/createWorldTerrain.js +20 -2
  115. package/Source/Core/createWorldTerrainAsync.js +48 -0
  116. package/Source/Core/sampleTerrain.js +9 -10
  117. package/Source/Core/sampleTerrainMostDetailed.js +66 -72
  118. package/Source/DataSources/Cesium3DTilesetVisualizer.js +37 -26
  119. package/Source/DataSources/DataSourceDisplay.js +2 -2
  120. package/Source/DataSources/Entity.js +6 -1
  121. package/Source/DataSources/EntityCluster.js +126 -128
  122. package/Source/DataSources/ModelVisualizer.js +104 -34
  123. package/Source/DataSources/PolygonGraphics.js +1 -1
  124. package/Source/Renderer/UniformState.js +3 -2
  125. package/Source/Renderer/demodernizeShader.js +5 -5
  126. package/Source/Scene/ArcGisBaseMapType.js +12 -0
  127. package/Source/Scene/ArcGisMapServerImageryProvider.js +694 -376
  128. package/Source/Scene/ArcGisMapService.js +83 -0
  129. package/Source/Scene/BingMapsImageryProvider.js +511 -305
  130. package/Source/Scene/BufferLoader.js +29 -34
  131. package/Source/Scene/Camera.js +8 -7
  132. package/Source/Scene/Cesium3DTile.js +392 -254
  133. package/Source/Scene/Cesium3DTileBatchTable.js +2 -2
  134. package/Source/Scene/Cesium3DTileContent.js +16 -0
  135. package/Source/Scene/Cesium3DTileContentFactory.js +4 -4
  136. package/Source/Scene/Cesium3DTilePass.js +8 -11
  137. package/Source/Scene/Cesium3DTileStyleEngine.js +1 -1
  138. package/Source/Scene/Cesium3DTilesVoxelProvider.js +225 -117
  139. package/Source/Scene/Cesium3DTileset.js +756 -482
  140. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +301 -0
  141. package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +33 -46
  142. package/Source/Scene/Cesium3DTilesetSkipTraversal.js +421 -0
  143. package/Source/Scene/Cesium3DTilesetTraversal.js +219 -671
  144. package/Source/Scene/ClassificationPrimitive.js +7 -0
  145. package/Source/Scene/Composite3DTileContent.js +69 -26
  146. package/Source/Scene/CreditDisplay.js +132 -20
  147. package/Source/Scene/DepthPlane.js +1 -1
  148. package/Source/Scene/Empty3DTileContent.js +31 -1
  149. package/Source/Scene/Geometry3DTileContent.js +47 -7
  150. package/Source/Scene/Globe.js +5 -1
  151. package/Source/Scene/GlobeSurfaceTile.js +2 -1
  152. package/Source/Scene/GlobeSurfaceTileProvider.js +53 -30
  153. package/Source/Scene/GltfBufferViewLoader.js +47 -91
  154. package/Source/Scene/GltfDracoLoader.js +110 -112
  155. package/Source/Scene/GltfImageLoader.js +71 -78
  156. package/Source/Scene/GltfIndexBufferLoader.js +108 -121
  157. package/Source/Scene/GltfJsonLoader.js +87 -74
  158. package/Source/Scene/GltfLoader.js +381 -300
  159. package/Source/Scene/GltfStructuralMetadataLoader.js +109 -110
  160. package/Source/Scene/GltfTextureLoader.js +97 -96
  161. package/Source/Scene/GltfVertexBufferLoader.js +128 -133
  162. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +353 -225
  163. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +491 -331
  164. package/Source/Scene/GridImageryProvider.js +267 -104
  165. package/Source/Scene/GroundPolylinePrimitive.js +12 -1
  166. package/Source/Scene/GroundPrimitive.js +8 -1
  167. package/Source/Scene/I3SDataProvider.js +214 -113
  168. package/Source/Scene/I3SFeature.js +7 -6
  169. package/Source/Scene/I3SLayer.js +26 -37
  170. package/Source/Scene/I3SNode.js +59 -66
  171. package/Source/Scene/Imagery.js +6 -1
  172. package/Source/Scene/ImageryLayer.js +299 -48
  173. package/Source/Scene/ImageryLayerCollection.js +26 -0
  174. package/Source/Scene/ImageryProvider.js +129 -111
  175. package/Source/Scene/Implicit3DTileContent.js +72 -23
  176. package/Source/Scene/ImplicitSubtree.js +66 -45
  177. package/Source/Scene/IonImageryProvider.js +482 -275
  178. package/Source/Scene/MapboxImageryProvider.js +272 -112
  179. package/Source/Scene/MapboxStyleImageryProvider.js +270 -111
  180. package/Source/Scene/MetadataSchemaLoader.js +26 -36
  181. package/Source/Scene/Model/B3dmLoader.js +42 -46
  182. package/Source/Scene/Model/GeoJsonLoader.js +8 -32
  183. package/Source/Scene/Model/I3dmLoader.js +48 -74
  184. package/Source/Scene/Model/MaterialPipelineStage.js +12 -12
  185. package/Source/Scene/Model/Model.js +514 -135
  186. package/Source/Scene/Model/Model3DTileContent.js +83 -31
  187. package/Source/Scene/Model/ModelAnimationCollection.js +3 -3
  188. package/Source/Scene/Model/ModelDrawCommand.js +15 -26
  189. package/Source/Scene/Model/ModelUtility.js +16 -16
  190. package/Source/Scene/Model/PntsLoader.js +27 -32
  191. package/Source/Scene/Model/UniformType.js +1 -1
  192. package/Source/Scene/Multiple3DTileContent.js +134 -115
  193. package/Source/Scene/Picking.js +3 -2
  194. package/Source/Scene/PointCloud.js +11 -19
  195. package/Source/Scene/Primitive.js +20 -0
  196. package/Source/Scene/QuadtreePrimitive.js +5 -2
  197. package/Source/Scene/QuadtreeTileProvider.js +4 -8
  198. package/Source/Scene/ResourceCache.js +47 -105
  199. package/Source/Scene/ResourceCacheStatistics.js +24 -58
  200. package/Source/Scene/ResourceLoader.js +5 -17
  201. package/Source/Scene/ResourceLoaderState.js +12 -4
  202. package/Source/Scene/Scene.js +65 -0
  203. package/Source/Scene/SceneTransforms.js +3 -2
  204. package/Source/Scene/ScreenSpaceCameraController.js +2 -2
  205. package/Source/Scene/SingleTileImageryProvider.js +382 -209
  206. package/Source/Scene/Terrain.js +196 -0
  207. package/Source/Scene/TileCoordinatesImageryProvider.js +267 -104
  208. package/Source/Scene/TileMapServiceImageryProvider.js +177 -85
  209. package/Source/Scene/Tileset3DTileContent.js +47 -5
  210. package/Source/Scene/TimeDynamicPointCloud.js +15 -2
  211. package/Source/Scene/UrlTemplateImageryProvider.js +343 -215
  212. package/Source/Scene/Vector3DTileClampedPolylines.js +96 -84
  213. package/Source/Scene/Vector3DTileContent.js +47 -22
  214. package/Source/Scene/Vector3DTileGeometry.js +57 -52
  215. package/Source/Scene/Vector3DTilePoints.js +97 -81
  216. package/Source/Scene/Vector3DTilePolygons.js +118 -117
  217. package/Source/Scene/Vector3DTilePolylines.js +86 -82
  218. package/Source/Scene/Vector3DTilePrimitive.js +0 -1
  219. package/Source/Scene/VoxelContent.js +61 -63
  220. package/Source/Scene/VoxelPrimitive.js +39 -91
  221. package/Source/Scene/VoxelProvider.js +2 -2
  222. package/Source/Scene/WebMapServiceImageryProvider.js +272 -111
  223. package/Source/Scene/WebMapTileServiceImageryProvider.js +270 -107
  224. package/Source/Scene/computeFlyToLocationForRectangle.js +33 -37
  225. package/Source/Scene/createOsmBuildings.js +6 -0
  226. package/Source/Scene/createOsmBuildingsAsync.js +82 -0
  227. package/Source/Scene/createWorldImagery.js +14 -5
  228. package/Source/Scene/createWorldImageryAsync.js +39 -0
  229. package/Source/Shaders/AtmosphereCommon.glsl +51 -8
  230. package/Source/Shaders/AtmosphereCommon.js +51 -8
  231. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +1 -1
  232. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +1 -1
  233. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +3 -3
  234. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +3 -3
  235. package/Source/Widget/CesiumWidget.js +67 -27
  236. package/index.d.ts +2429 -1475
  237. package/index.js +324 -315
  238. package/package.json +4 -4
  239. package/Build/Workers/PolygonPipeline-d31ff61c.js +0 -1345
  240. package/Build/Workers/Transforms-9e9df299.js +0 -14714
@@ -3,7 +3,7 @@ import Check from "../Core/Check.js";
3
3
  import Credit from "../Core/Credit.js";
4
4
  import defaultValue from "../Core/defaultValue.js";
5
5
  import defined from "../Core/defined.js";
6
- import DeveloperError from "../Core/DeveloperError.js";
6
+ import deprecationWarning from "../Core/deprecationWarning.js";
7
7
  import Event from "../Core/Event.js";
8
8
  import CesiumMath from "../Core/Math.js";
9
9
  import Rectangle from "../Core/Rectangle.js";
@@ -20,8 +20,8 @@ import ImageryProvider from "./ImageryProvider.js";
20
20
  *
21
21
  * Initialization options for the BingMapsImageryProvider constructor
22
22
  *
23
- * @property {Resource|string} url The url of the Bing Maps server hosting the imagery.
24
- * @property {string} key The Bing Maps key for your application, which can be
23
+ * @property {Resource|string} [url] The url of the Bing Maps server hosting the imagery. Deprecated.
24
+ * @property {string} [key] The Bing Maps key for your application, which can be
25
25
  * created at {@link https://www.bingmapsportal.com/}.
26
26
  * @property {string} [tileProtocol] The protocol to use when loading tiles, e.g. 'http' or 'https'.
27
27
  * By default, tiles are loaded using the same protocol as the page.
@@ -37,6 +37,140 @@ import ImageryProvider from "./ImageryProvider.js";
37
37
  */
38
38
 
39
39
  /**
40
+ * Used to track creation details while fetching initial metadata
41
+ *
42
+ * @constructor
43
+ * @private
44
+ *
45
+ * @param {BingMapsImageryProvider.ConstructorOptions} options An object describing initialization options
46
+ */
47
+ function ImageryProviderBuilder(options) {
48
+ this.tileWidth = undefined;
49
+ this.tileHeight = undefined;
50
+ this.maximumLevel = undefined;
51
+ this.imageUrlSubdomains = undefined;
52
+ this.imageUrlTemplate = undefined;
53
+
54
+ this.attributionList = undefined;
55
+ }
56
+
57
+ /**
58
+ * Complete BingMapsImageryProvider creation based on builder values.
59
+ *
60
+ * @private
61
+ *
62
+ * @param {BingMapsImageryProvider} provider
63
+ */
64
+ ImageryProviderBuilder.prototype.build = function (provider) {
65
+ provider._tileWidth = this.tileWidth;
66
+ provider._tileHeight = this.tileHeight;
67
+ provider._maximumLevel = this.maximumLevel;
68
+ provider._imageUrlSubdomains = this.imageUrlSubdomains;
69
+ provider._imageUrlTemplate = this.imageUrlTemplate;
70
+
71
+ let attributionList = (provider._attributionList = this.attributionList);
72
+ if (!attributionList) {
73
+ attributionList = [];
74
+ }
75
+ provider._attributionList = attributionList;
76
+
77
+ for (
78
+ let attributionIndex = 0, attributionLength = attributionList.length;
79
+ attributionIndex < attributionLength;
80
+ ++attributionIndex
81
+ ) {
82
+ const attribution = attributionList[attributionIndex];
83
+
84
+ if (attribution.credit instanceof Credit) {
85
+ // If attribution.credit has already been created
86
+ // then we are using a cached value, which means
87
+ // none of the remaining processing needs to be done.
88
+ break;
89
+ }
90
+
91
+ attribution.credit = new Credit(attribution.attribution);
92
+ const coverageAreas = attribution.coverageAreas;
93
+
94
+ for (
95
+ let areaIndex = 0, areaLength = attribution.coverageAreas.length;
96
+ areaIndex < areaLength;
97
+ ++areaIndex
98
+ ) {
99
+ const area = coverageAreas[areaIndex];
100
+ const bbox = area.bbox;
101
+ area.bbox = new Rectangle(
102
+ CesiumMath.toRadians(bbox[1]),
103
+ CesiumMath.toRadians(bbox[0]),
104
+ CesiumMath.toRadians(bbox[3]),
105
+ CesiumMath.toRadians(bbox[2])
106
+ );
107
+ }
108
+ }
109
+
110
+ provider._ready = true;
111
+ };
112
+
113
+ function metadataSuccess(data, imageryProviderBuilder) {
114
+ if (data.resourceSets.length !== 1) {
115
+ throw new RuntimeError(
116
+ "metadata does not specify one resource in resourceSets"
117
+ );
118
+ }
119
+
120
+ const resource = data.resourceSets[0].resources[0];
121
+ imageryProviderBuilder.tileWidth = resource.imageWidth;
122
+ imageryProviderBuilder.tileHeight = resource.imageHeight;
123
+ imageryProviderBuilder.maximumLevel = resource.zoomMax - 1;
124
+ imageryProviderBuilder.imageUrlSubdomains = resource.imageUrlSubdomains;
125
+ imageryProviderBuilder.imageUrlTemplate = resource.imageUrl;
126
+ imageryProviderBuilder.attributionList = resource.imageryProviders;
127
+ }
128
+
129
+ function metadataFailure(metadataResource, error, provider) {
130
+ let message = `An error occurred while accessing ${metadataResource.url}`;
131
+ if (defined(error) && defined(error.message)) {
132
+ message += `: ${error.message}`;
133
+ }
134
+
135
+ TileProviderError.reportError(
136
+ undefined,
137
+ provider,
138
+ defined(provider) ? provider._errorEvent : undefined,
139
+ message,
140
+ undefined,
141
+ undefined,
142
+ undefined,
143
+ error
144
+ );
145
+
146
+ throw new RuntimeError(message);
147
+ }
148
+
149
+ async function requestMetadata(
150
+ metadataResource,
151
+ imageryProviderBuilder,
152
+ provider
153
+ ) {
154
+ const cacheKey = metadataResource.url;
155
+ let promise = BingMapsImageryProvider._metadataCache[cacheKey];
156
+ if (!defined(promise)) {
157
+ promise = metadataResource.fetchJsonp("jsonp");
158
+ BingMapsImageryProvider._metadataCache[cacheKey] = promise;
159
+ }
160
+
161
+ try {
162
+ const data = await promise;
163
+ return metadataSuccess(data, imageryProviderBuilder);
164
+ } catch (e) {
165
+ metadataFailure(metadataResource, e, provider);
166
+ }
167
+ }
168
+
169
+ /**
170
+ * <div class="notice">
171
+ * To construct a BingMapsImageryProvider, call {@link BingMapsImageryProvider.fromUrl}. Do not call the constructor directly.
172
+ * </div>
173
+ *
40
174
  * Provides tiled imagery using the Bing Maps Imagery REST API.
41
175
  *
42
176
  * @alias BingMapsImageryProvider
@@ -44,6 +178,7 @@ import ImageryProvider from "./ImageryProvider.js";
44
178
  *
45
179
  * @param {BingMapsImageryProvider.ConstructorOptions} options Object describing initialization options
46
180
  *
181
+ * @see BingMapsImageryProvider.fromUrl
47
182
  * @see ArcGisMapServerImageryProvider
48
183
  * @see GoogleEarthEnterpriseMapsProvider
49
184
  * @see OpenStreetMapImageryProvider
@@ -53,12 +188,11 @@ import ImageryProvider from "./ImageryProvider.js";
53
188
  * @see WebMapTileServiceImageryProvider
54
189
  * @see UrlTemplateImageryProvider
55
190
  *
56
- *
57
191
  * @example
58
- * const bing = new Cesium.BingMapsImageryProvider({
59
- * url : 'https://dev.virtualearth.net',
60
- * key : 'get-yours-at-https://www.bingmapsportal.com/',
61
- * mapStyle : Cesium.BingMapsStyle.AERIAL
192
+ * const bing = await Cesium.BingMapsImageryProvider.fromUrl(
193
+ * "https://dev.virtualearth.net", {
194
+ * key: "get-yours-at-https://www.bingmapsportal.com/",
195
+ * mapStyle: Cesium.BingMapsStyle.AERIAL
62
196
  * });
63
197
  *
64
198
  * @see {@link http://msdn.microsoft.com/en-us/library/ff701713.aspx|Bing Maps REST Services}
@@ -66,109 +200,21 @@ import ImageryProvider from "./ImageryProvider.js";
66
200
  */
67
201
  function BingMapsImageryProvider(options) {
68
202
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
69
- const accessKey = options.key;
70
-
71
- //>>includeStart('debug', pragmas.debug);
72
- if (!defined(options.url)) {
73
- throw new DeveloperError("options.url is required.");
74
- }
75
- if (!defined(accessKey)) {
76
- throw new DeveloperError("options.key is required.");
77
- }
78
- //>>includeEnd('debug');
79
-
80
- /**
81
- * The default alpha blending value of this provider, with 0.0 representing fully transparent and
82
- * 1.0 representing fully opaque.
83
- *
84
- * @type {number|undefined}
85
- * @default undefined
86
- */
87
- this.defaultAlpha = undefined;
88
-
89
- /**
90
- * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and
91
- * 1.0 representing fully opaque.
92
- *
93
- * @type {number|undefined}
94
- * @default undefined
95
- */
96
- this.defaultNightAlpha = undefined;
97
-
98
- /**
99
- * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and
100
- * 1.0 representing fully opaque.
101
- *
102
- * @type {number|undefined}
103
- * @default undefined
104
- */
105
- this.defaultDayAlpha = undefined;
106
203
 
107
- /**
108
- * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0
109
- * makes the imagery darker while greater than 1.0 makes it brighter.
110
- *
111
- * @type {number|undefined}
112
- * @default undefined
113
- */
114
- this.defaultBrightness = undefined;
115
-
116
- /**
117
- * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces
118
- * the contrast while greater than 1.0 increases it.
119
- *
120
- * @type {number|undefined}
121
- * @default undefined
122
- */
123
- this.defaultContrast = undefined;
204
+ this._defaultAlpha = undefined;
205
+ this._defaultNightAlpha = undefined;
206
+ this._defaultDayAlpha = undefined;
207
+ this._defaultBrightness = undefined;
208
+ this._defaultContrast = undefined;
209
+ this._defaultHue = undefined;
210
+ this._defaultSaturation = undefined;
211
+ this._defaultGamma = 1.0;
212
+ this._defaultMinificationFilter = undefined;
213
+ this._defaultMagnificationFilter = undefined;
124
214
 
125
- /**
126
- * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.
127
- *
128
- * @type {number|undefined}
129
- * @default undefined
130
- */
131
- this.defaultHue = undefined;
132
-
133
- /**
134
- * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the
135
- * saturation while greater than 1.0 increases it.
136
- *
137
- * @type {number|undefined}
138
- * @default undefined
139
- */
140
- this.defaultSaturation = undefined;
141
-
142
- /**
143
- * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.
144
- *
145
- * @type {number|undefined}
146
- * @default 1.0
147
- */
148
- this.defaultGamma = 1.0;
149
-
150
- /**
151
- * The default texture minification filter to apply to this provider.
152
- *
153
- * @type {TextureMinificationFilter}
154
- * @default undefined
155
- */
156
- this.defaultMinificationFilter = undefined;
157
-
158
- /**
159
- * The default texture magnification filter to apply to this provider.
160
- *
161
- * @type {TextureMagnificationFilter}
162
- * @default undefined
163
- */
164
- this.defaultMagnificationFilter = undefined;
165
-
166
- this._key = accessKey;
167
- this._resource = Resource.createIfNeeded(options.url);
168
- this._resource.appendForwardSlash();
169
- this._tileProtocol = options.tileProtocol;
170
215
  this._mapStyle = defaultValue(options.mapStyle, BingMapsStyle.AERIAL);
171
216
  this._culture = defaultValue(options.culture, "");
217
+ this._key = options.key;
172
218
 
173
219
  this._tileDiscardPolicy = options.tileDiscardPolicy;
174
220
  if (!defined(this._tileDiscardPolicy)) {
@@ -191,123 +237,59 @@ function BingMapsImageryProvider(options) {
191
237
  this._maximumLevel = undefined;
192
238
  this._imageUrlTemplate = undefined;
193
239
  this._imageUrlSubdomains = undefined;
240
+ this._attributionList = undefined;
194
241
 
195
242
  this._errorEvent = new Event();
196
243
 
197
244
  this._ready = false;
245
+ if (defined(options.url)) {
246
+ deprecationWarning(
247
+ "BingMapsImageryProvider options.url",
248
+ "options.url was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use BingMapsImageryProvider.fromUrl instead."
249
+ );
198
250
 
199
- let tileProtocol = this._tileProtocol;
200
-
201
- // For backward compatibility reasons, the tileProtocol may end with
202
- // a `:`. Remove it.
203
- if (defined(tileProtocol)) {
204
- if (
205
- tileProtocol.length > 0 &&
206
- tileProtocol[tileProtocol.length - 1] === ":"
207
- ) {
208
- tileProtocol = tileProtocol.substr(0, tileProtocol.length - 1);
209
- }
210
- } else {
211
- // use http if the document's protocol is http, otherwise use https
212
- const documentProtocol = document.location.protocol;
213
- tileProtocol = documentProtocol === "http:" ? "http" : "https";
214
- }
215
-
216
- const metadataResource = this._resource.getDerivedResource({
217
- url: `REST/v1/Imagery/Metadata/${this._mapStyle}`,
218
- queryParameters: {
219
- incl: "ImageryProviders",
220
- key: this._key,
221
- uriScheme: tileProtocol,
222
- },
223
- });
224
- const that = this;
225
- let metadataError;
226
-
227
- function metadataSuccess(data) {
228
- if (data.resourceSets.length !== 1) {
229
- return metadataFailure();
230
- }
231
- const resource = data.resourceSets[0].resources[0];
232
-
233
- that._tileWidth = resource.imageWidth;
234
- that._tileHeight = resource.imageHeight;
235
- that._maximumLevel = resource.zoomMax - 1;
236
- that._imageUrlSubdomains = resource.imageUrlSubdomains;
237
- that._imageUrlTemplate = resource.imageUrl;
238
-
239
- let attributionList = (that._attributionList = resource.imageryProviders);
240
- if (!attributionList) {
241
- attributionList = that._attributionList = [];
242
- }
243
-
244
- for (
245
- let attributionIndex = 0, attributionLength = attributionList.length;
246
- attributionIndex < attributionLength;
247
- ++attributionIndex
248
- ) {
249
- const attribution = attributionList[attributionIndex];
250
-
251
- if (attribution.credit instanceof Credit) {
252
- // If attribution.credit has already been created
253
- // then we are using a cached value, which means
254
- // none of the remaining processing needs to be done.
255
- break;
256
- }
251
+ //>>includeStart('debug', pragmas.debug);
252
+ Check.defined("options.key", options.key);
253
+ //>>includeEnd('debug');
257
254
 
258
- attribution.credit = new Credit(attribution.attribution);
259
- const coverageAreas = attribution.coverageAreas;
255
+ let tileProtocol = options.tileProtocol;
260
256
 
261
- for (
262
- let areaIndex = 0, areaLength = attribution.coverageAreas.length;
263
- areaIndex < areaLength;
264
- ++areaIndex
257
+ // For backward compatibility reasons, the tileProtocol may end with
258
+ // a `:`. Remove it.
259
+ if (defined(tileProtocol)) {
260
+ if (
261
+ tileProtocol.length > 0 &&
262
+ tileProtocol[tileProtocol.length - 1] === ":"
265
263
  ) {
266
- const area = coverageAreas[areaIndex];
267
- const bbox = area.bbox;
268
- area.bbox = new Rectangle(
269
- CesiumMath.toRadians(bbox[1]),
270
- CesiumMath.toRadians(bbox[0]),
271
- CesiumMath.toRadians(bbox[3]),
272
- CesiumMath.toRadians(bbox[2])
273
- );
264
+ tileProtocol = tileProtocol.substr(0, tileProtocol.length - 1);
274
265
  }
266
+ } else {
267
+ // use http if the document's protocol is http, otherwise use https
268
+ const documentProtocol = document.location.protocol;
269
+ tileProtocol = documentProtocol === "http:" ? "http" : "https";
275
270
  }
276
271
 
277
- that._ready = true;
278
- TileProviderError.reportSuccess(metadataError);
279
- return Promise.resolve(true);
280
- }
281
-
282
- function metadataFailure(e) {
283
- const message = `An error occurred while accessing ${metadataResource.url}.`;
284
- metadataError = TileProviderError.reportError(
285
- metadataError,
286
- that,
287
- that._errorEvent,
288
- message,
289
- undefined,
290
- undefined,
291
- undefined
292
- );
293
- if (metadataError.retry) {
294
- return requestMetadata();
295
- }
296
- return Promise.reject(new RuntimeError(message));
297
- }
298
-
299
- const cacheKey = metadataResource.url;
300
- function requestMetadata() {
301
- const promise = metadataResource.fetchJsonp("jsonp");
302
- BingMapsImageryProvider._metadataCache[cacheKey] = promise;
303
- return promise.then(metadataSuccess).catch(metadataFailure);
304
- }
272
+ const resource = Resource.createIfNeeded(options.url);
273
+ this._resource = resource;
274
+ resource.appendForwardSlash();
275
+ const metadataResource = resource.getDerivedResource({
276
+ url: `REST/v1/Imagery/Metadata/${this._mapStyle}`,
277
+ queryParameters: {
278
+ incl: "ImageryProviders",
279
+ key: options.key,
280
+ uriScheme: tileProtocol,
281
+ },
282
+ });
305
283
 
306
- const promise = BingMapsImageryProvider._metadataCache[cacheKey];
307
- if (defined(promise)) {
308
- this._readyPromise = promise.then(metadataSuccess).catch(metadataFailure);
309
- } else {
310
- this._readyPromise = requestMetadata();
284
+ const imageryProviderBuilder = new ImageryProviderBuilder(options);
285
+ this._readyPromise = requestMetadata(
286
+ metadataResource,
287
+ imageryProviderBuilder,
288
+ this
289
+ ).then(() => {
290
+ imageryProviderBuilder.build(this);
291
+ return true;
292
+ });
311
293
  }
312
294
  }
313
295
 
@@ -375,127 +357,73 @@ Object.defineProperties(BingMapsImageryProvider.prototype, {
375
357
  },
376
358
 
377
359
  /**
378
- * Gets the width of each tile, in pixels. This function should
379
- * not be called before {@link BingMapsImageryProvider#ready} returns true.
360
+ * Gets the width of each tile, in pixels.
380
361
  * @memberof BingMapsImageryProvider.prototype
381
362
  * @type {number}
382
363
  * @readonly
383
364
  */
384
365
  tileWidth: {
385
366
  get: function () {
386
- //>>includeStart('debug', pragmas.debug);
387
- if (!this._ready) {
388
- throw new DeveloperError(
389
- "tileWidth must not be called before the imagery provider is ready."
390
- );
391
- }
392
- //>>includeEnd('debug');
393
-
394
367
  return this._tileWidth;
395
368
  },
396
369
  },
397
370
 
398
371
  /**
399
- * Gets the height of each tile, in pixels. This function should
400
- * not be called before {@link BingMapsImageryProvider#ready} returns true.
372
+ * Gets the height of each tile, in pixels.
401
373
  * @memberof BingMapsImageryProvider.prototype
402
374
  * @type {number}
403
375
  * @readonly
404
376
  */
405
377
  tileHeight: {
406
378
  get: function () {
407
- //>>includeStart('debug', pragmas.debug);
408
- if (!this._ready) {
409
- throw new DeveloperError(
410
- "tileHeight must not be called before the imagery provider is ready."
411
- );
412
- }
413
- //>>includeEnd('debug');
414
-
415
379
  return this._tileHeight;
416
380
  },
417
381
  },
418
382
 
419
383
  /**
420
- * Gets the maximum level-of-detail that can be requested. This function should
421
- * not be called before {@link BingMapsImageryProvider#ready} returns true.
384
+ * Gets the maximum level-of-detail that can be requested.
422
385
  * @memberof BingMapsImageryProvider.prototype
423
386
  * @type {number|undefined}
424
387
  * @readonly
425
388
  */
426
389
  maximumLevel: {
427
390
  get: function () {
428
- //>>includeStart('debug', pragmas.debug);
429
- if (!this._ready) {
430
- throw new DeveloperError(
431
- "maximumLevel must not be called before the imagery provider is ready."
432
- );
433
- }
434
- //>>includeEnd('debug');
435
-
436
391
  return this._maximumLevel;
437
392
  },
438
393
  },
439
394
 
440
395
  /**
441
- * Gets the minimum level-of-detail that can be requested. This function should
442
- * not be called before {@link BingMapsImageryProvider#ready} returns true.
396
+ * Gets the minimum level-of-detail that can be requested.
443
397
  * @memberof BingMapsImageryProvider.prototype
444
398
  * @type {number}
445
399
  * @readonly
446
400
  */
447
401
  minimumLevel: {
448
402
  get: function () {
449
- //>>includeStart('debug', pragmas.debug);
450
- if (!this._ready) {
451
- throw new DeveloperError(
452
- "minimumLevel must not be called before the imagery provider is ready."
453
- );
454
- }
455
- //>>includeEnd('debug');
456
-
457
403
  return 0;
458
404
  },
459
405
  },
460
406
 
461
407
  /**
462
- * Gets the tiling scheme used by this provider. This function should
463
- * not be called before {@link BingMapsImageryProvider#ready} returns true.
408
+ * Gets the tiling scheme used by this provider.
464
409
  * @memberof BingMapsImageryProvider.prototype
465
410
  * @type {TilingScheme}
466
411
  * @readonly
467
412
  */
468
413
  tilingScheme: {
469
414
  get: function () {
470
- //>>includeStart('debug', pragmas.debug);
471
- if (!this._ready) {
472
- throw new DeveloperError(
473
- "tilingScheme must not be called before the imagery provider is ready."
474
- );
475
- }
476
- //>>includeEnd('debug');
477
-
478
415
  return this._tilingScheme;
479
416
  },
480
417
  },
481
418
 
482
419
  /**
483
- * Gets the rectangle, in radians, of the imagery provided by this instance. This function should
484
- * not be called before {@link BingMapsImageryProvider#ready} returns true.
420
+ * Gets the rectangle, in radians, of the imagery provided by this instance.
485
421
  * @memberof BingMapsImageryProvider.prototype
486
422
  * @type {Rectangle}
487
423
  * @readonly
488
424
  */
489
425
  rectangle: {
490
426
  get: function () {
491
- //>>includeStart('debug', pragmas.debug);
492
- if (!this._ready) {
493
- throw new DeveloperError(
494
- "rectangle must not be called before the imagery provider is ready."
495
- );
496
- }
497
- //>>includeEnd('debug');
498
-
499
427
  return this._tilingScheme.rectangle;
500
428
  },
501
429
  },
@@ -503,22 +431,13 @@ Object.defineProperties(BingMapsImageryProvider.prototype, {
503
431
  /**
504
432
  * Gets the tile discard policy. If not undefined, the discard policy is responsible
505
433
  * for filtering out "missing" tiles via its shouldDiscardImage function. If this function
506
- * returns undefined, no tiles are filtered. This function should
507
- * not be called before {@link BingMapsImageryProvider#ready} returns true.
434
+ * returns undefined, no tiles are filtered.
508
435
  * @memberof BingMapsImageryProvider.prototype
509
436
  * @type {TileDiscardPolicy}
510
437
  * @readonly
511
438
  */
512
439
  tileDiscardPolicy: {
513
440
  get: function () {
514
- //>>includeStart('debug', pragmas.debug);
515
- if (!this._ready) {
516
- throw new DeveloperError(
517
- "tileDiscardPolicy must not be called before the imagery provider is ready."
518
- );
519
- }
520
- //>>includeEnd('debug');
521
-
522
441
  return this._tileDiscardPolicy;
523
442
  },
524
443
  },
@@ -542,9 +461,14 @@ Object.defineProperties(BingMapsImageryProvider.prototype, {
542
461
  * @memberof BingMapsImageryProvider.prototype
543
462
  * @type {boolean}
544
463
  * @readonly
464
+ * @deprecated
545
465
  */
546
466
  ready: {
547
467
  get: function () {
468
+ deprecationWarning(
469
+ "BingMapsImageryProvider.ready",
470
+ "BingMapsImageryProvider.ready was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use BingMapsImageryProvider.fromUrl instead."
471
+ );
548
472
  return this._ready;
549
473
  },
550
474
  },
@@ -554,16 +478,21 @@ Object.defineProperties(BingMapsImageryProvider.prototype, {
554
478
  * @memberof BingMapsImageryProvider.prototype
555
479
  * @type {Promise<boolean>}
556
480
  * @readonly
481
+ * @deprecated
557
482
  */
558
483
  readyPromise: {
559
484
  get: function () {
485
+ deprecationWarning(
486
+ "BingMapsImageryProvider.readyPromise",
487
+ "BingMapsImageryProvider.readyPromise was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use BingMapsImageryProvider.fromUrl instead."
488
+ );
560
489
  return this._readyPromise;
561
490
  },
562
491
  },
563
492
 
564
493
  /**
565
494
  * Gets the credit to display when this imagery provider is active. Typically this is used to credit
566
- * the source of the imagery. This function should not be called before {@link BingMapsImageryProvider#ready} returns true.
495
+ * the source of the imagery.
567
496
  * @memberof BingMapsImageryProvider.prototype
568
497
  * @type {Credit}
569
498
  * @readonly
@@ -589,8 +518,306 @@ Object.defineProperties(BingMapsImageryProvider.prototype, {
589
518
  return false;
590
519
  },
591
520
  },
521
+
522
+ /**
523
+ * The default alpha blending value of this provider, with 0.0 representing fully transparent and
524
+ * 1.0 representing fully opaque.
525
+ * @memberof BingMapsImageryProvider.prototype
526
+ * @type {Number|undefined}
527
+ * @deprecated
528
+ */
529
+ defaultAlpha: {
530
+ get: function () {
531
+ deprecationWarning(
532
+ "BingMapsImageryProvider.defaultAlpha",
533
+ "BingMapsImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.alpha instead."
534
+ );
535
+ return this._defaultAlpha;
536
+ },
537
+ set: function (value) {
538
+ deprecationWarning(
539
+ "BingMapsImageryProvider.defaultAlpha",
540
+ "BingMapsImageryProvider.defaultAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.alpha instead."
541
+ );
542
+ this._defaultAlpha = value;
543
+ },
544
+ },
545
+
546
+ /**
547
+ * The default alpha blending value on the night side of the globe of this provider, with 0.0 representing fully transparent and
548
+ * 1.0 representing fully opaque.
549
+ * @memberof BingMapsImageryProvider.prototype
550
+ * @type {Number|undefined}
551
+ * @deprecated
552
+ */
553
+ defaultNightAlpha: {
554
+ get: function () {
555
+ deprecationWarning(
556
+ "BingMapsImageryProvider.defaultNightAlpha",
557
+ "BingMapsImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead."
558
+ );
559
+ return this.defaultNightAlpha;
560
+ },
561
+ set: function (value) {
562
+ deprecationWarning(
563
+ "BingMapsImageryProvider.defaultNightAlpha",
564
+ "BingMapsImageryProvider.defaultNightAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.nightAlpha instead."
565
+ );
566
+ this.defaultNightAlpha = value;
567
+ },
568
+ },
569
+
570
+ /**
571
+ * The default alpha blending value on the day side of the globe of this provider, with 0.0 representing fully transparent and
572
+ * 1.0 representing fully opaque.
573
+ * @memberof BingMapsImageryProvider.prototype
574
+ * @type {Number|undefined}
575
+ * @deprecated
576
+ */
577
+ defaultDayAlpha: {
578
+ get: function () {
579
+ deprecationWarning(
580
+ "BingMapsImageryProvider.defaultDayAlpha",
581
+ "BingMapsImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead."
582
+ );
583
+ return this._defaultDayAlpha;
584
+ },
585
+ set: function (value) {
586
+ deprecationWarning(
587
+ "BingMapsImageryProvider.defaultDayAlpha",
588
+ "BingMapsImageryProvider.defaultDayAlpha was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.dayAlpha instead."
589
+ );
590
+ this._defaultDayAlpha = value;
591
+ },
592
+ },
593
+
594
+ /**
595
+ * The default brightness of this provider. 1.0 uses the unmodified imagery color. Less than 1.0
596
+ * makes the imagery darker while greater than 1.0 makes it brighter.
597
+ * @memberof BingMapsImageryProvider.prototype
598
+ * @type {Number|undefined}
599
+ * @deprecated
600
+ */
601
+ defaultBrightness: {
602
+ get: function () {
603
+ deprecationWarning(
604
+ "BingMapsImageryProvider.defaultBrightness",
605
+ "BingMapsImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.brightness instead."
606
+ );
607
+ return this._defaultBrightness;
608
+ },
609
+ set: function (value) {
610
+ deprecationWarning(
611
+ "BingMapsImageryProvider.defaultBrightness",
612
+ "BingMapsImageryProvider.defaultBrightness was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.brightness instead."
613
+ );
614
+ this._defaultBrightness = value;
615
+ },
616
+ },
617
+
618
+ /**
619
+ * The default contrast of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces
620
+ * the contrast while greater than 1.0 increases it.
621
+ * @memberof BingMapsImageryProvider.prototype
622
+ * @type {Number|undefined}
623
+ * @deprecated
624
+ */
625
+ defaultContrast: {
626
+ get: function () {
627
+ deprecationWarning(
628
+ "BingMapsImageryProvider.defaultContrast",
629
+ "BingMapsImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.contrast instead."
630
+ );
631
+ return this._defaultContrast;
632
+ },
633
+ set: function (value) {
634
+ deprecationWarning(
635
+ "BingMapsImageryProvider.defaultContrast",
636
+ "BingMapsImageryProvider.defaultContrast was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.contrast instead."
637
+ );
638
+ this._defaultContrast = value;
639
+ },
640
+ },
641
+
642
+ /**
643
+ * The default hue of this provider in radians. 0.0 uses the unmodified imagery color.
644
+ * @memberof BingMapsImageryProvider.prototype
645
+ * @type {Number|undefined}
646
+ * @deprecated
647
+ */
648
+ defaultHue: {
649
+ get: function () {
650
+ deprecationWarning(
651
+ "BingMapsImageryProvider.defaultHue",
652
+ "BingMapsImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.hue instead."
653
+ );
654
+ return this._defaultHue;
655
+ },
656
+ set: function (value) {
657
+ deprecationWarning(
658
+ "BingMapsImageryProvider.defaultHue",
659
+ "BingMapsImageryProvider.defaultHue was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.hue instead."
660
+ );
661
+ this._defaultHue = value;
662
+ },
663
+ },
664
+
665
+ /**
666
+ * The default saturation of this provider. 1.0 uses the unmodified imagery color. Less than 1.0 reduces the
667
+ * saturation while greater than 1.0 increases it.
668
+ * @memberof BingMapsImageryProvider.prototype
669
+ * @type {Number|undefined}
670
+ * @deprecated
671
+ */
672
+ defaultSaturation: {
673
+ get: function () {
674
+ deprecationWarning(
675
+ "BingMapsImageryProvider.defaultSaturation",
676
+ "BingMapsImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.saturation instead."
677
+ );
678
+ return this._defaultSaturation;
679
+ },
680
+ set: function (value) {
681
+ deprecationWarning(
682
+ "BingMapsImageryProvider.defaultSaturation",
683
+ "BingMapsImageryProvider.defaultSaturation was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.saturation instead."
684
+ );
685
+ this._defaultSaturation = value;
686
+ },
687
+ },
688
+
689
+ /**
690
+ * The default gamma correction to apply to this provider. 1.0 uses the unmodified imagery color.
691
+ * @memberof BingMapsImageryProvider.prototype
692
+ * @type {Number|undefined}
693
+ * @deprecated
694
+ */
695
+ defaultGamma: {
696
+ get: function () {
697
+ deprecationWarning(
698
+ "BingMapsImageryProvider.defaultGamma",
699
+ "BingMapsImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.gamma instead."
700
+ );
701
+ return this._defaultGamma;
702
+ },
703
+ set: function (value) {
704
+ deprecationWarning(
705
+ "BingMapsImageryProvider.defaultGamma",
706
+ "BingMapsImageryProvider.defaultGamma was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.gamma instead."
707
+ );
708
+ this._defaultGamma = value;
709
+ },
710
+ },
711
+
712
+ /**
713
+ * The default texture minification filter to apply to this provider.
714
+ * @memberof BingMapsImageryProvider.prototype
715
+ * @type {TextureMinificationFilter}
716
+ * @deprecated
717
+ */
718
+ defaultMinificationFilter: {
719
+ get: function () {
720
+ deprecationWarning(
721
+ "BingMapsImageryProvider.defaultMinificationFilter",
722
+ "BingMapsImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead."
723
+ );
724
+ return this._defaultMinificationFilter;
725
+ },
726
+ set: function (value) {
727
+ deprecationWarning(
728
+ "BingMapsImageryProvider.defaultMinificationFilter",
729
+ "BingMapsImageryProvider.defaultMinificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.minificationFilter instead."
730
+ );
731
+ this._defaultMinificationFilter = value;
732
+ },
733
+ },
734
+
735
+ /**
736
+ * The default texture magnification filter to apply to this provider.
737
+ * @memberof BingMapsImageryProvider.prototype
738
+ * @type {TextureMagnificationFilter}
739
+ * @deprecated
740
+ */
741
+ defaultMagnificationFilter: {
742
+ get: function () {
743
+ deprecationWarning(
744
+ "BingMapsImageryProvider.defaultMagnificationFilter",
745
+ "BingMapsImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead."
746
+ );
747
+ return this._defaultMagnificationFilter;
748
+ },
749
+ set: function (value) {
750
+ deprecationWarning(
751
+ "BingMapsImageryProvider.defaultMagnificationFilter",
752
+ "BingMapsImageryProvider.defaultMagnificationFilter was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ImageryLayer.magnificationFilter instead."
753
+ );
754
+ this._defaultMagnificationFilter = value;
755
+ },
756
+ },
592
757
  });
593
758
 
759
+ /**
760
+ * Creates an {@link ImageryProvider} which provides tiled imagery using the Bing Maps Imagery REST API.
761
+ *
762
+ * @param {Resource|String} url The url of the Bing Maps server hosting the imagery.
763
+ * @param {BingMapsImageryProvider.ConstructorOptions} options Object describing initialization options
764
+ * @returns {Promise<BingMapsImageryProvider>} A promise that resolves to the created BingMapsImageryProvider
765
+ *
766
+ * @example
767
+ * const bing = await Cesium.BingMapsImageryProvider.fromUrl(
768
+ * "https://dev.virtualearth.net", {
769
+ * key: "get-yours-at-https://www.bingmapsportal.com/",
770
+ * mapStyle: Cesium.BingMapsStyle.AERIAL
771
+ * });
772
+ *
773
+ * @exception {RuntimeError} metadata does not specify one resource in resourceSets
774
+ */
775
+ BingMapsImageryProvider.fromUrl = async function (url, options) {
776
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
777
+
778
+ //>>includeStart('debug', pragmas.debug);
779
+ Check.defined("url", url);
780
+ Check.defined("options.key", options.key);
781
+ //>>includeEnd('debug');
782
+
783
+ let tileProtocol = options.tileProtocol;
784
+
785
+ // For backward compatibility reasons, the tileProtocol may end with
786
+ // a `:`. Remove it.
787
+ if (defined(tileProtocol)) {
788
+ if (
789
+ tileProtocol.length > 0 &&
790
+ tileProtocol[tileProtocol.length - 1] === ":"
791
+ ) {
792
+ tileProtocol = tileProtocol.substr(0, tileProtocol.length - 1);
793
+ }
794
+ } else {
795
+ // use http if the document's protocol is http, otherwise use https
796
+ const documentProtocol = document.location.protocol;
797
+ tileProtocol = documentProtocol === "http:" ? "http" : "https";
798
+ }
799
+
800
+ const mapStyle = defaultValue(options.mapStyle, BingMapsStyle.AERIAL);
801
+ const resource = Resource.createIfNeeded(url);
802
+ resource.appendForwardSlash();
803
+ const metadataResource = resource.getDerivedResource({
804
+ url: `REST/v1/Imagery/Metadata/${mapStyle}`,
805
+ queryParameters: {
806
+ incl: "ImageryProviders",
807
+ key: options.key,
808
+ uriScheme: tileProtocol,
809
+ },
810
+ });
811
+
812
+ const provider = new BingMapsImageryProvider(options);
813
+ provider._resource = resource;
814
+ const imageryProviderBuilder = new ImageryProviderBuilder(options);
815
+ await requestMetadata(metadataResource, imageryProviderBuilder);
816
+ imageryProviderBuilder.build(provider);
817
+ provider._readyPromise = Promise.resolve(true);
818
+ return provider;
819
+ };
820
+
594
821
  const rectangleScratch = new Rectangle();
595
822
 
596
823
  /**
@@ -600,18 +827,8 @@ const rectangleScratch = new Rectangle();
600
827
  * @param {number} y The tile Y coordinate.
601
828
  * @param {number} level The tile level;
602
829
  * @returns {Credit[]} The credits to be displayed when the tile is displayed.
603
- *
604
- * @exception {DeveloperError} <code>getTileCredits</code> must not be called before the imagery provider is ready.
605
830
  */
606
831
  BingMapsImageryProvider.prototype.getTileCredits = function (x, y, level) {
607
- //>>includeStart('debug', pragmas.debug);
608
- if (!this._ready) {
609
- throw new DeveloperError(
610
- "getTileCredits must not be called before the imagery provider is ready."
611
- );
612
- }
613
- //>>includeEnd('debug');
614
-
615
832
  const rectangle = this._tilingScheme.tileXYToRectangle(
616
833
  x,
617
834
  y,
@@ -628,8 +845,7 @@ BingMapsImageryProvider.prototype.getTileCredits = function (x, y, level) {
628
845
  };
629
846
 
630
847
  /**
631
- * Requests the image for a given tile. This function should
632
- * not be called before {@link BingMapsImageryProvider#ready} returns true.
848
+ * Requests the image for a given tile.
633
849
  *
634
850
  * @param {number} x The tile X coordinate.
635
851
  * @param {number} y The tile Y coordinate.
@@ -637,8 +853,6 @@ BingMapsImageryProvider.prototype.getTileCredits = function (x, y, level) {
637
853
  * @param {Request} [request] The request object. Intended for internal use only.
638
854
  * @returns {Promise<ImageryTypes>|undefined} A promise for the image that will resolve when the image is available, or
639
855
  * undefined if there are too many active requests to the server, and the request should be retried later.
640
- *
641
- * @exception {DeveloperError} <code>requestImage</code> must not be called before the imagery provider is ready.
642
856
  */
643
857
  BingMapsImageryProvider.prototype.requestImage = function (
644
858
  x,
@@ -646,14 +860,6 @@ BingMapsImageryProvider.prototype.requestImage = function (
646
860
  level,
647
861
  request
648
862
  ) {
649
- //>>includeStart('debug', pragmas.debug);
650
- if (!this._ready) {
651
- throw new DeveloperError(
652
- "requestImage must not be called before the imagery provider is ready."
653
- );
654
- }
655
- //>>includeEnd('debug');
656
-
657
863
  const promise = ImageryProvider.loadImage(
658
864
  this,
659
865
  buildImageResource(this, x, y, level, request)