@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,7 +1,8 @@
1
+ import Check from "./Check.js";
1
2
  import Credit from "./Credit.js";
2
3
  import defaultValue from "./defaultValue.js";
3
4
  import defined from "./defined.js";
4
- import DeveloperError from "./DeveloperError.js";
5
+ import deprecationWarning from "./deprecationWarning.js";
5
6
  import Ellipsoid from "./Ellipsoid.js";
6
7
  import Event from "./Event.js";
7
8
  import GeographicTilingScheme from "./GeographicTilingScheme.js";
@@ -20,38 +21,143 @@ function DataRectangle(rectangle, maxLevel) {
20
21
  }
21
22
 
22
23
  /**
24
+ * @typedef {Object} VRTheWorldTerrainProvider.ConstructorOptions
25
+ *
26
+ * Initialization options for the VRTheWorldTerrainProvider constructor
27
+ *
28
+ * @property {Ellipsoid} [ellipsoid] The ellipsoid. If not specified, the WGS84 ellipsoid is used.
29
+ * @property {Credit|string} [credit] A credit for the data source, which is displayed on the canvas.
30
+ * @property {Resource|string} [url] The URL of the VR-TheWorld TileMap. Deprecated.
31
+ */
32
+
33
+ /**
34
+ * Used to track creation details while fetching initial metadata
35
+ *
36
+ * @constructor
37
+ * @private
38
+ *
39
+ * @param {VRTheWorldTerrainProvider.ConstructorOptions} options An object describing initialization options
40
+ */
41
+ function TerrainProviderBuilder(options) {
42
+ this.ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);
43
+ this.tilingScheme = undefined;
44
+ this.heightmapWidth = undefined;
45
+ this.heightmapHeight = undefined;
46
+ this.levelZeroMaximumGeometricError = undefined;
47
+ this.rectangles = [];
48
+ }
49
+
50
+ TerrainProviderBuilder.prototype.build = function (provider) {
51
+ provider._tilingScheme = this.tilingScheme;
52
+ provider._heightmapWidth = this.heightmapWidth;
53
+ provider._heightmapHeight = this.heightmapHeight;
54
+ provider._levelZeroMaximumGeometricError = this.levelZeroMaximumGeometricError;
55
+ provider._rectangles = this.rectangles;
56
+ provider._ready = true;
57
+ };
58
+
59
+ function metadataSuccess(terrainProviderBuilder, xml) {
60
+ const srs = xml.getElementsByTagName("SRS")[0].textContent;
61
+ if (srs === "EPSG:4326") {
62
+ terrainProviderBuilder.tilingScheme = new GeographicTilingScheme({
63
+ ellipsoid: terrainProviderBuilder.ellipsoid,
64
+ });
65
+ } else {
66
+ throw new RuntimeError(`SRS ${srs} is not supported`);
67
+ }
68
+
69
+ const tileFormat = xml.getElementsByTagName("TileFormat")[0];
70
+ terrainProviderBuilder.heightmapWidth = parseInt(
71
+ tileFormat.getAttribute("width"),
72
+ 10
73
+ );
74
+ terrainProviderBuilder.heightmapHeight = parseInt(
75
+ tileFormat.getAttribute("height"),
76
+ 10
77
+ );
78
+ terrainProviderBuilder.levelZeroMaximumGeometricError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(
79
+ terrainProviderBuilder.ellipsoid,
80
+ Math.min(
81
+ terrainProviderBuilder.heightmapWidth,
82
+ terrainProviderBuilder.heightmapHeight
83
+ ),
84
+ terrainProviderBuilder.tilingScheme.getNumberOfXTilesAtLevel(0)
85
+ );
86
+
87
+ const dataRectangles = xml.getElementsByTagName("DataExtent");
88
+
89
+ for (let i = 0; i < dataRectangles.length; ++i) {
90
+ const dataRectangle = dataRectangles[i];
91
+
92
+ const west = CesiumMath.toRadians(
93
+ parseFloat(dataRectangle.getAttribute("minx"))
94
+ );
95
+ const south = CesiumMath.toRadians(
96
+ parseFloat(dataRectangle.getAttribute("miny"))
97
+ );
98
+ const east = CesiumMath.toRadians(
99
+ parseFloat(dataRectangle.getAttribute("maxx"))
100
+ );
101
+ const north = CesiumMath.toRadians(
102
+ parseFloat(dataRectangle.getAttribute("maxy"))
103
+ );
104
+ const maxLevel = parseInt(dataRectangle.getAttribute("maxlevel"), 10);
105
+
106
+ terrainProviderBuilder.rectangles.push(
107
+ new DataRectangle(new Rectangle(west, south, east, north), maxLevel)
108
+ );
109
+ }
110
+ }
111
+
112
+ function metadataFailure(resource, error, provider) {
113
+ let message = `An error occurred while accessing ${resource.url}`;
114
+
115
+ if (defined(error) && defined(error.message)) {
116
+ message = `${message}: ${error.message}`;
117
+ }
118
+
119
+ TileProviderError.reportError(
120
+ undefined,
121
+ provider,
122
+ defined(provider) ? provider._errorEvent : undefined,
123
+ message
124
+ );
125
+
126
+ throw new RuntimeError(message);
127
+ }
128
+
129
+ async function requestMetadata(terrainProviderBuilder, resource, provider) {
130
+ try {
131
+ const xml = await resource.fetchXML();
132
+ metadataSuccess(terrainProviderBuilder, xml);
133
+ } catch (error) {
134
+ metadataFailure(resource, error, provider);
135
+ }
136
+ }
137
+
138
+ /**
139
+ * <div class="notice">
140
+ * To construct a VRTheWorldTerrainProvider, call {@link VRTheWorldTerrainProvider.fromUrl}. Do not call the constructor directly.
141
+ * </div>
142
+ *
23
143
  * A {@link TerrainProvider} that produces terrain geometry by tessellating height maps
24
144
  * retrieved from a {@link http://vr-theworld.com/|VT MÄK VR-TheWorld server}.
25
145
  *
26
146
  * @alias VRTheWorldTerrainProvider
27
147
  * @constructor
28
148
  *
29
- * @param {object} options Object with the following properties:
30
- * @param {Resource|string} options.url The URL of the VR-TheWorld TileMap.
31
- * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid. If this parameter is not
32
- * specified, the WGS84 ellipsoid is used.
33
- * @param {Credit|string} [options.credit] A credit for the data source, which is displayed on the canvas.
34
- *
149
+ * @param {VRTheWorldTerrainProvider.ConstructorOptions} [options] An object describing initialization options.
35
150
  *
36
151
  * @example
37
- * const terrainProvider = new Cesium.VRTheWorldTerrainProvider({
38
- * url : 'https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/'
39
- * });
152
+ * const terrainProvider = await Cesium.VRTheWorldTerrainProvider.fromUrl(
153
+ * "https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/"
154
+ * );
40
155
  * viewer.terrainProvider = terrainProvider;
41
156
  *
42
157
  * @see TerrainProvider
43
158
  */
