@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
@@ -1,8 +1,9 @@
1
1
  import Cartesian2 from "./Cartesian2.js";
2
+ import Check from "./Check.js";
2
3
  import Credit from "./Credit.js";
3
4
  import defaultValue from "./defaultValue.js";
4
5
  import defined from "./defined.js";
5
- import DeveloperError from "./DeveloperError.js";
6
+ import deprecationWarning from "./deprecationWarning.js";
6
7
  import Ellipsoid from "./Ellipsoid.js";
7
8
  import Event from "./Event.js";
8
9
  import GeographicTilingScheme from "./GeographicTilingScheme.js";
@@ -22,34 +23,220 @@ import WebMercatorTilingScheme from "./WebMercatorTilingScheme.js";
22
23
  const ALL_CHILDREN = 15;
23
24
 
24
25
  /**
26
+ * @typedef {Object} ArcGISTiledElevationTerrainProvider.ConstructorOptions
27
+ *
28
+ * Initialization options for the ArcGISTiledElevationTerrainProvider constructor
29
+ *
30
+ * @property {string} [token] The authorization token to use to connect to the service.
31
+ * @property {Ellipsoid} [ellipsoid] The ellipsoid. If the tilingScheme is specified,
32
+ * this parameter is ignored and the tiling scheme's ellipsoid is used instead.
33
+ * If neither parameter is specified, the WGS84 ellipsoid is used.
34
+ * @property {Resource|string|Promise<Resource>|Promise<string>} [url] The URL of the ArcGIS ImageServer service. Deprecated.
35
+ */
36
+
37
+ /**
38
+ * Used to track creation details while fetching initial metadata
39
+ *
40
+ * @constructor
41
+ * @private
42
+ *
43
+ * @param {ArcGISTiledElevationTerrainProvider.ConstructorOptions} [options] An object describing initialization options.
44
+ */
45
+ function TerrainProviderBuilder(options) {
46
+ this.ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);
47
+
48
+ this.credit = undefined;
49
+ this.tilingScheme = undefined;
50
+ this.height = undefined;
51
+ this.width = undefined;
52
+ this.encoding = undefined;
53
+ this.lodCount = undefined;
54
+ this.hasAvailability = false;
55
+ this.tilesAvailable = undefined;
56
+ this.tilesAvailabilityLoaded = undefined;
57
+ this.levelZeroMaximumGeometricError = undefined;
58
+ this.terrainDataStructure = undefined;
59
+ }
60
+
61
+ /**
62
+ * Complete ArcGISTiledElevationTerrainProvider creation based on builder values.
63
+ *
64
+ * @private
65
+ *
66
+ * @param {ArcGISTiledElevationTerrainProvider} provider
67
+ */
68
+ TerrainProviderBuilder.prototype.build = function (provider) {
69
+ provider._credit = this.credit;
70
+ provider._tilingScheme = this.tilingScheme;
71
+ provider._height = this.height;
72
+ provider._width = this.width;
73
+ provider._encoding = this.encoding;
74
+ provider._lodCount = this.lodCount;
75
+ provider._hasAvailability = this.hasAvailability;
76
+ provider._tilesAvailable = this.tilesAvailable;
77
+ provider._tilesAvailabilityLoaded = this.tilesAvailabilityLoaded;
78
+ provider._levelZeroMaximumGeometricError = this.levelZeroMaximumGeometricError;
79
+ provider._terrainDataStructure = this.terrainDataStructure;
80
+
81
+ provider._ready = true;
82
+ };
83
+
84
+ function parseMetadataSuccess(terrainProviderBuilder, metadata) {
85
+ const copyrightText = metadata.copyrightText;
86
+ if (defined(copyrightText)) {
87
+ terrainProviderBuilder.credit = new Credit(copyrightText);
88
+ }
89
+
90
+ const spatialReference = metadata.spatialReference;
91
+ const wkid = defaultValue(spatialReference.latestWkid, spatialReference.wkid);
92
+ const extent = metadata.extent;
93
+ const tilingSchemeOptions = {
94
+ ellipsoid: terrainProviderBuilder.ellipsoid,
95
+ };
96
+ if (wkid === 4326) {
97
+ tilingSchemeOptions.rectangle = Rectangle.fromDegrees(
98
+ extent.xmin,
99
+ extent.ymin,
100
+ extent.xmax,
101
+ extent.ymax
102
+ );
103
+ terrainProviderBuilder.tilingScheme = new GeographicTilingScheme(
104
+ tilingSchemeOptions
105
+ );
106
+ } else if (wkid === 3857) {
107
+ // Clamp extent to EPSG 3857 bounds
108
+ const epsg3857Bounds =
109
+ Math.PI * terrainProviderBuilder.ellipsoid.maximumRadius;
110
+ if (metadata.extent.xmax > epsg3857Bounds) {
111
+ metadata.extent.xmax = epsg3857Bounds;
112
+ }
113
+ if (metadata.extent.ymax > epsg3857Bounds) {
114
+ metadata.extent.ymax = epsg3857Bounds;
115
+ }
116
+ if (metadata.extent.xmin < -epsg3857Bounds) {
117
+ metadata.extent.xmin = -epsg3857Bounds;
118
+ }
119
+ if (metadata.extent.ymin < -epsg3857Bounds) {
120
+ metadata.extent.ymin = -epsg3857Bounds;
121
+ }
122
+
123
+ tilingSchemeOptions.rectangleSouthwestInMeters = new Cartesian2(
124
+ extent.xmin,
125
+ extent.ymin
126
+ );
127
+ tilingSchemeOptions.rectangleNortheastInMeters = new Cartesian2(
128
+ extent.xmax,
129
+ extent.ymax
130
+ );
131
+ terrainProviderBuilder.tilingScheme = new WebMercatorTilingScheme(
132
+ tilingSchemeOptions
133
+ );
134
+ } else {
135
+ throw new RuntimeError("Invalid spatial reference");
136
+ }
137
+
138
+ const tileInfo = metadata.tileInfo;
139
+ if (!defined(tileInfo)) {
140
+ throw new RuntimeError("tileInfo is required");
141
+ }
142
+
143
+ terrainProviderBuilder.width = tileInfo.rows + 1;
144
+ terrainProviderBuilder.height = tileInfo.cols + 1;
145
+ terrainProviderBuilder.encoding =
146
+ tileInfo.format === "LERC"
147
+ ? HeightmapEncoding.LERC
148
+ : HeightmapEncoding.NONE;
149
+ terrainProviderBuilder.lodCount = tileInfo.lods.length - 1;
150
+
151
+ const hasAvailability = (terrainProviderBuilder.hasAvailability =
152
+ metadata.capabilities.indexOf("Tilemap") !== -1);
153
+ if (hasAvailability) {
154
+ terrainProviderBuilder.tilesAvailable = new TileAvailability(
155
+ terrainProviderBuilder.tilingScheme,
156
+ terrainProviderBuilder.lodCount
157
+ );
158
+ terrainProviderBuilder.tilesAvailable.addAvailableTileRange(
159
+ 0,
160
+ 0,
161
+ 0,
162
+ terrainProviderBuilder.tilingScheme.getNumberOfXTilesAtLevel(0),
163
+ terrainProviderBuilder.tilingScheme.getNumberOfYTilesAtLevel(0)
164
+ );
165
+ terrainProviderBuilder.tilesAvailabilityLoaded = new TileAvailability(
166
+ terrainProviderBuilder.tilingScheme,
167
+ terrainProviderBuilder.lodCount
168
+ );
169
+ }
170
+
171
+ terrainProviderBuilder.levelZeroMaximumGeometricError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(
172
+ terrainProviderBuilder.tilingScheme.ellipsoid,
173
+ terrainProviderBuilder.width,
174
+ terrainProviderBuilder.tilingScheme.getNumberOfXTilesAtLevel(0)
175
+ );
176
+
177
+ if (metadata.bandCount > 1) {
178
+ console.log(
179
+ "ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one."
180
+ );
181
+ }
182
+
183
+ if (defined(metadata.minValues) && defined(metadata.maxValues)) {
184
+ terrainProviderBuilder.terrainDataStructure = {
185
+ elementMultiplier: 1.0,
186
+ lowestEncodedHeight: metadata.minValues[0],
187
+ highestEncodedHeight: metadata.maxValues[0],
188
+ };
189
+ } else {
190
+ terrainProviderBuilder.terrainDataStructure = {
191
+ elementMultiplier: 1.0,
192
+ };
193
+ }
194
+ }
195
+
196
+ async function requestMetadata(
197
+ terrainProviderBuilder,
198
+ metadataResource,
199
+ provider
200
+ ) {
201
+ try {
202
+ const metadata = await metadataResource.fetchJson();
203
+ parseMetadataSuccess(terrainProviderBuilder, metadata);
204
+ } catch (error) {
205
+ const message = `An error occurred while accessing ${metadataResource}.`;
206
+ TileProviderError.reportError(
207
+ undefined,
208
+ provider,
209
+ defined(provider) ? provider._errorEvent : undefined,
210
+ message
211
+ );
212
+
213
+ throw error;
214
+ }
215
+ }
216
+
217
+ /**
218
+ * <div class="notice">
219
+ * To construct a CesiumTerrainProvider, call {@link ArcGISTiledElevationTerrainProvider.fromUrl}. Do not call the constructor directly.
220
+ * </div>
221
+ *
25
222
  * A {@link TerrainProvider} that produces terrain geometry by tessellating height maps
26
223
  * retrieved from Elevation Tiles of an an ArcGIS ImageService.
27
224
  *
28
225
  * @alias ArcGISTiledElevationTerrainProvider
29
226
  * @constructor
30
227
  *
31
- * @param {object} options Object with the following properties:
32
- * @param {Resource|string|Promise<Resource>|Promise<string>} options.url The URL of the ArcGIS ImageServer service.
33
- * @param {string} [options.token] The authorization token to use to connect to the service.
34
- * @param {Ellipsoid} [options.ellipsoid] The ellipsoid. If the tilingScheme is specified,
35
- * this parameter is ignored and the tiling scheme's ellipsoid is used instead.
36
- * If neither parameter is specified, the WGS84 ellipsoid is used.
228
+ * @param {CesiumTerrainProvider.ConstructorOptions} [options] A url or an object describing initialization options
37
229
  *
38
230
  * @example
39
- * const terrainProvider = new Cesium.ArcGISTiledElevationTerrainProvider({
40
- * url : 'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',
41
- * token : 'KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg..'
231
+ * const terrainProvider = await Cesium.ArcGISTiledElevationTerrainProvider.fromUrl("https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer", {
232
+ * token: "KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg.."
42
233
  * });
43
234
  * viewer.terrainProvider = terrainProvider;
44
235
  *
45
- * @see TerrainProvider
236
+ * @see TerrainProvider
46
237
  */
