bruce-cesium 7.3.8 → 7.3.9

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.
@@ -83,7 +83,7 @@ __exportStar(require("./widgets/widget-info-view"), exports);
83
83
  __exportStar(require("./widgets/widget-left-panel"), exports);
84
84
  __exportStar(require("./widgets/widget-nav-compass"), exports);
85
85
  __exportStar(require("./widgets/widget-view-bar"), exports);
86
- exports.VERSION = "7.3.8";
86
+ exports.VERSION = "7.3.9";
87
87
  /**
88
88
  * Updates the environment instance used by bruce-cesium to one specified.
89
89
  * This can be used to ensure that the instance a parent is referencing is shared between bruce-cesium, bruce-models, and the parent app.
@@ -4,6 +4,7 @@ exports.EntityGatherer = void 0;
4
4
  const bruce_models_1 = require("bruce-models");
5
5
  const Cesium = require("cesium");
6
6
  const historic_utils_1 = require("./render-managers/common/historic-utils");
7
+ const cesium_utils_1 = require("../internal/cesium-utils");
7
8
  class EntityGatherer {
8
9
  get OnQueueProgress() {
9
10
  if (!this._onQueueProgress) {
@@ -41,6 +42,19 @@ class EntityGatherer {
41
42
  // All IDs that have ever been queued.
42
43
  // When nothing is in queue, we'll re-request the existing IDs based on timeline changes.
43
44
  this.allEIds = new Set();
45
+ // IDs a historic read has actually answered with a record, rather than falling back to a stub.
46
+ // A refresh serves these before the ones that have never produced anything.
47
+ this.everFound = new Set();
48
+ // Every known Entity bucketed by the ground cell its position falls in, so a refresh can ask
49
+ // what the view reaches instead of walking the whole set. Built as IDs arrive.
50
+ this.cells = new Map();
51
+ // IDs the position source could not place yet. They are always refreshed.
52
+ this.unplaced = new Set();
53
+ // The IDs the last decision found inside the view, so a camera move can queue the difference
54
+ // rather than re-requesting everything it already asked about.
55
+ this.lastInView = new Set();
56
+ // Unsubscribes the view monitor listener that queues what the camera has moved onto.
57
+ this.monitorRemoval = null;
44
58
  // Indicates a tick is active.
45
59
  // When true, we won't bother calling onTick again.
46
60
  this.runningTick = false;
@@ -91,6 +105,16 @@ class EntityGatherer {
91
105
  }
92
106
  this.historic = historic;
93
107
  this.expandSources = expandSources;
108
+ if (this.historic) {
109
+ // Anything already known was taken in before the index was being built, so it is filed
110
+ // a bounded number at a time from here rather than in one pass now.
111
+ for (const entityId of this.allEIds) {
112
+ this.unplaced.add(entityId);
113
+ }
114
+ }
115
+ else {
116
+ this.clearIndex();
117
+ }
94
118
  if (this.historic) {
95
119
  // 4 ticks per second.
96
120
  // The fastest data we are working with is 5 times per second.
@@ -142,6 +166,8 @@ class EntityGatherer {
142
166
  this.lastOrderFocus = null;
143
167
  this.allEIds.clear();
144
168
  this.lastFoundDateTimes.clear();
169
+ this.everFound.clear();
170
+ this.clearIndex();
145
171
  this.lastDateTime = null;
146
172
  }
147
173
  ReQueueAll() {
@@ -152,22 +178,193 @@ class EntityGatherer {
152
178
  this.eIdQueued = new Set(this.eIdQueue);
153
179
  this.priorityCount = 0;
154
180
  this.lastOrderFocus = null;
181
+ this.clearIndex();
155
182
  }
156
183
  /**
157
- * Supplies a lookup from Entity ID to world position, letting the queue resolve what the camera
158
- * is nearest first. Sources that cannot answer should not call this, and are served in order.
184
+ * Supplies a lookup from Entity ID to world position, letting the queue resolve what the camera is nearest first.
185
+ * Sources that cannot answer should not call this, and are served in order.
159
186
  */
