bruce-cesium 2.3.0 → 2.3.2

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, AbstractApi, EntityAttachment, EntityAttachmentType, EntityAttribute } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartographic, Cartesian2, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, Entity, Primitive, Cesium3DTileFeature, HeightReference, DistanceDisplayCondition, NearFarScalar, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, SceneMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, Cesium3DTileColorBlendMode, KmlDataSource, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, OrthographicFrustum, JulianDate, EllipsoidGeodesic, sampleTerrainMostDetailed, defined, Cesium3DTileset, Model, PolygonPipeline, ScreenSpaceEventHandler, ScreenSpaceEventType, Matrix4, Matrix3, IonResource, ColorMaterialProperty, EasingFunction, GeometryInstance, CesiumInspector, Ion, BoundingSphere } from 'cesium';
3
+ import { Cartographic, Cartesian2, CallbackProperty, Cartesian3, Color, Rectangle, Math as Math$1, SceneMode, Entity, Primitive, Cesium3DTileFeature, HeightReference, DistanceDisplayCondition, NearFarScalar, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Cesium3DTileColorBlendMode, HeadingPitchRange, createOsmBuildings, Cesium3DTileStyle, KmlDataSource, OrthographicFrustum, JulianDate, createWorldTerrain, EllipsoidTerrainProvider, CesiumTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, CesiumInspector, defined, PolygonPipeline, Cesium3DTileset, Matrix4, Matrix3, IonResource, EllipsoidGeodesic, sampleTerrainMostDetailed, Model, ScreenSpaceEventHandler, ScreenSpaceEventType, ColorMaterialProperty, EasingFunction, GeometryInstance, Ion, BoundingSphere } from 'cesium';
4
4
 
5
5
  var TIME_LAG = 300;
6
6
  var POSITION_CHECK_TIMER = 950;