47
238
  function ArcGISTiledElevationTerrainProvider(options) {
48
- //>>includeStart('debug', pragmas.debug);
49
- if (!defined(options) || !defined(options.url)) {
50
- throw new DeveloperError("options.url is required.");
51
- }
52
- //>>includeEnd('debug');
239
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
53
240
 
54
241
  this._resource = undefined;
55
242
  this._credit = undefined;
@@ -57,21 +244,31 @@ function ArcGISTiledElevationTerrainProvider(options) {
57
244
  this._levelZeroMaximumGeometricError = undefined;
58
245
  this._maxLevel = undefined;
59
246
  this._terrainDataStructure = undefined;
60
- this._ready = false;
61
247
  this._width = undefined;
62
248
  this._height = undefined;
63
249
  this._encoding = undefined;
250
+ this._lodCount = undefined;
64
251
  const token = options.token;
65
252
 
66
253
  this._hasAvailability = false;
67
254
  this._tilesAvailable = undefined;
68
- this._tilesAvailablityLoaded = undefined;
255
+ this._tilesAvailabilityLoaded = undefined;
69
256
  this._availableCache = {};
257
+ this._ready = false;
70
258
 
71
- const that = this;
72
- const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);
73
- this._readyPromise = Promise.resolve(options.url)
74
- .then(function (url) {
259
+ this._errorEvent = new Event();
260
+
261
+ if (defined(options.url)) {
262
+ deprecationWarning(
263
+ "ArcGISTiledElevationTerrainProvider options.url",
264
+ "options.url was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ArcGISTiledElevationTerrainProvider.fromUrl instead."
265
+ );
266
+
267
+ const that = this;
268
+ const terrainProviderBuilder = new TerrainProviderBuilder(options);
269
+ this._readyPromise = Promise.resolve(options.url).then(async function (
270
+ url
271
+ ) {
75
272
  let resource = Resource.createIfNeeded(url);
76
273
  resource.appendForwardSlash();
77
274
  if (defined(token)) {
@@ -89,128 +286,12 @@ function ArcGISTiledElevationTerrainProvider(options) {
89
286
  },
90
287
  });
91
288
 
92
- return metadataResource.fetchJson();
93
- })
94
- .then(function (metadata) {
95
- const copyrightText = metadata.copyrightText;
96
- if (defined(copyrightText)) {
97
- that._credit = new Credit(copyrightText);
98
- }
99
-
100
- const spatialReference = metadata.spatialReference;
101
- const wkid = defaultValue(
102
- spatialReference.latestWkid,
103
- spatialReference.wkid
104
- );
105
- const extent = metadata.extent;
106
- const tilingSchemeOptions = {
107
- ellipsoid: ellipsoid,
108
- };
109
- if (wkid === 4326) {
110
- tilingSchemeOptions.rectangle = Rectangle.fromDegrees(
111
- extent.xmin,
112
- extent.ymin,
113
- extent.xmax,
114
- extent.ymax
115
- );
116
- that._tilingScheme = new GeographicTilingScheme(tilingSchemeOptions);
117
- } else if (wkid === 3857) {
118
- // Clamp extent to EPSG 3857 bounds
119
- const epsg3857Bounds = Math.PI * ellipsoid.maximumRadius;
120
- if (metadata.extent.xmax > epsg3857Bounds) {
121
- metadata.extent.xmax = epsg3857Bounds;
122
- }
123
- if (metadata.extent.ymax > epsg3857Bounds) {
124
- metadata.extent.ymax = epsg3857Bounds;
125
- }
126
- if (metadata.extent.xmin < -epsg3857Bounds) {
127
- metadata.extent.xmin = -epsg3857Bounds;
128
- }
129
- if (metadata.extent.ymin < -epsg3857Bounds) {
130
- metadata.extent.ymin = -epsg3857Bounds;
131
- }
132
-
133
- tilingSchemeOptions.rectangleSouthwestInMeters = new Cartesian2(
134
- extent.xmin,
135
- extent.ymin
136
- );
137
- tilingSchemeOptions.rectangleNortheastInMeters = new Cartesian2(
138
- extent.xmax,
139
- extent.ymax
140
- );
141
- that._tilingScheme = new WebMercatorTilingScheme(tilingSchemeOptions);
142
- } else {
143
- return Promise.reject(new RuntimeError("Invalid spatial reference"));
144
- }
145
-
146
- const tileInfo = metadata.tileInfo;
147
- if (!defined(tileInfo)) {
148
- return Promise.reject(new RuntimeError("tileInfo is required"));
149
- }
150
-
151
- that._width = tileInfo.rows + 1;
152
- that._height = tileInfo.cols + 1;
153
- that._encoding =
154
- tileInfo.format === "LERC"
155
- ? HeightmapEncoding.LERC
156
- : HeightmapEncoding.NONE;
157
- that._lodCount = tileInfo.lods.length - 1;
158
-
159
- const hasAvailability = (that._hasAvailability =
160
- metadata.capabilities.indexOf("Tilemap") !== -1);
161
- if (hasAvailability) {
162
- that._tilesAvailable = new TileAvailability(
163
- that._tilingScheme,
164
- that._lodCount
165
- );
166
- that._tilesAvailable.addAvailableTileRange(
167
- 0,
168
- 0,
169
- 0,
170
- that._tilingScheme.getNumberOfXTilesAtLevel(0),
171
- that._tilingScheme.getNumberOfYTilesAtLevel(0)
172
- );
173
- that._tilesAvailablityLoaded = new TileAvailability(
174
- that._tilingScheme,
175
- that._lodCount
176
- );
177
- }
178
-
179
- that._levelZeroMaximumGeometricError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(
180
- that._tilingScheme.ellipsoid,
181
- that._width,
182
- that._tilingScheme.getNumberOfXTilesAtLevel(0)
183
- );
184
-
185
- if (metadata.bandCount > 1) {
186
- console.log(
187
- "ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one."
188
- );
189
- }
190
-
191
- if (defined(metadata.minValues) && defined(metadata.maxValues)) {
192
- that._terrainDataStructure = {
193
- elementMultiplier: 1.0,
194
- lowestEncodedHeight: metadata.minValues[0],
195
- highestEncodedHeight: metadata.maxValues[0],
196
- };
197
- } else {
198
- that._terrainDataStructure = {
199
- elementMultiplier: 1.0,
200
- };
201
- }
202
-
203
- that._ready = true;
289
+ await requestMetadata(terrainProviderBuilder, metadataResource, that);
290
+ terrainProviderBuilder.build(that);
204
291
 
205
292
  return true;
206
- })
207
- .catch(function (error) {
208
- const message = `An error occurred while accessing ${that._resource.url}.`;
209
- TileProviderError.reportError(undefined, that, that._errorEvent, message);
210
- return Promise.reject(error);
211
293
  });
212
-
213
- this._errorEvent = new Event();
294
+ }
214
295
  }
215
296
 
216
297
  Object.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {
@@ -230,40 +311,25 @@ Object.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {
230
311
 
231
312
  /**
232
313
  * Gets the credit to display when this terrain provider is active. Typically this is used to credit
233
- * the source of the terrain. This function should not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true.
314
+ * the source of the terrain.
234
315
  * @memberof ArcGISTiledElevationTerrainProvider.prototype
235
316
  * @type {Credit}
236
317
  * @readonly
237
318
  */
238
319
  credit: {
239
320
  get: function () {
240
- //>>includeStart('debug', pragmas.debug);
241
- if (!this.ready) {
242
- throw new DeveloperError(
243
- "credit must not be called before ready returns true."
244
- );
245
- }
246
- //>>includeEnd('debug');
247
321
  return this._credit;
248
322
  },
249
323
  },
250
324
 
251
325
  /**
252
- * Gets the tiling scheme used by this provider. This function should
253
- * not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true.
326
+ * Gets the tiling scheme used by this provider.
254
327
  * @memberof ArcGISTiledElevationTerrainProvider.prototype
255
328
  * @type {GeographicTilingScheme}
256
329
  * @readonly
257
330
  */
258
331
  tilingScheme: {
259
332
  get: function () {
260
- //>>includeStart('debug', pragmas.debug);
261
- if (!this.ready) {
262
- throw new DeveloperError(
263
- "tilingScheme must not be called before ready returns true."
264
- );
265
- }
266
- //>>includeEnd('debug');
267
333
  return this._tilingScheme;
268
334
  },
269
335
  },
@@ -273,9 +339,14 @@ Object.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {
273
339
  * @memberof ArcGISTiledElevationTerrainProvider.prototype
274
340
  * @type {boolean}
275
341
  * @readonly
342
+ * @deprecated
276
343
  */
277
344
  ready: {
278
345
  get: function () {
346
+ deprecationWarning(
347
+ "ArcGISTiledElevationTerrainProvider.ready",
348
+ "ArcGISTiledElevationTerrainProvider.ready was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ArcGISTiledElevationTerrainProvider.fromUrl instead."
349
+ );
279
350
  return this._ready;
280
351
  },
281
352
  },
@@ -285,9 +356,14 @@ Object.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {
285
356
  * @memberof ArcGISTiledElevationTerrainProvider.prototype
286
357
  * @type {Promise<boolean>}
287
358
  * @readonly
359
+ * @deprecated
288
360
  */
289
361
  readyPromise: {
290
362
  get: function () {
363
+ deprecationWarning(
364
+ "ArcGISTiledElevationTerrainProvider.readyPromise",
365
+ "ArcGISTiledElevationTerrainProvider.readyPromise was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use ArcGISTiledElevationTerrainProvider.fromUrl instead."
366
+ );
291
367
  return this._readyPromise;
292
368
  },
293
369
  },
@@ -295,8 +371,7 @@ Object.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {
295
371
  /**
296
372
  * Gets a value indicating whether or not the provider includes a water mask. The water mask
297
373
  * indicates which areas of the globe are water rather than land, so they can be rendered
298
- * as a reflective surface with animated waves. This function should not be
299
- * called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true.
374
+ * as a reflective surface with animated waves.
300
375
  * @memberof ArcGISTiledElevationTerrainProvider.prototype
301
376
  * @type {boolean}
302
377
  * @readonly
@@ -309,7 +384,6 @@ Object.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {
309
384
 
310
385
  /**
311
386
  * Gets a value indicating whether or not the requested tiles include vertex normals.
312
- * This function should not be called before {@link ArcGISTiledElevationTerrainProvider#ready} returns true.
313
387
  * @memberof ArcGISTiledElevationTerrainProvider.prototype
314
388
  * @type {boolean}
315
389
  * @readonly
@@ -321,8 +395,7 @@ Object.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {
321
395
  },
322
396
  /**
323
397
  * Gets an object that can be used to determine availability of terrain from this provider, such as
324
- * at points and in rectangles. This function should not be called before
325
- * {@link TerrainProvider#ready} returns true. This property may be undefined if availability
398
+ * at points and in rectangles. This property may be undefined if availability
326
399
  * information is not available.
327
400
  * @memberof ArcGISTiledElevationTerrainProvider.prototype
328
401
  * @type {TileAvailability}
@@ -330,21 +403,64 @@ Object.defineProperties(ArcGISTiledElevationTerrainProvider.prototype, {
330
403
  */
331
404
  availability: {
332
405
  get: function () {
333
- //>>includeStart('debug', pragmas.debug)
334
- if (!this._ready) {
335
- throw new DeveloperError(
336
- "availability must not be called before the terrain provider is ready."
337
- );
338
- }
339
- //>>includeEnd('debug');
340
406
  return this._tilesAvailable;
341
407
  },
342
408
  },
343
409
  });
344
410
 
345
411
  /**
346
- * Requests the geometry for a given tile. This function should not be called before
347
- * {@link ArcGISTiledElevationTerrainProvider#ready} returns true. The result includes terrain
412
+ * Creates a {@link TerrainProvider} that produces terrain geometry by tessellating height maps
413
+ * retrieved from Elevation Tiles of an an ArcGIS ImageService.
414
+ *
415
+ * @param {Resource|String|Promise<Resource>|Promise<String>} url The URL of the ArcGIS ImageServer service.
416
+ * @param {ArcGISTiledElevationTerrainProvider.ConstructorOptions} [options] A url or an object describing initialization options.
417
+ * @returns {Promise<ArcGISTiledElevationTerrainProvider>}
418
+ *
419
+ * @example
420
+ * const terrainProvider = await Cesium.ArcGISTiledElevationTerrainProvider.fromUrl("https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer", {
421
+ * token: "KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg.."
422
+ * });
423
+ * viewer.terrainProvider = terrainProvider;
424
+ *
425
+ * @exception {RuntimeError} metadata specifies invalid spatial reference
426
+ * @exception {RuntimeError} metadata does not specify tileInfo
427
+ */
428
+ ArcGISTiledElevationTerrainProvider.fromUrl = async function (url, options) {
429
+ //>>includeStart('debug', pragmas.debug);
430
+ Check.defined("url", url);
431
+ //>>includeEnd('debug');
432
+
433
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
434
+
435
+ url = await Promise.resolve(url);
436
+ let resource = Resource.createIfNeeded(url);
437
+ resource.appendForwardSlash();
438
+ if (defined(options.token)) {
439
+ resource = resource.getDerivedResource({
440
+ queryParameters: {
441
+ token: options.token,
442
+ },
443
+ });
444
+ }
445
+
446
+ const metadataResource = resource.getDerivedResource({
447
+ queryParameters: {
448
+ f: "pjson",
449
+ },
450
+ });
451
+
452
+ const terrainProviderBuilder = new TerrainProviderBuilder(options);
453
+ await requestMetadata(terrainProviderBuilder, metadataResource);
454
+
455
+ const provider = new ArcGISTiledElevationTerrainProvider(options);
456
+ terrainProviderBuilder.build(provider);
457
+ provider._resource = resource;
458
+
459
+ return provider;
460
+ };
461
+
462
+ /**
463
+ * Requests the geometry for a given tile. The result includes terrain
348
464
  * data and indicates that all child tiles are available.
349
465
  *
350
466
  * @param {number} x The X coordinate of the tile for which to request geometry.
@@ -361,14 +477,6 @@ ArcGISTiledElevationTerrainProvider.prototype.requestTileGeometry = function (
361
477
  level,
362
478
  request
363
479
  ) {
364
- //>>includeStart('debug', pragmas.debug)
365
- if (!this._ready) {
366
- throw new DeveloperError(
367
- "requestTileGeometry must not be called before the terrain provider is ready."
368
- );
369
- }
370
- //>>includeEnd('debug');
371
-
372
480
  const tileResource = this._resource.getDerivedResource({
373
481
  url: `tile/${level}/${y}/${x}`,
374
482
  request: request,
@@ -436,7 +544,7 @@ function isTileAvailable(that, level, x, y) {
436
544
  return undefined;
437
545
  }
438
546
 
439
- const tilesAvailablityLoaded = that._tilesAvailablityLoaded;
547
+ const tilesAvailabilityLoaded = that._tilesAvailabilityLoaded;
440
548
  const tilesAvailable = that._tilesAvailable;
441
549
 
442
550
  if (level > that._lodCount) {
@@ -449,7 +557,7 @@ function isTileAvailable(that, level, x, y) {
449
557
  }
450
558
 
451
559
  // or to not be available
452
- if (tilesAvailablityLoaded.isTileAvailable(level, x, y)) {
560
+ if (tilesAvailabilityLoaded.isTileAvailable(level, x, y)) {
453
561
  return false;
454
562
  }
455
563
 
@@ -465,14 +573,6 @@ function isTileAvailable(that, level, x, y) {
465
573
  ArcGISTiledElevationTerrainProvider.prototype.getLevelMaximumGeometricError = function (
466
574
  level
467
575
  ) {
468
- //>>includeStart('debug', pragmas.debug);
469
- if (!this.ready) {
470
- throw new DeveloperError(
471
- "getLevelMaximumGeometricError must not be called before ready returns true."
472
- );
473
- }
474
- //>>includeEnd('debug');
475
-
476
576
  return this._levelZeroMaximumGeometricError / (1 << level);
477
577
  };
478
578
 
@@ -685,7 +785,7 @@ function requestAvailability(that, level, x, y) {
685
785
  );
686
786
 
687
787
  // Mark whole area as having availability loaded
688
- that._tilesAvailablityLoaded.addAvailableTileRange(
788
+ that._tilesAvailabilityLoaded.addAvailableTileRange(
689
789
  level,
690
790
  xOffset,
691
791
  yOffset,
@@ -1,4 +1,5 @@
1
1
  import Check from "./Check.js";
2
+ import Credit from "./Credit.js";
2
3
  import defaultValue from "./defaultValue.js";
3
4
  import Rectangle from "./Rectangle.js";
4
5
  import Resource from "./Resource.js";
@@ -39,6 +40,11 @@ function BingMapsGeocoderService(options) {
39
40
  url: url,
40
41
  queryParameters: queryParameters,
41
42
  });
43
+
44
+ this._credit = new Credit(
45
+ `<img src="http:\/\/dev.virtualearth.net\/Branding\/logo_powered_by.png"\/>`,
46
+ false
47
+ );
42
48
  }
43
49
 
44
50
  Object.defineProperties(BingMapsGeocoderService.prototype, {
@@ -65,6 +71,18 @@ Object.defineProperties(BingMapsGeocoderService.prototype, {
65
71
  return this._key;
66
72
  },
67
73
  },
74
+ /**
75
+ * Gets the credit to display after a geocode is performed. Typically this is used to credit
76
+ * the geocoder service.
77
+ * @memberof BingMapsGeocoderService.prototype
78
+ * @type {Credit|undefined}
79
+ * @readonly
80
+ */
81
+ credit: {
82
+ get: function () {
83
+ return this._credit;
84
+ },
85
+ },
68
86
  });
69
87
 
70
88
  /**
@@ -73,7 +91,7 @@ Object.defineProperties(BingMapsGeocoderService.prototype, {
73
91
  * @param {string} query The query to be sent to the geocoder service
74
92
  * @returns {Promise<GeocoderService.Result[]>}
75
93
  */
76
- BingMapsGeocoderService.prototype.geocode = function (query) {
94
+ BingMapsGeocoderService.prototype.geocode = async function (query) {
77
95
  //>>includeStart('debug', pragmas.debug);
78
96
  Check.typeOf.string("query", query);
79
97
  //>>includeEnd('debug');