bruce-cesium 1.6.4 → 1.6.6

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.
@@ -1,5 +1,6 @@
1
- import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, DelayQueue, BatchedDataGetter, EntityRelationType, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
2
- import { Cartesian2, Cartographic, Math as Math$1, SceneMode, Cartesian3, Entity, Primitive, Cesium3DTileFeature, Color, HeightReference, EllipsoidTerrainProvider, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Cesium3DTileColorBlendMode, HeadingPitchRange, KmlDataSource, createOsmBuildings, Cesium3DTileStyle, Rectangle, CallbackProperty, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, PolygonPipeline, Cesium3DTileset, Matrix4, IonResource, OrthographicFrustum, JulianDate, EllipsoidGeodesic, sampleTerrainMostDetailed, ColorMaterialProperty, Matrix3, EasingFunction, GeometryInstance } from 'cesium';
1
+ import { BruceEvent, Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, DelayQueue, BatchedDataGetter, EntityRelationType, EntityCoords, EntityFilterGetter, EntitySource, MenuItem, EntityRelation, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
2
+ import * as Cesium from 'cesium';
3
+ import { Cartesian2, Cartographic, Math as Math$1, Color, HeightReference, Cartesian3, EllipsoidTerrainProvider, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, SceneMode, HeadingPitchRange, KmlDataSource, createOsmBuildings, Cesium3DTileStyle, Rectangle, Cesium3DTileColorBlendMode, CallbackProperty, OrthographicFrustum, JulianDate, Cesium3DTileset, Matrix4, IonResource, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, PolygonPipeline, EllipsoidGeodesic, sampleTerrainMostDetailed, ColorMaterialProperty, Matrix3, EasingFunction, GeometryInstance } from 'cesium';
3
4
 
4
5
  var TIME_LAG = 300;
5
6
  var POSITION_CHECK_TIMER = 950;
@@ -1101,6 +1102,177 @@ var EntityUtils;
1101
1102
  EntityUtils.GetOpacity = GetOpacity;
1102
1103
  })(EntityUtils || (EntityUtils = {}));
1103
1104
 