@@ -3082,8 +3082,10 @@ function getClusterImage(params) {
3082
3082
  var FORCE_UPDATE_BATCH_SIZE = 1000;
3083
3083
  var FORCE_UPDATE_BATCH_DELAY = 100;
3084
3084
  var PointClustering = /** @class */ (function () {
3085
- function PointClustering(register, menuItemId) {
3085
+ function PointClustering(register, menuItemId, settings) {
3086
3086
  var _this = this;
3087
+ this.minDistance = 5000;
3088
+ this.minTotalCount = 0;
3087
3089
  this.disposed = false;
3088
3090
  this.registeredEntityIds = new Set();
3089
3091
  // Queue to force update entities.
@@ -3100,6 +3102,14 @@ var PointClustering = /** @class */ (function () {
3100
3102
  _this.doUpdate();
3101
3103
  }, 1000);
3102
3104
  this.listenCamera();
3105
+ if (settings) {
3106
+ if (!isNaN(+settings.minDistance)) {
3107
+ this.minDistance = +settings.minDistance;
3108
+ }
3109
+ if (!isNaN(+settings.minTotalCount)) {
3110
+ this.minTotalCount = +settings.minTotalCount;
3111
+ }
3112
+ }
3103
3113
  }
3104
3114
  PointClustering.prototype.queueForceUpdate = function (entityIds) {
3105
3115
  for (var i = 0; i < entityIds.length; i++) {
@@ -3381,51 +3391,55 @@ var PointClustering = /** @class */ (function () {
3381
3391
  var clusters = [];
3382
3392
  var processedPoints = new Set();
3383
3393
  var cameraPosition = this.viewer.camera.position;
3384
- var MIN_CAMERA_DISTANCE = 5000;
3385
- var processQuad = function (quad) {
3386
- // Distance to quad.
3387
- // TODO: Needs improvement.
3388
- var distanceToQuad = quad.GetDistanceToQuad(cameraPosition);
3389
- // Skip quads that are too close.
3390
- if (distanceToQuad >= MIN_CAMERA_DISTANCE) {
3391
- for (var _i = 0, _a = quad.points; _i < _a.length; _i++) {
3392
- var point = _a[_i];
3393
- // Skip points already processed in previous clusters.
3394
- if (processedPoints.has(point.id)) {
3395
- continue;
3396
- }
3397
- // Skip points closer than MIN_CAMERA_DISTANCE meters to the camera.
3398
- var cartesian3 = Cartesian3.fromDegrees(point.lon, point.lat);
3399
- var distanceFromCluster = Cartesian3.distance(cartesian3, cameraPosition);
3400
- if (distanceFromCluster <= MIN_CAMERA_DISTANCE) {
3401
- continue;
3402
- }
3403
- var found = [];
3404
- var nearbyPoints = quad.Query(new Circle(point.lon, point.lat, _this.getClusterSpacing(distanceFromCluster)), found);
3405
- if (nearbyPoints.length > 1) {
3406
- var cluster = { center: point, points: [] };
3407
- for (var _b = 0, nearbyPoints_1 = nearbyPoints; _b < nearbyPoints_1.length; _b++) {
3408
- var nearby = nearbyPoints_1[_b];
3409
- if (!processedPoints.has(nearby.id) && !cluster.points.includes(nearby)) {
3410
- cluster.points.push(nearby);
3411
- processedPoints.add(nearby.id);
3412
- _this.currClusteredEntities.add(nearby.id);
3394
+ // Only cluster if total registered points exceeds minTotalCount.
3395
+ var validClusters = [];
3396
+ if (this.registeredEntityIds.size < this.minTotalCount) {
3397
+ var MIN_CAMERA_DISTANCE_1 = this.minDistance;
3398
+ var processQuad_1 = function (quad) {
3399
+ // Distance to quad.
3400
+ // TODO: Needs improvement.
3401
+ var distanceToQuad = quad.GetDistanceToQuad(cameraPosition);
3402
+ // Skip quads that are too close.
3403
+ if (distanceToQuad >= MIN_CAMERA_DISTANCE_1) {
3404
+ for (var _i = 0, _a = quad.points; _i < _a.length; _i++) {
3405
+ var point = _a[_i];
3406
+ // Skip points already processed in previous clusters.
3407
+ if (processedPoints.has(point.id)) {
3408
+ continue;
3409
+ }
3410
+ // Skip points closer than MIN_CAMERA_DISTANCE meters to the camera.
3411
+ var cartesian3 = Cartesian3.fromDegrees(point.lon, point.lat);
3412
+ var distanceFromCluster = Cartesian3.distance(cartesian3, cameraPosition);
3413
+ if (distanceFromCluster <= MIN_CAMERA_DISTANCE_1) {
3414
+ continue;
3415
+ }
3416
+ var found = [];
3417
+ var nearbyPoints = quad.Query(new Circle(point.lon, point.lat, _this.getClusterSpacing(distanceFromCluster)), found);
3418
+ if (nearbyPoints.length > 1) {
3419
+ var cluster = { center: point, points: [] };
3420
+ for (var _b = 0, nearbyPoints_1 = nearbyPoints; _b < nearbyPoints_1.length; _b++) {
3421
+ var nearby = nearbyPoints_1[_b];
3422
+ if (!processedPoints.has(nearby.id) && !cluster.points.includes(nearby)) {
3423
+ cluster.points.push(nearby);
3424
+ processedPoints.add(nearby.id);
3425
+ _this.currClusteredEntities.add(nearby.id);
3426
+ }
3413
3427
  }
3428
+ clusters.push(cluster);
3414
3429
  }
3415
- clusters.push(cluster);
3416
3430
  }
3417
3431
  }
3418
- }
3419
- if (quad.divided) {
3420
- processQuad(quad.northwest);
3421
- processQuad(quad.northeast);
3422
- processQuad(quad.southwest);
3423
- processQuad(quad.southeast);
3424
- }
3425
- };
3426
- processQuad(this.quadTree);
3427
- // Filter out clusters with only one point.
3428
- var validClusters = clusters.filter(function (cluster) { return cluster.points.length > 1; });
3432
+ if (quad.divided) {
3433
+ processQuad_1(quad.northwest);
3434
+ processQuad_1(quad.northeast);
3435
+ processQuad_1(quad.southwest);
3436
+ processQuad_1(quad.southeast);
3437
+ }
3438
+ };
3439
+ processQuad_1(this.quadTree);
3440
+ // Filter out clusters with only one point.
3441
+ validClusters = clusters.filter(function (cluster) { return cluster.points.length > 1; });
3442
+ }
3429
3443
  // Get the entity IDs that are no longer clustered
3430
3444
  var noLongerClustered = new Set(Array.from(this.prevClusteredEntities).filter(function (id) { return !_this.currClusteredEntities.has(id); }));
3431
3445
  // Update the previous clustered entities ref.
@@ -3581,7 +3595,7 @@ var EntitiesRenderManager;
3581
3595
  });
3582
3596
  Manager.prototype.Init = function (params) {
3583
3597
  var _this = this;
3584
- var _a, _b, _c, _d, _e, _f, _g, _h;
3598
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
3585
3599
  if (this.disposed) {
3586
3600
  throw (new Error("This item is disposed."));
3587
3601
  }
@@ -3635,12 +3649,12 @@ var EntitiesRenderManager;
3635
3649
  return;
3636
3650
  }
3637
3651
  if (this.item.enableClustering) {
3638
- this.clustering = new PointClustering(this.visualsManager, this.item.id);
3652
+ this.clustering = new PointClustering(this.visualsManager, this.item.id, (_h = this.item) === null || _h === void 0 ? void 0 : _h.clustering);
3639
3653
  }
3640
3654
  var api = this.apiGetter.getApi();
3641
3655
  this.getter = this.sharedGetters.GetOrCreateFilterGetter({
3642
3656
  api: api,
3643
- attrFilter: (_h = this.item.BruceEntity.Filter) !== null && _h !== void 0 ? _h : {},
3657
+ attrFilter: (_j = this.item.BruceEntity.Filter) !== null && _j !== void 0 ? _j : {},
3644
3658
  batchSize: BATCH_SIZE,
3645
3659
  typeId: this.item.BruceEntity["EntityType.ID"],
3646
3660
  monitor: this.monitor,
@@ -5535,6 +5549,7 @@ var EntitiesIdsRenderManager;
5535
5549
  (function (EntitiesIdsRenderManager) {
5536
5550
  var Manager = /** @class */ (function () {
5537
5551
  function Manager(params) {
5552
+ var _a;
5538
5553
  this.getter = null;
5539
5554
  this.getterSub = null;
5540
5555
  this.disposed = false;
@@ -5546,7 +5561,7 @@ var EntitiesIdsRenderManager;
5546
5561
  this.item = item;
5547
5562
  this.visualsManager = visualsManager;
5548
5563
  if (this.item.enableClustering) {
5549
- this.clustering = new PointClustering(visualsManager, this.item.id);
5564
+ this.clustering = new PointClustering(visualsManager, this.item.id, (_a = this.item) === null || _a === void 0 ? void 0 : _a.clustering);
5550
5565
  }
5551
5566
  }
5552
5567
  Object.defineProperty(Manager.prototype, "Disposed", {
@@ -14241,7 +14256,7 @@ var ViewerUtils;
14241
14256
  ViewerUtils.CreateWidgets = CreateWidgets;
14242
14257
  })(ViewerUtils || (ViewerUtils = {}));
14243
14258
 
14244
- var VERSION$1 = "2.2.9";
14259
+ var VERSION$1 = "2.3.2";
14245
14260
 
14246
14261
  export { VERSION$1 as VERSION, CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, RelationsRenderManager, SharedGetters, CesiumParabola, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, Draw3dPolygon, Draw3dPolyline };
14247
14262
  //# sourceMappingURL=bruce-cesium.es5.js.map