160
187
  SetPositionSource(positionOf) {
161
188
  this.positionOf = positionOf;
162
189
  this.lastOrderFocus = null;
190
+ this.cells.clear();
191
+ this.lastInView.clear();
192
+ for (const entityId of this.allEIds) {
193
+ this.unplaced.add(entityId);
194
+ }
163
195
  }
164
196
  /**
165
- * Supplies the view monitor, so the order follows the ground the camera is aimed at and prefers
166
- * what is on screen. Without one the ordering falls back to distance from the camera itself.
197
+ * Supplies the view monitor, so the order follows the ground the camera is aimed at and prefers what is on screen.
198
+ * Without one the ordering falls back to distance from the camera itself.
167
199
  */
168
200
  SetViewMonitor(monitor) {
201
+ var _a;
202
+ (_a = this.monitorRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
203
+ this.monitorRemoval = null;
169
204
  this.monitor = monitor;
170
205
  this.lastOrderFocus = null;
206
+ if (!monitor) {
207
+ return;
208
+ }
209
+ this.monitorRemoval = monitor.Updated().Subscribe(() => {
210
+ this.admitNewlyInView();
211
+ });
212
+ }
213
+ /*
214
+ * Queues whatever the camera has moved onto since the last decision.
215
+ */
216
+ admitNewlyInView() {
217
+ if (this.disposed || !this.historic) {
218
+ return;
219
+ }
220
+ const inView = this.decideInView();
221
+ if (!inView) {
222
+ return;
223
+ }
224
+ const admit = [];
225
+ for (const entityId of inView) {
226
+ if (!this.lastInView.has(entityId)) {
227
+ admit.push(entityId);
228
+ }
229
+ }
230
+ this.lastInView = new Set(inView);
231
+ if (admit.length) {
232
+ this.Queue(admit);
233
+ }
234
+ }
235
+ /*
236
+ * Returns the IDs a refresh should ask about, or null when the view cannot say and the answer has to be everything.
237
+ */
238
+ decideInView() {
239
+ if (!this.historic || !this.positionOf || !this.monitor) {
240
+ return null;
241
+ }
242
+ const area = this.refreshArea();
243
+ if (!area) {
244
+ return null;
245
+ }
246
+ const inView = [];
247
+ for (const key of this.candidateCellKeys(area)) {
248
+ const cell = this.cells.get(key);
249
+ if (!cell) {
250
+ continue;
251
+ }
252
+ for (let i = 0; i < cell.ids.length; i++) {
253
+ if (historic_utils_1.HistoricFetchOrder.InDegreeBounds(cell.lats[i], cell.lons[i], area)) {
254
+ inView.push(cell.ids[i]);
255
+ }
256
+ }
257
+ }
258
+ // Anything the source cannot place yet is asked about rather than quietly dropped.
259
+ for (const entityId of this.unplaced) {
260
+ inView.push(entityId);
261
+ }
262
+ return inView;
263
+ }
264
+ /*
265
+ * Returns the cell keys a rectangle can reach.
266
+ */
267
+ candidateCellKeys(area) {
268
+ const size = EntityGatherer.CELL_DEGREES;
269
+ const southCell = Math.floor(area.south / size);
270
+ const northCell = Math.floor(area.north / size);
271
+ const spans = (area.west > area.east ? [
272
+ {
273
+ from: Math.floor(area.west / size),
274
+ to: Math.floor(180 / size)
275
+ },
276
+ {
277
+ from: Math.floor(-180 / size),
278
+ to: Math.floor(area.east / size)
279
+ }
280
+ ] :
281
+ [{
282
+ from: Math.floor(area.west / size),
283
+ to: Math.floor(area.east / size)
284
+ }]);
285
+ let width = 0;
286
+ for (const span of spans) {
287
+ width += (span.to - span.from) + 1;
288
+ }
289
+ const wanted = ((northCell - southCell) + 1) * width;
290
+ if (!(wanted > 0) || wanted > this.cells.size) {
291
+ return Array.from(this.cells.keys());
292
+ }
293
+ const keys = [];
294
+ for (let lat = southCell; lat <= northCell; lat++) {
295
+ for (const span of spans) {
296
+ for (let lon = span.from; lon <= span.to; lon++) {
297
+ keys.push(lat + ":" + lon);
298
+ }
299
+ }
300
+ }
301
+ return keys;
302
+ }
303
+ /*
304
+ * Files an Entity in the cell its position falls in.
305
+ */
306
+ place(entityId) {
307
+ const degrees = this.degreesOf(entityId);
308
+ if (!degrees) {
309
+ this.unplaced.add(entityId);
310
+ return;
311
+ }
312
+ const size = EntityGatherer.CELL_DEGREES;
313
+ const key = Math.floor(degrees.lat / size) + ":" + Math.floor(degrees.lon / size);
314
+ let cell = this.cells.get(key);
315
+ if (!cell) {
316
+ cell = { ids: [], lats: [], lons: [] };
317
+ this.cells.set(key, cell);
318
+ }
319
+ cell.ids.push(entityId);
320
+ cell.lats.push(degrees.lat);
321
+ cell.lons.push(degrees.lon);
322
+ this.unplaced.delete(entityId);
323
+ }
324
+ /*
325
+ * Retries a bounded number of the Entities the source could not place before, so a late baked
326
+ * position joins the index without any one tick paying for all of them.
327
+ */
328
+ placeStragglers() {
329
+ if (!this.unplaced.size || !this.positionOf) {
330
+ return;
331
+ }
332
+ let budget = EntityGatherer.PLACE_BATCH;
333
+ for (const entityId of this.unplaced) {
334
+ if (budget-- <= 0) {
335
+ return;
336
+ }
337
+ this.place(entityId);
338
+ }
339
+ }
340
+ clearIndex() {
341
+ this.cells.clear();
342
+ this.unplaced.clear();
343
+ this.lastInView.clear();
344
+ }
345
+ /*
346
+ * Returns where an Entity sits in degrees, or null when the source cannot place it.
347
+ */
348
+ degreesOf(entityId) {
349
+ let pos = null;
350
+ try {
351
+ pos = this.positionOf ? this.positionOf(entityId) : null;
352
+ }
353
+ catch {
354
+ pos = null;
355
+ }
356
+ return pos ? (0, cesium_utils_1.CartesianToDegrees)(pos) : null;
357
+ }
358
+ /*
359
+ * Returns the visible rectangle plus the margin a refresh still reaches into,
360
+ * or null when the view cannot say, which is what leaves every Entity in.
361
+ */
362
+ refreshArea() {
363
+ const focus = historic_utils_1.HistoricFetchOrder.FocusFrom({ viewer: this.viewer, monitor: this.monitor });
364
+ if (!(focus === null || focus === void 0 ? void 0 : focus.bounds)) {
365
+ return null;
366
+ }
367
+ return historic_utils_1.HistoricFetchOrder.GrowBounds(focus.bounds, historic_utils_1.HistoricFetchOrder.RefreshMarginFor(focus.bounds));
171
368
  }
172
369
  /**
173
370
  * Re-bands the pending queue so the nearest Entities are requested first.
@@ -180,8 +377,6 @@ class EntityGatherer {
180
377
  if (!focus) {
181
378
  return;
182
379
  }
183
- // Re-banding on every batch would cost a full pass per request for no change in the answer.
184
- // Measured on the focus, so panning across the ground counts even when the eye barely moves.
185
380
  if (this.lastOrderFocus && !EntityGatherer.boundsChanged(this.lastOrderFocus, focus) &&
186
381
  Cesium.Cartesian3.distance(this.lastOrderFocus.origin, focus.origin) < EntityGatherer.REORDER_MOVE_METRES) {
187
382
  return;
@@ -228,26 +423,47 @@ class EntityGatherer {
228
423
  });
229
424
  const ordered = [];
230
425
  for (const band of banded) {
426
+ // Within a band, the ones a read has answered for go first.
427
+ // A building that has never produced a record is the one least likely to start now, so it waits.
428
+ const withData = [];
429
+ const withoutData = [];
231
430
  for (const entityId of band) {
431
+ (this.everFound.has(entityId) ? withData : withoutData).push(entityId);
432
+ }
433
+ for (const entityId of withData) {
434
+ ordered.push(entityId);
435
+ }
436
+ for (const entityId of withoutData) {
232
437
  ordered.push(entityId);
233
438
  }
234
439
  }
235
440
  return ordered;
236
441
  }
442
+ /*
443
+ * Takes an ID into the known set, filing it in the index the first time it is seen.
444
+ */
445
+ remember(entityId) {
446
+ if (this.allEIds.has(entityId)) {
447
+ return;
448
+ }
449
+ this.allEIds.add(entityId);
450
+ // Only a historic refresh reads the index, so nothing else pays to build it.
451
+ if (this.historic) {
452
+ this.place(entityId);
453
+ }
454
+ }
237
455
  Queue(entityIds, topOfQueue = false) {
238
456
  if (this.disposed || !(entityIds === null || entityIds === void 0 ? void 0 : entityIds.length)) {
239
457
  return;
240
458
  }
241
459
  let changes = 0;
242
460
  if (topOfQueue) {
243
- // Walked back to front so a repeated ID keeps the position of its last occurrence, then
244
- // laid down in that order, which is where inserting one at a time leaves them.
245
461
  const toFront = [];
246
462
  const promoting = new Set();
247
463
  let anyAlreadyQueued = false;
248
464
  for (let i = entityIds.length - 1; i >= 0; i--) {
249
465
  const eId = entityIds[i];
250
- this.allEIds.add(eId);
466
+ this.remember(eId);
251
467
  if (promoting.has(eId)) {
252
468
  continue;
253
469
  }
@@ -283,7 +499,7 @@ class EntityGatherer {
283
499
  else {
284
500
  for (let i = 0; i < entityIds.length; i++) {
285
501
  const eId = entityIds[i];
286
- this.allEIds.add(eId);
502
+ this.remember(eId);
287
503
  if (this.eIdQueued.has(eId)) {
288
504
  continue;
289
505
  }
@@ -298,19 +514,22 @@ class EntityGatherer {
298
514
  this.onTick(false);
299
515
  }
300
516
  Dispose() {
517
+ var _a;
301
518
  if (this.disposed) {
302
519
  return;
303
520
  }
304
521
  this.disposed = true;
522
+ (_a = this.monitorRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
523
+ this.monitorRemoval = null;
305
524
  this.hDisposals.forEach((d) => d());
306
525
  this.hDisposals = [];
307
- // A tick still awaiting a response resumes after this, and anything left here would have it
308
- // ask for the whole set again on the way out.
309
526
  this.eIdQueue = [];
310
527
  this.eIdQueued.clear();
311
528
  this.priorityCount = 0;
312
529
  this.allEIds.clear();
313
530
  this.lastFoundDateTimes.clear();
531
+ this.everFound.clear();
532
+ this.clearIndex();
314
533
  this.entityDataOverrides.clear();
315
534
  }
316
535
  checkRange(force) {
@@ -334,6 +553,7 @@ class EntityGatherer {
334
553
  this.lastDateTime = rTime;
335
554
  (async () => {
336
555
  this.runningTick = true;
556
+ this.placeStragglers();
337
557
  let rerun = false;
338
558
  try {
339
559
  const handleResponse = async (requestedBatch, entities) => {
@@ -346,6 +566,13 @@ class EntityGatherer {
346
566
  foundById.set(entityId, entity);
347
567
  }
348
568
  }
569
+ if (this.historic) {
570
+ for (const entityId of requestedBatch || []) {
571
+ if (foundById.has(entityId)) {
572
+ this.everFound.add(entityId);
573
+ }
574
+ }
575
+ }
349
576
  for (const entityId of requestedBatch || []) {
350
577
  const override = this.entityDataOverrides.get(entityId);
351
578
  if (override) {
@@ -474,15 +701,16 @@ class EntityGatherer {
474
701
  this._onQueueProgress.Trigger(100);
475
702
  }
476
703
  }
477
- // Now run through all IDs that we've seen and request them.
704
+ // Now run through the IDs we've seen that the view still reaches, and request them.
478
705
  // We'll skip those that we just requested.
479
- let allEIds = Array.from(this.allEIds);
706
+ const inView = this.decideInView();
707
+ this.lastInView = inView ? new Set(inView) : new Set();
708
+ let allEIds = inView || Array.from(this.allEIds);
480
709
  if (requestedIds.size) {
481
710
  allEIds = allEIds.filter((eId) => !requestedIds.has(eId));
482
711
  }
483
712
  if (allEIds.length) {
484
- // A historic tick re-reads the whole set, so the near ones are worth resolving
485
- // first here even more than in the queue above.
713
+ // The near ones are resolved first out of whatever the view still reaches.
486
714
  allEIds = this.bandIds(allEIds);
487
715
  while (allEIds.length && !this.disposed && !this.eIdQueue.length) {
488
716
  if (this.historic && this.lastDateTime !== rTime) {
@@ -521,6 +749,11 @@ class EntityGatherer {
521
749
  }
522
750
  // Below this the whole queue clears in one or two requests, so ordering it buys nothing.
523
751
  EntityGatherer.MIN_ORDER_QUEUE = 500;
752
+ // Side of the ground cells Entities are bucketed into, in degrees.
753
+ // About a kilometre, so a view covers a handful of them rather than hundreds.
754
+ EntityGatherer.CELL_DEGREES = 0.01;
755
+ // How many Entities one tick will try to place in the index.
756
+ EntityGatherer.PLACE_BATCH = 20000;
524
757
  // How far the point being looked at has to move before the queue is worth re-banding, in metres.
525
758
  // Under the nearest band's width, so a move that could change what is nearest still triggers one.
526
759
  EntityGatherer.REORDER_MOVE_METRES = 250;
@@ -1 +1 @@
1
- {"version":3,"file":"entity-gatherer.js","sourceRoot":"","sources":["../../../src/rendering/entity-gatherer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-gatherer.js","sourceRoot":"","sources":["../../../src/rendering/entity-gatherer.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,6 @@ const view_utils_1 = require("../../../utils/view-utils");
8
8
  const cesium_utils_1 = require("../../../internal/cesium-utils");
9
9
  /**
10
10
  * How often a historic refresh is worth running, and which Entities it should ask about first.
11
- *
12
- * A handful of tracked vehicles can afford to re-read on almost every clock tick. Thousands of
13
- * parcels cannot, and refreshing them that often was never buying anything since the answer barely
14
- * changes between ticks.
15
11
  */
16
12
  var HistoricFetchOrder;
17
13
  (function (HistoricFetchOrder) {
@@ -56,6 +52,13 @@ var HistoricFetchOrder;
56
52
  HistoricFetchOrder.IntervalForClock = IntervalForClock;
57
53
  // Upper bounds in metres for the distance bands, nearest first.
58
54
  HistoricFetchOrder.DEFAULT_BANDS = [500, 2000, 10000, 50000];
55
+ // How far outside the visible rectangle something still counts as worth re-reading, share of the view itself.
56
+ HistoricFetchOrder.REFRESH_MARGIN_FRACTION = 0.5;
57
+ // A close view still gets a usable buffer, and a distant one does not reach half the account.
58
+ HistoricFetchOrder.MIN_REFRESH_MARGIN_METRES = 250;
59
+ HistoricFetchOrder.MAX_REFRESH_MARGIN_METRES = 2000;
60
+ const METRES_PER_DEGREE_LAT = 111320;
61
+ const MIN_LAT_COSINE = 0.01;
59
62
  /**
60
63
  * Resolves what to order by from the view monitor, falling back to the camera itself.
61
64
  */
@@ -136,6 +139,55 @@ var HistoricFetchOrder;
136
139
  return grouped.filter(group => group.length > 0);
137
140
  }
138
141
  HistoricFetchOrder.ByCameraDistanceOf = ByCameraDistanceOf;
142
+ /**
143
+ * Returns how far past a visible rectangle a refresh should still reach, in metres.
144
+ */
145
+ function RefreshMarginFor(bounds) {
146
+ if (!bounds) {
147
+ return HistoricFetchOrder.MIN_REFRESH_MARGIN_METRES;
148
+ }
149
+ const latSpan = Math.abs(bounds.north - bounds.south) * METRES_PER_DEGREE_LAT;
150
+ const cosine = Math.max(MIN_LAT_COSINE, Math.cos(Cesium.Math.toRadians((bounds.north + bounds.south) / 2)));
151
+ const lonDegrees = bounds.west > bounds.east
152
+ ? (bounds.east + 360) - bounds.west
153
+ : bounds.east - bounds.west;
154
+ const lonSpan = Math.abs(lonDegrees) * METRES_PER_DEGREE_LAT * cosine;
155
+ const span = Math.min(latSpan, lonSpan);
156
+ if (!(span > 0)) {
157
+ return HistoricFetchOrder.MIN_REFRESH_MARGIN_METRES;
158
+ }
159
+ return Math.min(HistoricFetchOrder.MAX_REFRESH_MARGIN_METRES, Math.max(HistoricFetchOrder.MIN_REFRESH_MARGIN_METRES, span * HistoricFetchOrder.REFRESH_MARGIN_FRACTION));
160
+ }
161
+ HistoricFetchOrder.RefreshMarginFor = RefreshMarginFor;
162
+ /**
163
+ * Returns the rectangle grown outwards by a margin in metres.
164
+ */
165
+ function GrowBounds(bounds, metres) {
166
+ if (!bounds || !(metres > 0)) {
167
+ return bounds;
168
+ }
169
+ const dLat = metres / METRES_PER_DEGREE_LAT;
170
+ const north = Math.min(90, bounds.north + dLat);
171
+ const south = Math.max(-90, bounds.south - dLat);
172
+ const cosine = Math.cos(Cesium.Math.toRadians((bounds.north + bounds.south) / 2));
173
+ if (cosine < MIN_LAT_COSINE) {
174
+ return { north, south, west: -180, east: 180 };
175
+ }
176
+ const dLon = metres / (METRES_PER_DEGREE_LAT * cosine);
177
+ const straddles = bounds.west > bounds.east;
178
+ const gap = straddles ? bounds.west - bounds.east : 360 - (bounds.east - bounds.west);
179
+ if (gap <= dLon * 2) {
180
+ return { north, south, west: -180, east: 180 };
181
+ }
182
+ return { north, south, west: wrapLongitude(bounds.west - dLon), east: wrapLongitude(bounds.east + dLon) };
183
+ }
184
+ HistoricFetchOrder.GrowBounds = GrowBounds;
185
+ /*
186
+ * Returns a longitude folded back into the range the bounds are expressed in.
187
+ */
188
+ function wrapLongitude(lon) {
189
+ return (((lon + 180) % 360) + 360) % 360 - 180;
190
+ }
139
191
  /*
140
192
  * Returns whether a world position sits inside a ground rectangle given in degrees.
141
193
  */
@@ -144,17 +196,22 @@ var HistoricFetchOrder;
144
196
  if (!degrees) {
145
197
  return false;
146
198
  }
147
- const { lat, lon } = degrees;
199
+ return InDegreeBounds(degrees.lat, degrees.lon, bounds);
200
+ }
201
+ HistoricFetchOrder.InBounds = InBounds;
202
+ /*
203
+ * The same test for a caller that already holds the degrees and should not pay to resolve them from a world position again.
204
+ */
205
+ function InDegreeBounds(lat, lon, bounds) {
148
206
  if (lat < bounds.south || lat > bounds.north) {
149
207
  return false;
150
208
  }
151
- // A view straddling the antimeridian reports west east of east, so the span is the outside.
152
209
  if (bounds.west > bounds.east) {
153
210
  return lon >= bounds.west || lon <= bounds.east;
154
211
  }
155
212
  return lon >= bounds.west && lon <= bounds.east;
156
213
  }
157
- HistoricFetchOrder.InBounds = InBounds;
214
+ HistoricFetchOrder.InDegreeBounds = InDegreeBounds;
158
215
  /*
159
216
  * Returns an Entity's world position, or null when it has none to place it by.
160
217
  */