44
159
  function VRTheWorldTerrainProvider(options) {
45
160
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
46
- //>>includeStart('debug', pragmas.debug);
47
- if (!defined(options.url)) {
48
- throw new DeveloperError("options.url is required.");
49
- }
50
- //>>includeEnd('debug');
51
-
52
- const resource = Resource.createIfNeeded(options.url);
53
-
54
- this._resource = resource;
55
161
 
56
162
  this._errorEvent = new Event();
57
163
  this._ready = false;
@@ -76,80 +182,26 @@ function VRTheWorldTerrainProvider(options) {
76
182
  this._tilingScheme = undefined;
77
183
  this._rectangles = [];
78
184
 
79
- const that = this;
80
- let metadataError;
81
- const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);
82
-
83
- function metadataSuccess(xml) {
84
- const srs = xml.getElementsByTagName("SRS")[0].textContent;
85
- if (srs === "EPSG:4326") {
86
- that._tilingScheme = new GeographicTilingScheme({ ellipsoid: ellipsoid });
87
- } else {
88
- return Promise.reject(new RuntimeError(`SRS ${srs} is not supported.`));
89
- }
90
-
91
- const tileFormat = xml.getElementsByTagName("TileFormat")[0];
92
- that._heightmapWidth = parseInt(tileFormat.getAttribute("width"), 10);
93
- that._heightmapHeight = parseInt(tileFormat.getAttribute("height"), 10);
94
- that._levelZeroMaximumGeometricError = TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap(
95
- ellipsoid,
96
- Math.min(that._heightmapWidth, that._heightmapHeight),
97
- that._tilingScheme.getNumberOfXTilesAtLevel(0)
185
+ if (defined(options.url)) {
186
+ deprecationWarning(
187
+ "VRTheWorldTerrainProvider options.url",
188
+ "options.url was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. VRTheWorldTerrainProvider.fromUrl instead."
98
189
  );
99
-
100
- const dataRectangles = xml.getElementsByTagName("DataExtent");
101
-
102
- for (let i = 0; i < dataRectangles.length; ++i) {
103
- const dataRectangle = dataRectangles[i];
104
-
105
- const west = CesiumMath.toRadians(
106
- parseFloat(dataRectangle.getAttribute("minx"))
107
- );
108
- const south = CesiumMath.toRadians(
109
- parseFloat(dataRectangle.getAttribute("miny"))
110
- );
111
- const east = CesiumMath.toRadians(
112
- parseFloat(dataRectangle.getAttribute("maxx"))
113
- );
114
- const north = CesiumMath.toRadians(
115
- parseFloat(dataRectangle.getAttribute("maxy"))
116
- );
117
- const maxLevel = parseInt(dataRectangle.getAttribute("maxlevel"), 10);
118
-
119
- that._rectangles.push(
120
- new DataRectangle(new Rectangle(west, south, east, north), maxLevel)
121
- );
122
- }
123
-
124
- that._ready = true;
125
- return Promise.resolve(true);
126
- }
127
-
128
- function metadataFailure(e) {
129
- const message = defaultValue(
130
- defined(e) ? e.message : undefined,
131
- `An error occurred while accessing ${that._resource.url}.`
132
- );
133
- metadataError = TileProviderError.reportError(
134
- metadataError,
135
- that,
136
- that._errorEvent,
137
- message
138
- );
139
- if (metadataError.retry) {
140
- return requestMetadata();
141
- }
142
- return Promise.reject(new RuntimeError(message));
143
- }
144
-
145
- function requestMetadata() {
146
- return that._resource
147
- .fetchXML()
148
- .then(metadataSuccess)
149
- .catch(metadataFailure);
190
+ const that = this;
191
+ const terrainProviderBuilder = new TerrainProviderBuilder(options);
192
+ const resource = Resource.createIfNeeded(options.url);
193
+
194
+ this._resource = resource;
195
+
196
+ this._readyPromise = requestMetadata(
197
+ terrainProviderBuilder,
198
+ resource,
199
+ that
200
+ ).then(() => {
201
+ terrainProviderBuilder.build(that);
202
+ return true;
203
+ });
150
204
  }
151
-
152
- this._readyPromise = requestMetadata();
153
205
  }
154
206
 
155
207
  Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
@@ -169,7 +221,7 @@ Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
169
221
 
170
222
  /**
171
223
  * Gets the credit to display when this terrain provider is active. Typically this is used to credit
172
- * the source of the terrain. This function should not be called before {@link VRTheWorldTerrainProvider#ready} returns true.
224
+ * the source of the terrain.
173
225
  * @memberof VRTheWorldTerrainProvider.prototype
174
226
  * @type {Credit}
175
227
  * @readonly
@@ -181,22 +233,13 @@ Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
181
233
  },
182
234
 
183
235
  /**
184
- * Gets the tiling scheme used by this provider. This function should
185
- * not be called before {@link VRTheWorldTerrainProvider#ready} returns true.
236
+ * Gets the tiling scheme used by this provider.
186
237
  * @memberof VRTheWorldTerrainProvider.prototype
187
238
  * @type {GeographicTilingScheme}
188
239
  * @readonly
189
240
  */
190
241
  tilingScheme: {
191
242
  get: function () {
192
- //>>includeStart('debug', pragmas.debug);
193
- if (!this.ready) {
194
- throw new DeveloperError(
195
- "requestTileGeometry must not be called before ready returns true."
196
- );
197
- }
198
- //>>includeEnd('debug');
199
-
200
243
  return this._tilingScheme;
201
244
  },
202
245
  },
@@ -206,9 +249,14 @@ Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
206
249
  * @memberof VRTheWorldTerrainProvider.prototype
207
250
  * @type {boolean}
208
251
  * @readonly
252
+ * @deprecated
209
253
  */
210
254
  ready: {
211
255
  get: function () {
256
+ deprecationWarning(
257
+ "VRTheWorldTerrainProvider.ready",
258
+ "VRTheWorldTerrainProvider.ready was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use VRTheWorldTerrainProvider.fromUrl instead."
259
+ );
212
260
  return this._ready;
213
261
  },
214
262
  },
@@ -218,9 +266,14 @@ Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
218
266
  * @memberof VRTheWorldTerrainProvider.prototype
219
267
  * @type {Promise<boolean>}
220
268
  * @readonly
269
+ * @deprecated
221
270
  */
222
271
  readyPromise: {
223
272
  get: function () {
273
+ deprecationWarning(
274
+ "VRTheWorldTerrainProvider.readyPromise",
275
+ "VRTheWorldTerrainProvider.readyPromise was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use VRTheWorldTerrainProvider.fromUrl instead."
276
+ );
224
277
  return this._readyPromise;
225
278
  },
226
279
  },
@@ -228,8 +281,7 @@ Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
228
281
  /**
229
282
  * Gets a value indicating whether or not the provider includes a water mask. The water mask
230
283
  * indicates which areas of the globe are water rather than land, so they can be rendered
231
- * as a reflective surface with animated waves. This function should not be
232
- * called before {@link VRTheWorldTerrainProvider#ready} returns true.
284
+ * as a reflective surface with animated waves.
233
285
  * @memberof VRTheWorldTerrainProvider.prototype
234
286
  * @type {boolean}
235
287
  * @readonly
@@ -242,7 +294,6 @@ Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
242
294
 
243
295
  /**
244
296
  * Gets a value indicating whether or not the requested tiles include vertex normals.
245
- * This function should not be called before {@link VRTheWorldTerrainProvider#ready} returns true.
246
297
  * @memberof VRTheWorldTerrainProvider.prototype
247
298
  * @type {boolean}
248
299
  * @readonly
@@ -254,8 +305,7 @@ Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
254
305
  },
255
306
  /**
256
307
  * Gets an object that can be used to determine availability of terrain from this provider, such as
257
- * at points and in rectangles. This function should not be called before
258
- * {@link TerrainProvider#ready} returns true. This property may be undefined if availability
308
+ * at points and in rectangles. This property may be undefined if availability
259
309
  * information is not available.
260
310
  * @memberof VRTheWorldTerrainProvider.prototype
261
311
  * @type {TileAvailability}
@@ -269,8 +319,42 @@ Object.defineProperties(VRTheWorldTerrainProvider.prototype, {
269
319
  });
270
320
 
271
321
  /**
272
- * Requests the geometry for a given tile. This function should not be called before
273
- * {@link VRTheWorldTerrainProvider#ready} returns true. The result includes terrain
322
+ * Creates a {@link TerrainProvider} that produces terrain geometry by tessellating height maps
323
+ * retrieved from a {@link http://vr-theworld.com/|VT MÄK VR-TheWorld server}.
324
+ *
325
+ * @param {Resource|String} url The URL of the VR-TheWorld TileMap.
326
+ * @param {VRTheWorldTerrainProvider.ConstructorOptions} [options] An object describing initialization options.
327
+ * @returns {Promise<VRTheWorldTerrainProvider>}
328
+ *
329
+ * @example
330
+ * const terrainProvider = await Cesium.VRTheWorldTerrainProvider.fromUrl(
331
+ * "https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/"
332
+ * );
333
+ * viewer.terrainProvider = terrainProvider;
334
+ *
335
+ * @exception {RuntimeError} metadata specifies and unknown SRS
336
+ */
337
+ VRTheWorldTerrainProvider.fromUrl = async function (url, options) {
338
+ //>>includeStart('debug', pragmas.debug);
339
+ Check.defined("url", url);
340
+ //>>includeEnd('debug');
341
+
342
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
343
+
344
+ const terrainProviderBuilder = new TerrainProviderBuilder(options);
345
+ const resource = Resource.createIfNeeded(url);
346
+
347
+ await requestMetadata(terrainProviderBuilder, resource);
348
+
349
+ const provider = new VRTheWorldTerrainProvider(options);
350
+ terrainProviderBuilder.build(provider);
351
+ provider._resource = resource;
352
+
353
+ return provider;
354
+ };
355
+
356
+ /**
357
+ * Requests the geometry for a given tile. The result includes terrain
274
358
  * data and indicates that all child tiles are available.
275
359
  *
276
360
  * @param {number} x The X coordinate of the tile for which to request geometry.
@@ -287,14 +371,6 @@ VRTheWorldTerrainProvider.prototype.requestTileGeometry = function (
287
371
  level,
288
372
  request
289
373
  ) {
290
- //>>includeStart('debug', pragmas.debug);
291
- if (!this.ready) {
292
- throw new DeveloperError(
293
- "requestTileGeometry must not be called before ready returns true."
294
- );
295
- }
296
- //>>includeEnd('debug');
297
-
298
374
  const yTiles = this._tilingScheme.getNumberOfYTilesAtLevel(level);
299
375
  const resource = this._resource.getDerivedResource({
300
376
  url: `${level}/${x}/${yTiles - y - 1}.tif`,
@@ -331,13 +407,6 @@ VRTheWorldTerrainProvider.prototype.requestTileGeometry = function (
331
407
  VRTheWorldTerrainProvider.prototype.getLevelMaximumGeometricError = function (
332
408
  level
333
409
  ) {
334
- //>>includeStart('debug', pragmas.debug);
335
- if (!this.ready) {
336
- throw new DeveloperError(
337
- "requestTileGeometry must not be called before ready returns true."
338
- );
339
- }
340
- //>>includeEnd('debug');
341
410
  return this._levelZeroMaximumGeometricError / (1 << level);
342
411
  };
343
412
 
@@ -98,9 +98,10 @@ let implementation;
98
98
  *
99
99
  * @example
100
100
  * const viewer = new Cesium.Viewer("cesiumContainer", {
101
- * imageryProvider: new Cesium.TileMapServiceImageryProvider({
102
- * url: Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"),
103
- * }),
101
+ * baseLayer: Cesium.ImageryLayer.fromProviderAsync(
102
+ * Cesium.TileMapServiceImageryProvider.fromUrl(
103
+ * Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"),
104
+ * )),
104
105
  * baseLayerPicker: false,
105
106
  * });
106
107
  */
@@ -1,5 +1,6 @@
1
1
  import CesiumTerrainProvider from "./CesiumTerrainProvider.js";
2
2
  import defaultValue from "./defaultValue.js";
3
+ import deprecationWarning from "./deprecationWarning.js";
3
4
  import IonResource from "./IonResource.js";
4
5
 
5
6
  /**
@@ -31,12 +32,29 @@ import IonResource from "./IonResource.js";
31
32
  *
32
33
  */
33
34
  function createWorldTerrain(options) {
35
+ deprecationWarning(
36
+ "createWorldTerrain",
37
+ "createWorldTerrain was deprecated in CesiumJS 1.104. It will be in CesiumJS 1.107. Use createWorldTerrainAsync instead."
38
+ );
39
+
34
40
  options = defaultValue(options, defaultValue.EMPTY_OBJECT);
35
41
 
36
- return new CesiumTerrainProvider({
37
- url: IonResource.fromAssetId(1),
42
+ const provider = new CesiumTerrainProvider({
38
43
  requestVertexNormals: defaultValue(options.requestVertexNormals, false),
39
44
  requestWaterMask: defaultValue(options.requestWaterMask, false),
40
45
  });
46
+
47
+ // This is here in order to avoid throwing a second deprecation error
48
+ // by using the deprecated url parameter in the constructor above
49
+ provider._readyPromise = CesiumTerrainProvider._initializeReadyPromise(
50
+ {
51
+ url: IonResource.fromAssetId(1),
52
+ requestVertexNormals: defaultValue(options.requestVertexNormals, false),
53
+ requestWaterMask: defaultValue(options.requestWaterMask, false),
54
+ },
55
+ provider
56
+ );
57
+
58
+ return provider;
41
59
  }
42
60
  export default createWorldTerrain;
@@ -0,0 +1,48 @@
1
+ import CesiumTerrainProvider from "./CesiumTerrainProvider.js";
2
+ import defaultValue from "./defaultValue.js";
3
+
4
+ /**
5
+ * Creates a {@link CesiumTerrainProvider} instance for the {@link https://cesium.com/content/#cesium-world-terrain|Cesium World Terrain}.
6
+ *
7
+ * @function
8
+ *
9
+ * @param {Object} [options] Object with the following properties:
10
+ * @param {Boolean} [options.requestVertexNormals=false] Flag that indicates if the client should request additional lighting information from the server if available.
11
+ * @param {Boolean} [options.requestWaterMask=false] Flag that indicates if the client should request per tile water masks from the server if available.
12
+ * @returns {Promise<CesiumTerrainProvider>} A promise that resolves to the created CesiumTerrainProvider
13
+ *
14
+ * @see Ion
15
+ *
16
+ * @example
17
+ * // Create Cesium World Terrain with default settings
18
+ * try {
19
+ * const viewer = new Cesium.Viewer("cesiumContainer", {
20
+ * terrainProvider: await Cesium.createWorldTerrainAsync();
21
+ * });
22
+ * } catch (error) {
23
+ * console.log(error);
24
+ * }
25
+ *
26
+ * @example
27
+ * // Create Cesium World Terrain with water and normals.
28
+ * try {
29
+ * const viewer1 = new Cesium.Viewer("cesiumContainer", {
30
+ * terrainProvider: await Cesium.createWorldTerrainAsync({
31
+ * requestWaterMask: true,
32
+ * requestVertexNormals: true
33
+ * });
34
+ * });
35
+ * } catch (error) {
36
+ * console.log(error);
37
+ * }
38
+ *
39
+ */
40
+ function createWorldTerrainAsync(options) {
41
+ options = defaultValue(options, defaultValue.EMPTY_OBJECT);
42
+
43
+ return CesiumTerrainProvider.fromIonAssetId(1, {
44
+ requestVertexNormals: defaultValue(options.requestVertexNormals, false),
45
+ requestWaterMask: defaultValue(options.requestWaterMask, false),
46
+ });
47
+ }
48
+ export default createWorldTerrainAsync;
@@ -26,27 +26,26 @@ import defined from "./defined.js";
26
26
  *
27
27
  * @example
28
28
  * // Query the terrain height of two Cartographic positions
29
- * const terrainProvider = Cesium.createWorldTerrain();
29
+ * const terrainProvider = await Cesium.createWorldTerrainAsync();
30
30
  * const positions = [
31
31
  * Cesium.Cartographic.fromDegrees(86.925145, 27.988257),
32
32
  * Cesium.Cartographic.fromDegrees(87.0, 28.0)
33
33
  * ];
34
- * const promise = Cesium.sampleTerrain(terrainProvider, 11, positions);
35
- * Promise.resolve(promise).then(function(updatedPositions) {
36
- * // positions[0].height and positions[1].height have been updated.
37
- * // updatedPositions is just a reference to positions.
38
- * });
34
+ * const updatedPositions = await Cesium.sampleTerrain(terrainProvider, 11, positions);
35
+ * // positions[0].height and positions[1].height have been updated.
36
+ * // updatedPositions is just a reference to positions.
39
37
  */
40
- function sampleTerrain(terrainProvider, level, positions) {
38
+ async function sampleTerrain(terrainProvider, level, positions) {
41
39
  //>>includeStart('debug', pragmas.debug);
42
40
  Check.typeOf.object("terrainProvider", terrainProvider);
43
41
  Check.typeOf.number("level", level);
44
42
  Check.defined("positions", positions);
45
43
  //>>includeEnd('debug');
46
44
 
47
- return terrainProvider.readyPromise.then(function () {
48
- return doSampling(terrainProvider, level, positions);
49
- });
45
+ // readyPromise has been deprecated; This is here for backwards compatibility
46
+ await terrainProvider._readyPromise;
47
+
48
+ return doSampling(terrainProvider, level, positions);
50
49
  }
51
50
 
52
51
  /**