bruce-cesium 2.1.3 → 2.1.5

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,6 +1,6 @@
1
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, ENVIRONMENT, ProjectView, ProjectViewBookmark, ProjectViewTile, ProjectViewLegacyTile, ProgramKey, Camera } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartesian2, Cartographic, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, SceneMode, Entity, Primitive, Cesium3DTileFeature, HeightReference, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, JulianDate, NearFarScalar, Cesium3DTileset, Matrix4, Matrix3, IonResource, CesiumInspector, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, EllipsoidGeodesic, sampleTerrainMostDetailed, PolygonPipeline, ColorMaterialProperty, EasingFunction, GeometryInstance } from 'cesium';
3
+ import { Cartesian2, Cartographic, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, SceneMode, Entity, Primitive, Cesium3DTileFeature, HeightReference, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, JulianDate, NearFarScalar, EllipsoidGeodesic, EllipsoidTerrainProvider, sampleTerrainMostDetailed, CesiumInspector, PolygonPipeline, createWorldTerrain, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, Cesium3DTileset, Matrix4, Matrix3, IonResource, ColorMaterialProperty, EasingFunction, GeometryInstance } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -4761,6 +4761,8 @@ function correctStyle(style) {
4761
4761
  }
4762
4762
  return style;
4763
4763
  }
4764
+ var VIEWER_WATCH_KEY = "bruce-viewer-watch";
4765
+ var WATCH_KEY = "bruce-tileset-watch";
4764
4766
  /**
4765
4767
  * Creates and returns a tileset instance from a given url.
4766
4768
  * This is made to handle the difference between old and new cesium versions.
@@ -4771,15 +4773,21 @@ function correctStyle(style) {
4771
4773
  */
4772
4774
  function createTileset(url, props) {
4773
4775
  return __awaiter(this, void 0, void 0, function () {
4774
- var C3DT;
4776
+ var defaultProps, C3DT;
4775
4777
  return __generator(this, function (_a) {
4778
+ defaultProps = {
4779
+ // "Optimization option. Reduce the screen space error for tiles that are further away from the camera.".
4780
+ dynamicScreenSpaceError: true,
4781
+ // "The maximum amount of memory in MB that can be used by the tileset.".
4782
+ maximumMemoryUsage: 512
4783
+ };
4776
4784
  C3DT = Cesium3DTileset;
4777
4785
  if (C3DT.fromUrl) {
4778
4786
  // New cesium is running.
4779
- return [2 /*return*/, C3DT.fromUrl(url, __assign({}, props))];
4787
+ return [2 /*return*/, C3DT.fromUrl(url, __assign(__assign({}, defaultProps), props))];
4780
4788
  }
4781
4789
  // Old cesium is running.
4782
- return [2 /*return*/, new C3DT(__assign({ url: url }, props))];
4790
+ return [2 /*return*/, new C3DT(__assign(__assign({ url: url }, defaultProps), props))];
4783
4791
  });
4784
4792
  });
4785
4793
  }
@@ -4924,6 +4932,11 @@ var TilesetRenderEngine;
4924
4932
  switch (_a.label) {
4925
4933
  case 0:
4926
4934
  api = params.apiGetter.getApi(params.apiGetter.accountId);
4935
+ // Ensure regional url is loaded.
4936
+ return [4 /*yield*/, api.Loading];
4937
+ case 1:
4938
+ // Ensure regional url is loaded.
4939
+ _a.sent();
4927
4940
  loadUrl = params.tileset.loadUrl;
4928
4941
  // CDN url must match the api getter account id.
4929
4942
  if (!params.accountId || params.accountId == params.apiGetter.accountId) {
@@ -4934,21 +4947,22 @@ var TilesetRenderEngine;
4934
4947
  loadUrl += "&generation=" + params.tileset.generateVersion;
4935
4948
  }
4936
4949
  }
4937
- if (!(params.tileset.type == Tileset.EType.Cad)) return [3 /*break*/, 2];
4950
+ if (!(params.tileset.type == Tileset.EType.Cad)) return [3 /*break*/, 3];
4938
4951
  return [4 /*yield*/, createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({
4939
4952
  api: api,
4940
4953
  tilesetId: params.tileset.id,
4941
4954
  file: "tileset.json"
4942
4955
  }) + "?generation=" + params.tileset.generateVersion, null)];