1105
+ function distanceToSegment(fromPoint, toPoint1, toPoint2) {
1106
+ var ab = Cartesian3.subtract(toPoint2, toPoint1, new Cartesian3());
1107
+ var ap = Cartesian3.subtract(fromPoint, toPoint1, new Cartesian3());
1108
+ var e = Cartesian3.dot(ap, ab);
1109
+ if (e <= 0) {
1110
+ return Cartesian3.distance(fromPoint, toPoint1);
1111
+ }
1112
+ var f = Cartesian3.dot(ab, ab);
1113
+ if (e >= f) {
1114
+ return Cartesian3.distance(fromPoint, toPoint2);
1115
+ }
1116
+ var proj = Cartesian3.multiplyByScalar(ab, e / f, new Cartesian3());
1117
+ var projECEF = Cartesian3.add(toPoint1, proj, new Cartesian3());
1118
+ return Cartesian3.distance(fromPoint, projECEF);
1119
+ }
1120
+ function pointInsidePolygon(point, polygon) {
1121
+ var inside = false;
1122
+ var x = point.latitude;
1123
+ var y = point.longitude;
1124
+ for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
1125
+ var xi = +polygon[i].latitude;
1126
+ var yi = +polygon[i].longitude;
1127
+ var xj = +polygon[j].latitude;
1128
+ var yj = +polygon[j].longitude;
1129
+ if (isNaN(xi) || isNaN(yi) || isNaN(xj) || isNaN(yj)) {
1130
+ continue;
1131
+ }
1132
+ var intersect = (yi > y) !== (yj > y) && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;
1133
+ if (intersect) {
1134
+ inside = !inside;
1135
+ }
1136
+ }
1137
+ return inside;
1138
+ }
1139
+ function distanceToPolygon(point, polygon) {
1140
+ if (pointInsidePolygon(point, polygon)) {
1141
+ var avgAltitude = polygon.reduce(function (sum, vertex) { return sum + vertex.altitude; }, 0) / polygon.length;
1142
+ return Math.abs(point.altitude - avgAltitude);
1143
+ }
1144
+ var pointECEF = Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);
1145
+ var minDistance = Infinity;
1146
+ for (var i = 0; i < polygon.length; i++) {
1147
+ var point1 = polygon[i];
1148
+ var point1Latitude = EnsureNumber(point1.latitude);
1149
+ var point1Longitude = EnsureNumber(point1.longitude);
1150
+ if (!point1Latitude && !point1Longitude) {
1151
+ continue;
1152
+ }
1153
+ var point2 = polygon[(i + 1) % polygon.length];
1154
+ var point2Latitude = EnsureNumber(point2.latitude);
1155
+ var point2Longitude = EnsureNumber(point2.longitude);
1156
+ if (!point2Latitude && !point2Longitude) {
1157
+ continue;
1158
+ }
1159
+ var coord1ECEF = Cartesian3.fromDegrees(point1Longitude, point1Latitude, EnsureNumber(point1.altitude));
1160
+ var coord2ECEF = Cartesian3.fromDegrees(point2Longitude, point2Latitude, EnsureNumber(point2.altitude));
1161
+ var distance = distanceToSegment(pointECEF, coord1ECEF, coord2ECEF);
1162
+ minDistance = Math.min(minDistance, distance);
1163
+ }
1164
+ return minDistance;
1165
+ }
1166
+ // Cache for distance calculations.
1167
+ // It will keep only the most recent 3000 entries.
1168
+ var distanceCache = new LRUCache(3000);
1169
+ function createCacheKey(point, entity) {
1170
+ try {
1171
+ var pointData = {
1172
+ latitude: MathUtils.Round(+point.latitude, 5),
1173
+ longitude: MathUtils.Round(+point.longitude, 5),
1174
+ altitude: MathUtils.Round(+point.altitude, 4)
1175
+ };
1176
+ var entityData = __assign(__assign(__assign({}, entity.location), entity.geometry), entity.boundaries);
1177
+ return JSON.stringify(pointData) + '|' + JSON.stringify(entityData);
1178
+ }
1179
+ catch (e) {
1180
+ console.error(e);
1181
+ return null;
1182
+ }
1183
+ }
1184
+ /**
1185
+ * Calculates distance while accounting for polylines and polygons.
1186
+ * It does not account for multi-geometry.
1187
+ * @param point
1188
+ * @param entity
1189
+ * @returns
1190
+ */
1191
+ function calculateDistance(point, entity) {
1192
+ var cacheKey = createCacheKey(point, entity);
1193
+ var cachedResult = cacheKey ? distanceCache.Get(cacheKey) : null;
1194
+ if (cachedResult || cachedResult == 0) {
1195
+ return cachedResult;
1196
+ }
1197
+ var minDistance = Infinity;
1198
+ var pointPos = Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);
1199
+ // We'll start by using the entity location if it's available.
1200
+ var entityPos3d = null;
1201
+ if (entity.location && entity.location.latitude) {
1202
+ var latitude = EnsureNumber(entity.location.latitude);
1203
+ var longitude = EnsureNumber(entity.location.longitude);
1204
+ // Disallowing exact 0.
1205
+ if (latitude || longitude) {
1206
+ var altitude = EnsureNumber(entity.location.altitude);
1207
+ entityPos3d = Cartesian3.fromDegrees(longitude, latitude, altitude);
1208
+ }
1209
+ }
1210
+ if (!isNaN(entityPos3d.x)) {
1211
+ minDistance = Cartesian3.distance(pointPos, entityPos3d);
1212
+ }
1213
+ // Check geometry if it's available.
1214
+ if (entity.geometry) {
1215
+ var passedGeometry = false;
1216
+ if (entity.geometry.Polygon) {
1217
+ var polygonRings = entity.geometry.Polygon;
1218
+ var polygon = typeof polygonRings == "string" ? String(polygonRings) : polygonRings.length ? polygonRings[0].LinearRing : "";
1219
+ var points = polygon ? Geometry.ParsePoints(polygon) : [];
1220
+ if (points.length > 2) {
1221
+ var distance = distanceToPolygon(point, points);
1222
+ if (!isNaN(distance)) {
1223
+ minDistance = Math.min(minDistance, distance);
1224
+ passedGeometry = true;
1225
+ }
1226
+ }
1227
+ }
1228
+ if (!passedGeometry && entity.geometry.LineString) {
1229
+ var points = Geometry.ParsePoints(entity.geometry.LineString);
1230
+ if (points.length > 1) {
1231
+ var pointsLen = points.length;
1232
+ for (var i = 0; i < pointsLen; i++) {
1233
+ var point1 = points[i];
1234
+ var point1Latitude = EnsureNumber(point1.latitude);
1235
+ var point1Longitude = EnsureNumber(point1.longitude);
1236
+ if (!point1Latitude && !point1Longitude) {
1237
+ continue;
1238
+ }
1239
+ var point2 = points[(i + 1) % pointsLen];
1240
+ var point2Latitude = EnsureNumber(point2.latitude);
1241
+ var point2Longitude = EnsureNumber(point2.longitude);
1242
+ if (!point2Latitude && !point2Longitude) {
1243
+ continue;
1244
+ }
1245
+ var coord1ECEF = Cartesian3.fromDegrees(point1Longitude, point1Latitude, EnsureNumber(point1.altitude));
1246
+ var coord2ECEF = Cartesian3.fromDegrees(point2Longitude, point2Latitude, EnsureNumber(point2.altitude));
1247
+ var distance = distanceToSegment(pointPos, coord1ECEF, coord2ECEF);
1248
+ if (!isNaN(distance)) {
1249
+ minDistance = Math.min(minDistance, distance);
1250
+ passedGeometry = true;
1251
+ }
1252
+ }
1253
+ }
1254
+ }
1255
+ }
1256
+ // Backup is using boundaries.
1257
+ if (minDistance === Infinity && entity.boundaries) {
1258
+ var point_1 = {
1259
+ latitude: (EnsureNumber(entity.boundaries.minLatitude) + EnsureNumber(entity.boundaries.maxLatitude)) / 2,
1260
+ longitude: (EnsureNumber(entity.boundaries.minLongitude) + EnsureNumber(entity.boundaries.maxLongitude)) / 2,
1261
+ altitude: 0
1262
+ };
1263
+ // Disallowing exact 0.
1264
+ if (point_1.latitude || point_1.longitude) {
1265
+ if (Carto.ValidateCarto(point_1)) {
1266
+ var boundsPoint = Cartesian3.fromDegrees(point_1.longitude, point_1.latitude, point_1.altitude);
1267
+ minDistance = Cartesian3.distance(pointPos, boundsPoint);
1268
+ }
1269
+ }
1270
+ }
1271
+ if (cacheKey) {
1272
+ distanceCache.Set(cacheKey, minDistance);
1273
+ }
1274
+ return minDistance;
1275
+ }
1104
1276
  var RenderManager;