4943
- case 1:
4956
+ case 2:
4944
4957
  cTileset_1 = _a.sent();
4945
4958
  params.viewer.scene.primitives.add(cTileset_1);
4946
4959
  cTileset_1.readyPromise.then(function () {
4947
- var _a, _b, _c;
4960
+ var _a, _b, _c, _d;
4948
4961
  try {
4949
4962
  if (!isAlive(params.viewer, cTileset_1)) {
4950
4963
  return;
4951
4964
  }
4965
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset_1);
4952
4966
  var settings = params.tileset.settings;
4953
4967
  ApplySettings({
4954
4968
  cTileset: cTileset_1,
@@ -4959,9 +4973,9 @@ var TilesetRenderEngine;
4959
4973
  ApplyPosition({
4960
4974
  cTileset: cTileset_1,
4961
4975
  position: {
4962
- ucs: (_a = params.coords) === null || _a === void 0 ? void 0 : _a.ucs,
4963
- location: ((_b = params.coords) === null || _b === void 0 ? void 0 : _b.location) == null ? settings.location : params.coords.location,
4964
- transform: ((_c = params.coords) === null || _c === void 0 ? void 0 : _c.transform) == null ? settings.transform : params.coords.transform
4976
+ ucs: (_b = params.coords) === null || _b === void 0 ? void 0 : _b.ucs,
4977
+ location: ((_c = params.coords) === null || _c === void 0 ? void 0 : _c.location) == null ? settings.location : params.coords.location,
4978
+ transform: ((_d = params.coords) === null || _d === void 0 ? void 0 : _d.transform) == null ? settings.transform : params.coords.transform
4965
4979
  }
4966
4980
  });
4967
4981
  }
@@ -4970,32 +4984,34 @@ var TilesetRenderEngine;
4970
4984
  }
4971
4985
  });
4972
4986
  return [2 /*return*/, cTileset_1];
4973
- case 2:
4974
- if (!(params.tileset.type === Tileset.EType.EntitiesSet)) return [3 /*break*/, 4];
4987
+ case 3:
4988
+ if (!(params.tileset.type === Tileset.EType.EntitiesSet)) return [3 /*break*/, 5];
4975
4989
  return [4 /*yield*/, createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({
4976
4990
  api: api,
4977
4991
  tilesetId: params.tileset.id,
4978
4992
  file: "tileset.json"
4979
4993
  }) + "?generation=" + params.tileset.generateVersion, null)];
4980
- case 3:
4994
+ case 4:
4981
4995
  cTileset = _a.sent();
4982
4996
  params.viewer.scene.primitives.add(cTileset);
4983
4997
  return [2 /*return*/, cTileset];
4984
- case 4:
4985
- if (!(params.tileset.type == Tileset.EType.PointCloud)) return [3 /*break*/, 6];
4998
+ case 5:
4999
+ if (!(params.tileset.type == Tileset.EType.PointCloud)) return [3 /*break*/, 7];
4986
5000
  return [4 /*yield*/, createTileset(loadUrl ? loadUrl : Tileset.GetPublicFileUrl({
4987
5001
  api: api,
4988
5002
  tilesetId: params.tileset.id,
4989
5003
  file: "tileset.json"
4990
5004
  }) + "?generation=" + params.tileset.generateVersion, null)];
4991
- case 5:
5005
+ case 6:
4992
5006
  cTileset_2 = _a.sent();
4993
5007
  params.viewer.scene.primitives.add(cTileset_2);
4994
5008
  cTileset_2.readyPromise.then(function () {
5009
+ var _a;
4995
5010
  try {
4996
5011
  if (!isAlive(params.viewer, cTileset_2)) {
4997
5012
  return;
4998
5013
  }
5014
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset_2);
4999
5015
  var settings = params.tileset.settings;
5000
5016
  ApplySettings({
5001
5017
  cTileset: cTileset_2,
@@ -5018,7 +5034,7 @@ var TilesetRenderEngine;
5018
5034
  }
5019
5035
  });
5020
5036
  return [2 /*return*/, cTileset_2];
5021
- case 6: throw ("Not implemented.");
5037
+ case 7: throw ("Not implemented.");
5022
5038
  }