1105
1277
  (function (RenderManager) {
1106
1278
  function DetermineZoomItem(params) {
@@ -1113,11 +1285,15 @@ var RenderManager;
1113
1285
  return null;
1114
1286
  }
1115
1287
  var is2d = viewer.scene.mode === SceneMode.SCENE2D;
1116
- var cameraPos = viewer.camera.position;
1117
- if (!Cartes.ValidateCartes3(cameraPos)) {
1288
+ var cameraPos = viewer.camera.positionCartographic;
1289
+ if (!cameraPos || !cameraPos.latitude) {
1118
1290
  return null;
1119
1291
  }
1120
- var distance = Cartesian3.distance(pos, cameraPos);
1292
+ var distance = calculateDistance({
1293
+ altitude: cameraPos.height,
1294
+ latitude: Math$1.toDegrees(cameraPos.latitude),
1295
+ longitude: Math$1.toDegrees(cameraPos.longitude)
1296
+ }, entity);
1121
1297
  var zoomItem = (!distance && distance != 0) ? null : GetZoomControlFromDistance({
1122
1298
  zoomControl: zoomControl,
1123
1299
  distance: distance
@@ -2311,6 +2487,8 @@ var EntityRenderEngine;
2311
2487
  })(Model3d = EntityRenderEngine.Model3d || (EntityRenderEngine.Model3d = {}));
2312
2488
  })(EntityRenderEngine || (EntityRenderEngine = {}));
2313
2489
 
2490
+ var BATCH_SIZE = 500;
2491
+ var CHECK_BATCH_SIZE = 250;
2314
2492
  /**
2315
2493
  * Manager for rendering Bruce entities.
2316
2494
  * This will request entities based on setup menu item filter.
@@ -2385,7 +2563,7 @@ var EntitiesRenderManager;
2385
2563
  this.getter = this.sharedGetters.GetOrCreateFilterGetter({
2386
2564
  api: api,
2387
2565
  attrFilter: (_e = this.item.BruceEntity.Filter) !== null && _e !== void 0 ? _e : {},
2388
- batchSize: 500,
2566
+ batchSize: BATCH_SIZE,
2389
2567
  typeId: this.item.BruceEntity["EntityType.ID"],
2390
2568
  monitor: this.monitor,
2391
2569
  viewer: this.viewer,
@@ -2463,7 +2641,7 @@ var EntitiesRenderManager;
2463
2641
  };
2464
2642
  Manager.prototype.doEntityCheck = function (ids) {
2465
2643
  return __awaiter(this, void 0, void 0, function () {
2466
- var api, CHECK_BATCH_SIZE_1, checkBatch, e_1;
2644
+ var api, checkBatch, e_1;
2467
2645
  var _this = this;
2468
2646
  return __generator(this, function (_a) {
2469
2647
  switch (_a.label) {
@@ -2487,13 +2665,12 @@ var EntitiesRenderManager;
2487
2665
  return [2 /*return*/];
2488
2666
  }
2489
2667
  if (!(ids.length > 0)) return [3 /*break*/, 4];