5023
5039
  });
5024
5040
  });
@@ -5068,10 +5084,12 @@ var TilesetRenderEngine;
5068
5084
  cTileset = _a.sent();
5069
5085
  viewer.scene.primitives.add(cTileset);
5070
5086
  cTileset.readyPromise.then(function () {
5087
+ var _a;
5071
5088
  try {
5072
5089
  if (!isAlive(viewer, cTileset)) {
5073
5090
  return;
5074
5091
  }
5092
+ (_a = GetMemoryWatcher(params.viewer)) === null || _a === void 0 ? void 0 : _a.Watch(cTileset);
5075
5093
  if (tileset) {
5076
5094
  var settings_1 = tileset.Settings;
5077
5095
  settings_1 = __assign({}, settings_1);
@@ -5518,6 +5536,89 @@ var TilesetRenderEngine;
5518
5536
  return Styler;
5519
5537
  }());
5520
5538
  TilesetRenderEngine.Styler = Styler;
5539
+ /**
5540
+ * The maximum memory in MB that can be used by all tilesets.
5541
+ * This is distributed evenly between all loaded tilesets.
5542
+ */
5543
+ TilesetRenderEngine.MAX_TILESET_MEMORY = 1024;
5544
+ /**
5545
+ * Watches tilesets in the viewer.
5546
+ * This will regulate their max memory param.
5547
+ * As more get watched their memory will be reduced.
5548
+ */
5549
+ var MemoryWatcher = /** @class */ (function () {
5550
+ function MemoryWatcher(viewer) {
5551
+ this.watched = [];
5552
+ this.viewer = viewer;
5553
+ }
5554
+ MemoryWatcher.prototype.distributeMemory = function () {
5555
+ this.clean();
5556
+ // Total 1gb as default.
5557
+ // We'll need to allow user to change this somehow.
5558
+ var maxMemory = TilesetRenderEngine.MAX_TILESET_MEMORY;
5559
+ // Minimum memory in MB per tileset.
5560
+ var minMemory = 80;
5561
+ var totalPerTileset = Math.max(this.watched.length ? maxMemory / this.watched.length : maxMemory, minMemory);
5562
+ this.watched.forEach(function (x) {
5563
+ x.maximumMemoryUsage = totalPerTileset;
5564
+ });
5565
+ };
5566
+ MemoryWatcher.prototype.destroy = function () {
5567
+ this.watched = [];
5568
+ };
5569
+ /**
5570
+ * Remove all dead tilesets.
5571
+ */
5572
+ MemoryWatcher.prototype.clean = function () {
5573
+ var _this = this;
5574
+ // Remove all dead tilesets.
5575
+ this.watched = this.watched.filter(function (x) { return isAlive(_this.viewer, x); });
5576
+ // Check if viewer is destroyed.
5577
+ if (!this.viewer || this.viewer.isDestroyed()) {
5578
+ this.destroy();
5579
+ }
5580
+ };
5581
+ MemoryWatcher.prototype.Watch = function (tileset) {
5582
+ if (!tileset) {
5583
+ return;
5584
+ }
5585
+ if (!tileset[WATCH_KEY]) {
5586
+ tileset[WATCH_KEY] = ObjectUtils.UId();
5587
+ }
5588
+ var index = this.watched.findIndex(function (x) { return x[WATCH_KEY] === tileset[WATCH_KEY]; });
5589
+ if (index >= 0) {
5590
+ return;
5591
+ }
5592
+ this.watched.push(tileset);
5593
+ this.distributeMemory();
5594
+ };
5595
+ MemoryWatcher.prototype.Unwatch = function (tileset) {
5596
+ if (!tileset) {
5597
+ return;
5598
+ }
5599
+ if (!tileset[WATCH_KEY]) {
5600
+ tileset[WATCH_KEY] = ObjectUtils.UId();
5601
+ }
5602
+ var index = this.watched.findIndex(function (x) { return (x === null || x === void 0 ? void 0 : x[WATCH_KEY]) === tileset[WATCH_KEY]; });
5603
+ if (index > -1) {
5604
+ this.watched.splice(index, 1);
5605
+ }
5606
+ this.distributeMemory();
5607
+ };
5608
+ return MemoryWatcher;
5609
+ }());
5610
+ TilesetRenderEngine.MemoryWatcher = MemoryWatcher;
5611
+ function GetMemoryWatcher(viewer) {
5612
+ // If viewer is dead return nothing.
5613
+ if (!viewer || viewer.isDestroyed()) {
5614
+ return null;
5615
+ }
5616
+ if (!viewer[VIEWER_WATCH_KEY]) {
5617
+ viewer[VIEWER_WATCH_KEY] = new MemoryWatcher(viewer);
5618
+ }
5619
+ return viewer[VIEWER_WATCH_KEY];
5620
+ }
5621
+ TilesetRenderEngine.GetMemoryWatcher = GetMemoryWatcher;
5521
5622
  })(TilesetRenderEngine || (TilesetRenderEngine = {}));