2490
- CHECK_BATCH_SIZE_1 = 150;
2491
2668
  checkBatch = function () { return __awaiter(_this, void 0, void 0, function () {
2492
2669
  var entityIds, entities;
2493
2670
  return __generator(this, function (_a) {
2494
2671
  switch (_a.label) {
2495
2672
  case 0:
2496
- entityIds = ids.splice(0, CHECK_BATCH_SIZE_1);
2673
+ entityIds = ids.splice(0, CHECK_BATCH_SIZE);
2497
2674
  return [4 /*yield*/, Entity$1.GetListByIds({
2498
2675
  api: api,
2499
2676
  entityIds: entityIds
@@ -2529,7 +2706,6 @@ var EntitiesRenderManager;
2529
2706
  };
2530
2707
  Manager.prototype.distributeForRender = function (entities) {
2531
2708
  var _this = this;
2532
- var BATCH_SIZE = 300;
2533
2709
  this.renderQueue = this.renderQueue.concat(entities);
2534
2710
  if (!this.renderQueueInterval && this.renderQueue.length) {
2535
2711
  this.renderQueueInterval = setInterval(function () {
@@ -2614,6 +2790,8 @@ var EntitiesRenderManager;
2614
2790
  EntitiesRenderManager.Manager = Manager;
2615
2791
  })(EntitiesRenderManager || (EntitiesRenderManager = {}));
2616
2792
 
2793
+ var BATCH_SIZE$1 = 500;
2794
+ var CHECK_BATCH_SIZE$1 = 250;
2617
2795
  /**
2618
2796
  * Render manager for a group of pre-loaded entities.
2619
2797
  * The entities may or may not have records.
@@ -2648,7 +2826,7 @@ var EntitiesLoadedRenderManager;
2648
2826
  if (this.disposed) {
2649
2827
  throw (new Error("This item is disposed."));
2650
2828
  }
2651
- this.getter = new BatchedDataGetter.Getter(this.item.BruceEntity.Entities, this.monitor, 500);
2829
+ this.getter = new BatchedDataGetter.Getter(this.item.BruceEntity.Entities, this.monitor, BATCH_SIZE$1);
2652
2830
  this.getterSub = this.getter.OnUpdate.Subscribe(function (entities) {
2653
2831
  _this.onGetterUpdate(entities);
2654
2832
  });
@@ -2694,7 +2872,7 @@ var EntitiesLoadedRenderManager;
2694
2872
  };
2695
2873
  Manager.prototype.doEntityCheck = function (ids) {
2696
2874
  return __awaiter(this, void 0, void 0, function () {
2697
- var api, CHECK_BATCH_SIZE_1, checkBatch, e_1;
2875
+ var api, checkBatch, e_1;
2698
2876
  var _this = this;
2699
2877
  return __generator(this, function (_a) {
2700
2878
  switch (_a.label) {
@@ -2707,13 +2885,12 @@ var EntitiesLoadedRenderManager;
2707
2885
  return [2 /*return*/];
2708
2886
  }
2709
2887
  if (!(ids.length > 0)) return [3 /*break*/, 4];
2710
- CHECK_BATCH_SIZE_1 = 150;
2711
2888
  checkBatch = function () { return __awaiter(_this, void 0, void 0, function () {
2712
2889
  var entityIds, entities;
2713
2890
  return __generator(this, function (_a) {
2714
2891
  switch (_a.label) {
2715
2892
  case 0:
2716
- entityIds = ids.splice(0, CHECK_BATCH_SIZE_1);
2893
+ entityIds = ids.splice(0, CHECK_BATCH_SIZE$1);
2717
2894
  return [4 /*yield*/, Entity$1.GetListByIds({
2718
2895
  api: api,
2719
2896
  entityIds: entityIds
@@ -4107,6 +4284,7 @@ var VisualsRegister;
4107
4284
  VisualsRegister.Register = Register;
4108
4285
  })(VisualsRegister || (VisualsRegister = {}));
4109
4286
 
4287
+ var BATCH_SIZE$2 = 500;
4110
4288
  /**
4111
4289
  * Render manager for rendering an array of entity ids.
4112
4290
  * This will render them in batches to avoid overloading the viewer.
@@ -4140,7 +4318,7 @@ var EntitiesIdsRenderManager;
4140
4318
  if (this.disposed) {
4141
4319
  throw (new Error("This item is disposed."));
4142
4320
  }
4143
- this.getter = new BatchedDataGetter.Getter(this.item.BruceEntity.EntityIds, this.monitor, 500);
4321
+ this.getter = new BatchedDataGetter.Getter(this.item.BruceEntity.EntityIds, this.monitor, BATCH_SIZE$2);
4144
4322
  this.getterSub = this.getter.OnUpdate.Subscribe(function (ids) {
4145
4323
  _this.onGetterUpdate(ids);
4146
4324
  });
@@ -5504,7 +5682,7 @@ var SharedGetters;
5504
5682
  })(SharedGetters || (SharedGetters = {}));
5505
5683
 
5506
5684
  var MAX_BATCHES = 2;
5507
- var BATCH_SIZE = 30;
5685
+ var BATCH_SIZE$3 = 30;
5508
5686
  var BATCH_DELAY = 200;
5509
5687
  var MAX_RANGE = 3000;
5510
5688
  var TilesetOsmRenderManager;
@@ -5699,7 +5877,7 @@ var TilesetOsmRenderManager;
5699
5877
  var isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);
5700
5878
  if (isClose) {
5701
5879
  batch.push(feature);
5702
- if (batch.length >= BATCH_SIZE) {
5880
+ if (batch.length >= BATCH_SIZE$3) {
5703
5881
  return batch;
5704
5882
  }
5705
5883
  }
@@ -5804,7 +5982,7 @@ var TilesetOsmRenderManager;
5804
5982
  delete this._loadedCesiumEntities[key];
5805
5983
  this.totalLoaded -= 1;
5806
5984
  removed += 1;
5807
- if (removed >= BATCH_SIZE) {
5985
+ if (removed >= BATCH_SIZE$3) {
5808
5986
  return true;
5809
5987
  }
5810
5988
  }
@@ -7338,27 +7516,50 @@ function prepLegacyName(name) {
7338
7516
  * @returns
7339
7517
  */
7340
7518
  function renderDefaultTerrTile(id) {
7341
- var provider;
7342
- switch (id) {
7343
- case ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain:
7344
- provider = createWorldTerrain({
7345
- requestVertexNormals: true,
7346
- requestWaterMask: false
7347
- });
7348
- break;
7349
- case ProjectViewTile.EDefaultTerrain.FlatTerrain:
7350
- provider = new EllipsoidTerrainProvider();
7351
- break;
7352
- case ProjectViewTile.EDefaultTerrain.LINZ:
7353
- provider = new CesiumTerrainProvider({
7354
- url: "https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-dem",
7355
- requestVertexNormals: true,
7356
- requestWaterMask: false,
7357
- requestMetadata: false
7358
- });
7359
- break;
7360
- }
7361
- return provider;
7519
+ return __awaiter(this, void 0, void 0, function () {
7520
+ var CESIUM, provider, _a;
7521
+ return __generator(this, function (_b) {
7522
+ switch (_b.label) {
7523
+ case 0:
7524
+ CESIUM = Cesium;
7525
+ _a = id;
7526
+ switch (_a) {
7527
+ case ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain: return [3 /*break*/, 1];
7528
+ case ProjectViewTile.EDefaultTerrain.FlatTerrain: return [3 /*break*/, 5];
7529
+ case ProjectViewTile.EDefaultTerrain.LINZ: return [3 /*break*/, 6];
7530
+ }
7531
+ return [3 /*break*/, 7];
7532
+ case 1:
7533
+ if (!CESIUM.createWorldTerrainAsync) return [3 /*break*/, 3];
7534
+ return [4 /*yield*/, CESIUM.createWorldTerrainAsync({
7535
+ requestVertexNormals: true,
7536
+ requestWaterMask: false
7537
+ })];
7538
+ case 2:
7539
+ provider = _b.sent();
7540
+ return [3 /*break*/, 4];
7541
+ case 3:
7542
+ provider = createWorldTerrain({
7543
+ requestVertexNormals: true,
7544
+ requestWaterMask: false
7545
+ });
7546
+ _b.label = 4;
7547
+ case 4: return [3 /*break*/, 7];
7548
+ case 5:
7549
+ provider = new EllipsoidTerrainProvider();
7550
+ return [3 /*break*/, 7];
7551
+ case 6:
7552
+ provider = new CesiumTerrainProvider({
7553
+ url: "https://s3-ap-southeast-2.amazonaws.com/digitalnewzealand/PROD/Tilesets/nz-dem",
7554
+ requestVertexNormals: true,
7555
+ requestWaterMask: false,
7556
+ requestMetadata: false
7557
+ });
7558
+ return [3 /*break*/, 7];
7559
+ case 7: return [2 /*return*/, provider];
7560
+ }
7561
+ });
7562
+ });
7362
7563
  }
7363
7564
  /**
7364
7565
  * Maps a legacy terrain's name to a default terrain id.
@@ -8139,28 +8340,42 @@ var TileRenderEngine;
8139
8340
  (function (LegacyNavigator) {
8140
8341
  function Render(params) {
8141
8342
  var _a;
8142
- var bId = createLegacyTerrId(params.data);
8143
- var curProvider = params.viewer.terrainProvider;
8144
- if (curProvider._bId && curProvider._bId === bId) {
8145
- return;
8146
- }
8147
- var provider = null;
8148
- if (isLegacyTerrainDefault(params.data.Name)) {
8149
- var id = legacyTerrIdToDefaultId(params.data.Name);
8150
- provider = renderDefaultTerrTile(id);
8151
- }
8152
- else if (params.data.SourceUrl) {
8153
- provider = new CesiumTerrainProvider({
8154
- url: params.data.SourceUrl,
8155
- requestWaterMask: params.data.RequestWaterMask,
8156
- requestVertexNormals: true
8343
+ return __awaiter(this, void 0, void 0, function () {
8344
+ var bId, curProvider, provider, id;
8345
+ return __generator(this, function (_b) {
8346
+ switch (_b.label) {
8347
+ case 0:
8348
+ bId = createLegacyTerrId(params.data);
8349
+ curProvider = params.viewer.terrainProvider;
8350
+ if (curProvider._bId && curProvider._bId === bId) {
8351
+ return [2 /*return*/];
8352
+ }
8353
+ provider = null;
8354
+ if (!isLegacyTerrainDefault(params.data.Name)) return [3 /*break*/, 2];
8355
+ id = legacyTerrIdToDefaultId(params.data.Name);
8356
+ return [4 /*yield*/, renderDefaultTerrTile(id)];
8357
+ case 1:
8358
+ provider = (_b.sent());
8359
+ return [3 /*break*/, 3];
8360
+ case 2:
8361
+ if (params.data.SourceUrl) {
8362
+ provider = new CesiumTerrainProvider({
8363
+ url: params.data.SourceUrl,
8364
+ requestWaterMask: params.data.RequestWaterMask,
8365
+ requestVertexNormals: true
8366
+ });
8367
+ }
8368
+ _b.label = 3;
8369
+ case 3:
8370
+ if (provider) {
8371
+ provider._bId = bId;
8372
+ provider._bName = (_a = params.data) === null || _a === void 0 ? void 0 : _a.Name;
8373
+ params.viewer.terrainProvider = provider;
8374
+ }
8375
+ return [2 /*return*/];
8376
+ }
8157
8377
  });
8158
- }
8159
- if (provider) {
8160
- provider._bId = bId;
8161
- provider._bName = (_a = params.data) === null || _a === void 0 ? void 0 : _a.Name;
8162
- params.viewer.terrainProvider = provider;
8163
- }
8378
+ });
8164
8379
  }
8165
8380
  LegacyNavigator.Render = Render;
8166
8381
  function RenderView(params) {
@@ -8213,13 +8428,15 @@ var TileRenderEngine;
8213
8428
  break;
8214
8429
  }
8215
8430
  }
8216
- if (terrainTile) {
8217
- Render({
8431
+ if (!terrainTile) return [3 /*break*/, 6];
8432
+ return [4 /*yield*/, Render({
8218
8433
  data: terrainTile,
8219
8434
  viewer: params.viewer,
8220
- });
8221
- }
8222
- return [2 /*return*/];
8435
+ })];
8436
+ case 5:
8437
+ _c.sent();
8438
+ _c.label = 6;
8439
+ case 6: return [2 /*return*/];
8223
8440
  }
8224
8441
  });
8225
8442
  });