5522
5623
 
5523
5624
  /**
@@ -5798,16 +5899,17 @@ var TilesetCadRenderManager;
5798
5899
  this.doDispose();
5799
5900
  };
5800
5901
  Manager.prototype.doDispose = function () {
5801
- var _a;
5902
+ var _a, _b;
5802
5903
  if (this.cTileset) {
5803
5904
  var viewer = this.viewer;
5804
5905
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
5805
5906
  this.cTileset.show = false;
5806
5907
  this.viewer.scene.primitives.remove(this.cTileset);
5908
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
5807
5909
  }
5808
5910
  this.cTileset = null;
5809
5911
  }
5810
- (_a = this.styler) === null || _a === void 0 ? void 0 : _a.Dispose();
5912
+ (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
5811
5913
  this.visualsManager.RemoveRegos({
5812
5914
  menuItemId: this.item.id
5813
5915
  });
@@ -6348,11 +6450,13 @@ var TilesetEntitiesRenderManager;
6348
6450
  this.doDispose();
6349
6451
  };
6350
6452
  Manager.prototype.doDispose = function () {
6453
+ var _a;
6351
6454
  if (this.cTileset) {
6352
6455
  var viewer = this.viewer;
6353
6456
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6354
6457
  this.cTileset.show = false;
6355
6458
  this.viewer.scene.primitives.remove(this.cTileset);
6459
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6356
6460
  }
6357
6461
  this.cTileset = null;
6358
6462
  }
@@ -6500,11 +6604,13 @@ var TilesetPointcloudRenderManager;
6500
6604
  this.doDispose();
6501
6605
  };
6502
6606
  Manager.prototype.doDispose = function () {
6607
+ var _a;
6503
6608
  if (this.cTileset) {
6504
6609
  var viewer = this.viewer;
6505
6610
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6506
6611
  this.cTileset.show = false;
6507
6612
  this.viewer.scene.primitives.remove(this.cTileset);
6613
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6508
6614
  }
6509
6615
  this.cTileset = null;
6510
6616
  }
@@ -6850,16 +6956,17 @@ var TilesetArbRenderManager;
6850
6956
  this.doDispose();
6851
6957
  };
6852
6958
  Manager.prototype.doDispose = function () {
6853
- var _a;
6959
+ var _a, _b;
6854
6960
  if (this.cTileset) {
6855
6961
  var viewer = this.viewer;
6856
6962
  if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
6857
6963
  this.cTileset.show = false;
6858
6964
  this.viewer.scene.primitives.remove(this.cTileset);
6965
+ (_a = TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
6859
6966
  }
6860
6967
  this.cTileset = null;
6861
6968
  }
6862
- (_a = this.styler) === null || _a === void 0 ? void 0 : _a.Dispose();
6969
+ (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
6863
6970
  this.visualsManager.RemoveRegos({
6864
6971
  menuItemId: this.item.id
6865
6972
  });
@@ -8693,7 +8800,7 @@ var TileRenderEngine;
8693
8800
  (function (Navigator) {
8694
8801
  function GetOrCreateLayer(params) {
8695
8802
  return __awaiter(this, void 0, void 0, function () {
8696
- var viewer, apiGetter, meta, enabled, i, layer, layerMeta, defaultImg, provider, api, tileset, settings, _a, _b, _c, mapboxKey, _d, layer;
8803
+ var viewer, apiGetter, meta, enabled, i, layer, layerMeta, defaultImg, provider, api, tileset, boundaries, settings, minLat, maxLat, minLon, maxLon, minLevel, maxLevel, hasLevels, settings_1, _a, _b, _c, mapboxKey, _d, layer;
8697
8804
  var _e;
8698
8805
  return __generator(this, function (_f) {
8699
8806
  switch (_f.label) {
@@ -8716,90 +8823,131 @@ var TileRenderEngine;
8716
8823
  return [4 /*yield*/, renderDefaultMapTile(apiGetter, defaultImg.id)];
8717
8824
  case 1:
8718
8825
  provider = _f.sent();
8719
- return [3 /*break*/, 15];
8826
+ return [3 /*break*/, 16];
8720
8827
  case 2:
8721
8828
  api = apiGetter.getApi(meta.accountId);
8829
+ // Ensure regional url is loaded.
8830
+ // When loading stuff in the same account as the default it's likely already loaded,
8831
+ // but if we just made an API instance for some external account then it won't be loaded yet.
8832
+ return [4 /*yield*/, api.Loading];
8833
+ case 3:
8834
+ // Ensure regional url is loaded.
8835
+ // When loading stuff in the same account as the default it's likely already loaded,
8836
+ // but if we just made an API instance for some external account then it won't be loaded yet.
8837
+ _f.sent();
8722
8838
  return [4 /*yield*/, Tileset.Get({
8723
8839
  api: api,
8724
8840
  tilesetId: meta.tilesetId
8725
8841
  })];
8726
- case 3:
8842
+ case 4:
8727
8843
  tileset = (_f.sent()).tileset;
8728
- if (!(tileset.type === Tileset.EType.GeoMap)) return [3 /*break*/, 4];
8844
+ boundaries = undefined;
8845
+ settings = tileset === null || tileset === void 0 ? void 0 : tileset.settings;
8846
+ if (settings && settings.boundaries) {
8847
+ minLat = settings.boundaries.minLatitude;
8848
+ maxLat = settings.boundaries.maxLatitude;
8849
+ minLon = settings.boundaries.minLongitude;
8850
+ maxLon = settings.boundaries.maxLongitude;
8851
+ boundaries = Rectangle.fromDegrees(minLon, minLat, maxLon, maxLat);
8852
+ }
8853
+ minLevel = settings === null || settings === void 0 ? void 0 : settings.levelMin;
8854
+ maxLevel = settings === null || settings === void 0 ? void 0 : settings.levelMax;
8855
+ hasLevels = !isNaN(minLevel) && !isNaN(maxLevel);
8856
+ if (!(tileset.type === Tileset.EType.GeoMap)) return [3 /*break*/, 5];
8729
8857
  provider = new TileMapServiceImageryProvider({
8730
8858
  url: Tileset.GetPublicFileUrl({
8731
8859
  api: api,
8732
8860
  tilesetId: meta.tilesetId,
8733
- file: ""
8861
+ file: "",
8862
+ viaCdn: true,
8863
+ viaCdnCacheToken: tileset.generateVersion
8734
8864
  }),
8735
- fileExtension: "png"
8865
+ fileExtension: "png",
8866
+ // Tested to not cause increased lag.
8867
+ rectangle: boundaries,
8868
+ maximumLevel: hasLevels ? maxLevel : undefined,
8869
+ minimumLevel: hasLevels ? minLevel : undefined,
8736
8870
  });