@@ -8231,27 +8448,50 @@ var TileRenderEngine;
8231
8448
  function Render(params) {
8232
8449
  var _a;
8233
8450
  return __awaiter(this, void 0, void 0, function () {
8234
- var enabledMeta, defaultTerr, provider, api, tileset, url, vertexes, settings;
8451
+ var enabledMeta, provider_1, leave, defaultTerr, provider, api, tileset, url, vertexes, settings;
8235
8452
  return __generator(this, function (_b) {
8236
8453
  switch (_b.label) {
8237
8454
  case 0:
8455
+ params.tile = {
8456
+ tilesetId: ProjectViewTile.EDefaultTerrain.CesiumWorldTerrain,
8457
+ accountId: null
8458
+ };
8238
8459
  enabledMeta = (_a = params.viewer.terrainProvider) === null || _a === void 0 ? void 0 : _a._bMeta;
8239
8460
  if ((enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.tilesetId) === params.tile.tilesetId &&
8240
8461
  (enabledMeta === null || enabledMeta === void 0 ? void 0 : enabledMeta.accountId) === params.tile.accountId) {
8241
8462
  return [2 /*return*/];
8242
8463
  }
8464
+ // Known default that may have been enabled prior to utility doing it.
8465
+ if (!enabledMeta) {
8466
+ provider_1 = params.viewer.terrainProvider;
8467
+ leave = false;
8468
+ if (params.tile.tilesetId == ProjectViewTile.EDefaultTerrain.FlatTerrain &&
8469
+ provider_1 instanceof EllipsoidTerrainProvider) {
8470
+ leave = true;
8471
+ }
8472
+ // TODO: Check for cesium world terrain if we can easily determine that it's enabled.
8473
+ if (leave) {
8474
+ provider_1._bMeta = {
8475
+ tilesetId: params.tile.tilesetId,
8476
+ accountId: params.tile.accountId
8477
+ };
8478
+ return [2 /*return*/];
8479
+ }
8480
+ }
8243
8481
  defaultTerr = params.tile.accountId ? null : ProjectViewTile.DefaultTerrains.find(function (x) { return x.id === params.tile.tilesetId; });
8244
8482
  provider = null;
8245
- if (!defaultTerr) return [3 /*break*/, 1];
8246
- provider = renderDefaultTerrTile(defaultTerr.id);
8247
- return [3 /*break*/, 3];
8483
+ if (!defaultTerr) return [3 /*break*/, 2];
8484
+ return [4 /*yield*/, renderDefaultTerrTile(defaultTerr.id)];
8248
8485
  case 1:
8486
+ provider = (_b.sent());
8487
+ return [3 /*break*/, 4];
8488
+ case 2:
8249
8489
  api = params.apiGetter.getApi(params.tile.accountId);
8250
8490
  return [4 /*yield*/, Tileset.Get({
8251
8491
  api: api,
8252
8492
  tilesetId: params.tile.tilesetId
8253
8493
  })];
8254
- case 2:
8494
+ case 3:
8255
8495
  tileset = (_b.sent()).tileset;
8256
8496
  url = void 0;
8257
8497
  vertexes = true;
@@ -8276,8 +8516,8 @@ var TileRenderEngine;
8276
8516
  requestVertexNormals: vertexes
8277
8517
  });
8278
8518
  }
8279
- _b.label = 3;
8280
- case 3:
8519
+ _b.label = 4;
8520
+ case 4:
8281
8521
  if (provider) {
8282
8522
  provider._bMeta = {
8283
8523
  accountId: params.tile.accountId,
@@ -8456,7 +8696,7 @@ function renderLegacyNavigator(params, bookmark, view) {
8456
8696
  function renderNavigator(params, bookmark, view) {
8457
8697
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
8458
8698
  return __awaiter(this, void 0, void 0, function () {
8459
- var viewer, scene, vSettings, bSettings, defaults, camera, newLens, curLens, transition, pos, gOcclusion, hillShades, baseColor, shadows, size, ambientOcclusion, AO, lighting, light, quality, fxaa, dateTime, clock, terrain, selectedIds, hiddenIds, isolatedIds, entityOpacityMap, entityId, opacity, imagery, renderedRelationEntityIds, curEnabled, newItemIds, _i, curEnabled_1, id, menuItem;
8699
+ var viewer, scene, vSettings, bSettings, defaults, camera, newLens, curLens, transition, pos, terrain, gOcclusion, hillShades, baseColor, shadows, size, ambientOcclusion, AO, lighting, light, quality, fxaa, dateTime, clock, selectedIds, hiddenIds, isolatedIds, entityOpacityMap, entityId, opacity, imagery, renderedRelationEntityIds, curEnabled, newItemIds, _i, curEnabled_1, id, menuItem;
8460
8700
  return __generator(this, function (_3) {
8461
8701
  switch (_3.label) {
8462
8702
  case 0:
@@ -8512,18 +8752,29 @@ function renderNavigator(params, bookmark, view) {
8512
8752
  });
8513
8753
  }
8514
8754
  }
8755
+ terrain = (bSettings === null || bSettings === void 0 ? void 0 : bSettings.terrain) != null ? bSettings === null || bSettings === void 0 ? void 0 : bSettings.terrain : (_m = defaults.settings) === null || _m === void 0 ? void 0 : _m.terrain;
8756
+ if (!terrain) return [3 /*break*/, 2];
8757
+ return [4 /*yield*/, TileRenderEngine.Terrain.Navigator.Render({
8758
+ apiGetter: params.apiGetter,
8759
+ tile: terrain,
8760
+ viewer: params.manager.Viewer,
8761
+ })];
8762
+ case 1:
8763
+ _3.sent();
8764
+ _3.label = 2;
8765
+ case 2:
8515
8766
  gOcclusion = bSettings === null || bSettings === void 0 ? void 0 : bSettings.groundOcclusion;
8516
8767
  if (gOcclusion == null) {
8517
- gOcclusion = (_m = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _m === void 0 ? void 0 : _m.groundOcclusion;
8768
+ gOcclusion = (_o = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _o === void 0 ? void 0 : _o.groundOcclusion;
8518
8769
  }
8519
8770
  if (gOcclusion == null) {
8520
8771
  // TODO: Need global default.
8521
8772
  gOcclusion = true;
8522
8773
  }
8523
8774
  scene.globe.depthTestAgainstTerrain = Boolean(gOcclusion);
8524
- hillShades = (_o = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _o === void 0 ? void 0 : _o.hillShades;
8775
+ hillShades = (_p = bookmark === null || bookmark === void 0 ? void 0 : bookmark.Settings) === null || _p === void 0 ? void 0 : _p.hillShades;
8525
8776
  if (hillShades == null) {
8526
- hillShades = (_p = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _p === void 0 ? void 0 : _p.hillShades;
8777
+ hillShades = (_q = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _q === void 0 ? void 0 : _q.hillShades;
8527
8778
  }
8528
8779
  if (hillShades == null) {
8529
8780
  hillShades = true;
@@ -8531,7 +8782,7 @@ function renderNavigator(params, bookmark, view) {
8531
8782
  scene.globe.enableLighting = Boolean(hillShades);
8532
8783
  baseColor = bSettings === null || bSettings === void 0 ? void 0 : bSettings.globeColor;
8533
8784
  if (baseColor == null) {
8534
- baseColor = (_q = defaults.settings) === null || _q === void 0 ? void 0 : _q.globeColor;
8785
+ baseColor = (_r = defaults.settings) === null || _r === void 0 ? void 0 : _r.globeColor;
8535
8786
  }
8536
8787
  if (baseColor == null) {
8537
8788
  // TODO: Need global default.
@@ -8540,7 +8791,7 @@ function renderNavigator(params, bookmark, view) {
8540
8791
  scene.globe.baseColor = Color.fromCssColorString(baseColor);
8541
8792
  shadows = bSettings === null || bSettings === void 0 ? void 0 : bSettings.shadows;
8542
8793
  if (shadows == null) {
8543
- shadows = (_r = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _r === void 0 ? void 0 : _r.shadows;
8794
+ shadows = (_s = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _s === void 0 ? void 0 : _s.shadows;
8544
8795
  }
8545
8796
  if (shadows == null) {
8546
8797
  shadows = {
@@ -8567,7 +8818,7 @@ function renderNavigator(params, bookmark, view) {
8567
8818
  }
8568
8819
  ambientOcclusion = bSettings === null || bSettings === void 0 ? void 0 : bSettings.ambientOcclusion;
8569
8820
  if (ambientOcclusion == null) {
8570
- ambientOcclusion = (_s = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _s === void 0 ? void 0 : _s.ambientOcclusion;
8821
+ ambientOcclusion = (_t = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _t === void 0 ? void 0 : _t.ambientOcclusion;
8571
8822
  }
8572
8823
  if (ambientOcclusion == null) {
8573
8824
  ambientOcclusion = {
@@ -8590,7 +8841,7 @@ function renderNavigator(params, bookmark, view) {
8590
8841
  }
8591
8842
  lighting = bSettings === null || bSettings === void 0 ? void 0 : bSettings.lighting;
8592
8843
  if (lighting == null) {
8593
- lighting = (_t = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _t === void 0 ? void 0 : _t.lighting;
8844
+ lighting = (_u = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _u === void 0 ? void 0 : _u.lighting;
8594
8845
  }
8595
8846
  if (lighting == null) {
8596
8847
  lighting = {
@@ -8605,7 +8856,7 @@ function renderNavigator(params, bookmark, view) {
8605
8856
  }
8606
8857
  quality = bSettings === null || bSettings === void 0 ? void 0 : bSettings.quality;
8607
8858
  if (quality == null) {
8608
- quality = (_u = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _u === void 0 ? void 0 : _u.quality;
8859
+ quality = (_v = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _v === void 0 ? void 0 : _v.quality;
8609
8860
  }
8610
8861
  if (quality == null) {
8611
8862
  quality = {
@@ -8616,23 +8867,12 @@ function renderNavigator(params, bookmark, view) {
8616
8867
  fxaa.enabled = Boolean(quality.fxaa);
8617
8868
  dateTime = bSettings === null || bSettings === void 0 ? void 0 : bSettings.dateTime;
8618
8869
  if (dateTime == null) {
8619
- dateTime = (_v = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _v === void 0 ? void 0 : _v.dateTime;
8870
+ dateTime = (_w = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _w === void 0 ? void 0 : _w.dateTime;
8620
8871
  }
8621
8872
  if (dateTime != null) {
8622
8873
  clock = viewer.clock;
8623
8874
  clock.currentTime = JulianDate.fromIso8601(dateTime);
8624
8875
  }
8625
- terrain = (bSettings === null || bSettings === void 0 ? void 0 : bSettings.terrain) != null ? bSettings === null || bSettings === void 0 ? void 0 : bSettings.terrain : (_w = defaults.settings) === null || _w === void 0 ? void 0 : _w.terrain;
8626
- if (!terrain) return [3 /*break*/, 2];
8627
- return [4 /*yield*/, TileRenderEngine.Terrain.Navigator.Render({
8628
- apiGetter: params.apiGetter,
8629
- tile: terrain,
8630
- viewer: params.manager.Viewer,
8631
- })];
8632
- case 1:
8633
- _3.sent();
8634
- _3.label = 2;
8635
- case 2:
8636
8876
  selectedIds = bSettings === null || bSettings === void 0 ? void 0 : bSettings.selectedEntityIds;
8637
8877
  if (selectedIds == null) {
8638
8878
  selectedIds = (_x = defaults === null || defaults === void 0 ? void 0 : defaults.settings) === null || _x === void 0 ? void 0 : _x.selectedEntityIds;