8737
- return [3 /*break*/, 15];
8738
- case 4:
8739
- if (!(tileset.type === Tileset.EType.ExternalGeoMap)) return [3 /*break*/, 14];
8740
- settings = tileset.settings;
8741
- _a = settings.mapType;
8871
+ return [3 /*break*/, 16];
8872
+ case 5:
8873
+ if (!(tileset.type === Tileset.EType.ExternalGeoMap)) return [3 /*break*/, 15];
8874
+ settings_1 = tileset.settings;
8875
+ _a = settings_1.mapType;
8742
8876
  switch (_a) {
8743
- case Tileset.Settings.EExternalMapType.CesiumIon: return [3 /*break*/, 5];
8744
- case Tileset.Settings.EExternalMapType.MapBoxImagery: return [3 /*break*/, 7];
8745
- case Tileset.Settings.EExternalMapType.OpenStreetMapImagery: return [3 /*break*/, 11];
8746
- case Tileset.Settings.EExternalMapType.TileMapImagery: return [3 /*break*/, 12];
8877
+ case Tileset.Settings.EExternalMapType.CesiumIon: return [3 /*break*/, 6];
8878
+ case Tileset.Settings.EExternalMapType.MapBoxImagery: return [3 /*break*/, 8];
8879
+ case Tileset.Settings.EExternalMapType.OpenStreetMapImagery: return [3 /*break*/, 12];
8880
+ case Tileset.Settings.EExternalMapType.TileMapImagery: return [3 /*break*/, 13];
8747
8881
  }
8748
- return [3 /*break*/, 13];
8749
- case 5:
8882
+ return [3 /*break*/, 14];
8883
+ case 6:
8750
8884
  _c = (_b = IonImageryProvider).bind;
8751
8885
  _e = {
8752
- assetId: settings.ionId
8886
+ assetId: settings_1.ionId
8753
8887
  };
8754
8888
  return [4 /*yield*/, findKey(apiGetter, ProgramKey.EProgramId.CesiumIon, null)];
8755
- case 6:
8889
+ case 7:
8756
8890
  provider = new (_c.apply(_b, [void 0, (_e.accessToken = _f.sent(),
8757
8891
  _e)]))();
8758
- return [3 /*break*/, 13];
8759
- case 7:
8760
- if (!settings.mapBoxKey) return [3 /*break*/, 8];
8761
- _d = settings.mapBoxKey;
8762
- return [3 /*break*/, 10];
8763
- case 8: return [4 /*yield*/, findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null)];
8764
- case 9:
8765
- _d = _f.sent();
8766
- _f.label = 10;
8892
+ return [3 /*break*/, 14];
8893
+ case 8:
8894
+ if (!settings_1.mapBoxKey) return [3 /*break*/, 9];
8895
+ _d = settings_1.mapBoxKey;
8896
+ return [3 /*break*/, 11];
8897
+ case 9: return [4 /*yield*/, findKey(apiGetter, ProgramKey.EProgramId.Mapbox, null)];
8767
8898
  case 10:
8899
+ _d = _f.sent();
8900
+ _f.label = 11;
8901
+ case 11:
8768
8902
  mapboxKey = _d;
8769
8903
  provider = new UrlTemplateImageryProvider({
8770
8904
  url: "https://api.mapbox.com/styles/v1/"
8771
- + settings.mapBoxAccount + "/" + settings.mapBoxStyleId +
8905
+ + settings_1.mapBoxAccount + "/" + settings_1.mapBoxStyleId +
8772
8906
  "/tiles/256/{z}/{x}/{y}?access_token="
8773
8907
  + mapboxKey
8774
8908
  });
8775
- return [3 /*break*/, 13];
8776
- case 11:
8909
+ return [3 /*break*/, 14];
8910
+ case 12:
8777
8911
  provider = new OpenStreetMapImageryProvider({
8778
- url: settings.url,
8779
- fileExtension: prepareFileExt(settings.sourceExt)
8912
+ url: settings_1.url,
8913
+ fileExtension: prepareFileExt(settings_1.sourceExt),
8914
+ // Unused until tested properly. In the past these settings caused large lag.
8915
+ // rectangle: boundaries,
8916
+ // maximumLevel: hasLevels ? maxLevel : undefined,
8917
+ // minimumLevel: hasLevels ? minLevel : undefined,
8780
8918
  });
8781
- return [3 /*break*/, 13];
8782
- case 12:
8919
+ return [3 /*break*/, 14];
8920
+ case 13:
8783
8921
  provider = new TileMapServiceImageryProvider({
8784
- url: settings.url,
8785
- fileExtension: prepareFileExt(settings.sourceExt)
8922
+ url: settings_1.url,
8923
+ fileExtension: prepareFileExt(settings_1.sourceExt),
8924
+ // Unused until tested properly. In the past these settings caused large lag.
8925
+ // rectangle: boundaries,
8926
+ // maximumLevel: hasLevels ? maxLevel : undefined,
8927
+ // minimumLevel: hasLevels ? minLevel : undefined,
8786
8928
  });
8787
- return [3 /*break*/, 13];
8788
- case 13: return [3 /*break*/, 15];
8789
- case 14:
8929
+ return [3 /*break*/, 14];
8930
+ case 14: return [3 /*break*/, 16];
8931
+ case 15:
8790
8932
  if (tileset.type === Tileset.EType.EntitiesMap) {
8791
8933
  provider = new UrlTemplateImageryProvider({
8792
8934
  url: Tileset.GetPublicFileUrl({
8793
8935
  api: api,
8794
8936
  tilesetId: meta.tilesetId,
8795
- file: "{z}/{x}/{y}.png"
8937
+ file: "{z}/{x}/{y}.png",
8938
+ viaCdn: true,
8939
+ viaCdnCacheToken: tileset.generateVersion
8796
8940
  }),
8797
8941
  tileHeight: 256,
8798
8942
  tileWidth: 256
8943
+ // Unused until tested properly. In the past these settings caused large lag.
8944
+ // rectangle: boundaries,
8945
+ // minimumLevel: hasLevels ? minLevel : undefined,
8946
+ // maximumLevel: hasLevels ? maxLevel : undefined,
8799
8947
  });
8800
8948
  }
8801
- _f.label = 15;
8802
- case 15:
8949
+ _f.label = 16;
8950
+ case 16:
8803
8951
  if (provider) {
8804
8952
  layer = viewer.imageryLayers.addImageryProvider(provider);
8805
8953
  layer._bMeta = meta;
@@ -9037,14 +9185,23 @@ var TileRenderEngine;
9037
9185
  return [4 /*yield*/, renderDefaultTerrTile(defaultTerr.id)];
9038
9186
  case 1:
9039
9187
  provider = (_b.sent());
9040
- return [3 /*break*/, 4];
9188
+ return [3 /*break*/, 5];
9041
9189
  case 2:
9042
9190
  api = params.apiGetter.getApi(params.tile.accountId);
9191
+ // Ensure regional url is loaded.
9192
+ // When loading stuff in the same account as the default it's likely already loaded,
9193
+ // but if we just made an API instance for some external account then it won't be loaded yet.
9194
+ return [4 /*yield*/, api.Loading];
9195
+ case 3:
9196
+ // Ensure regional url is loaded.
9197
+ // When loading stuff in the same account as the default it's likely already loaded,
9198
+ // but if we just made an API instance for some external account then it won't be loaded yet.
9199
+ _b.sent();
9043
9200
  return [4 /*yield*/, Tileset.Get({
9044
9201
  api: api,
9045
9202
  tilesetId: params.tile.tilesetId
9046
9203
  })];
9047
- case 3:
9204
+ case 4:
9048
9205
  tileset = (_b.sent()).tileset;
9049
9206
  url = void 0;
9050
9207
  vertexes = true;
@@ -9052,7 +9209,9 @@ var TileRenderEngine;
9052
9209
  url = Tileset.GetPublicFileUrl({
9053
9210
  api: api,
9054
9211
  tilesetId: tileset.id,
9055
- file: ""
9212
+ file: "",
9213
+ viaCdn: true,
9214
+ viaCdnCacheToken: tileset.generateVersion
9056
9215
  });
9057
9216
  }
9058
9217
  else if (tileset.type === Tileset.EType.ExternalTerrain) {
@@ -9069,8 +9228,8 @@ var TileRenderEngine;
9069
9228
  requestVertexNormals: vertexes
9070
9229
  });
9071
9230
  }
9072
- _b.label = 4;
9073
- case 4:
9231
+ _b.label = 5;
9232
+ case 5:
9074
9233
  if (provider) {
9075
9234
  provider._bMeta = {
9076
9235
  accountId: params.tile.accountId,