signalk-livedepth-plugin 0.3.0 → 0.3.3

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.
@@ -3,55 +3,209 @@ import { correctToTransducer } from "../tiles/core/index.js";
3
3
  import { Temporal } from "@js-temporal/polyfill";
4
4
  /** Maximum age of last position fix for a depth to be saved */
5
5
  const ttl = 2000;
6
+ /** How often to look for vessels that have started (or stopped) publishing. */
7
+ const scanIntervalMs = 15000;
8
+ /** A vessel's own fix and heading, subscribed alongside its depth so a
9
+ * sounding is paired with the position it was recorded at. */
10
+ const POSITION = "navigation.position";
11
+ const HEADING = "navigation.headingTrue";
12
+ /** Course over ground — the heading fallback for a vessel with no compass. */
13
+ const COURSE = "navigation.courseOverGroundTrue";
14
+ /** The `[lon, lat]` of a position in either raw (`{ longitude, latitude }`) or
15
+ * data-model node (`{ value: { … }, timestamp }`) form. */
16
+ function positionOf(value) {
17
+ const v = value?.value ?? value;
18
+ if (!v || typeof v !== "object")
19
+ return undefined;
20
+ const { longitude, latitude } = v;
21
+ if (typeof longitude === "number" && typeof latitude === "number") {
22
+ return { longitude, latitude };
23
+ }
24
+ return undefined;
25
+ }
6
26
  /**
7
- * Subscribe to the vessel's own depth and pair each sounding with the last
8
- * position fix, emitting `BathymetryData` objects. When `offset` is given, the
9
- * position is shifted from the vessel reference point to the transducer.
27
+ * Subscribe to every vessel that publishes a depth on the configured datum,
28
+ * pair each sounding with that vessel's own position fix, and emit
29
+ * `BathymetryData`. Vessels are discovered from the data model: one that
30
+ * publishes a depth is recorded, an AIS target (position but no depth) is not,
31
+ * so a tender or a second sounder-equipped vessel is picked up automatically.
32
+ *
33
+ * The vessel's position and heading are subscribed alongside the depth, so a
34
+ * sounding is paired with the fix it was recorded at — including a replayed
35
+ * (back-dated) sounding from a vessel that was offline, which the data model's
36
+ * current position would place wrongly. The model is the fallback before the
37
+ * stream has carried a fix. A vessel with no compass has only course over
38
+ * ground, so that is the heading fallback.
39
+ *
40
+ * The transducer `offset` describes this vessel's hull, so it is applied only
41
+ * to this vessel's own soundings.
10
42
  */
11
43
  export function createLiveStream(app, config, offset) {
12
- const path = `environment.depth.${config.path}`;
13
- app.debug(`Collecting depth data from environment.depth.${path}`);
14
- const unsubscribes = [];
44
+ const depthPath = `environment.depth.${config.path}`;
45
+ const include = new Set(config.vessels?.include ?? []);
46
+ const exclude = new Set(config.vessels?.exclude ?? []);
47
+ const selfUrn = app.getSelfPath("uuid");
48
+ const selfContext = selfUrn ? `vessels.${selfUrn}` : "vessels.self";
49
+ app.debug(`Collecting ${depthPath} from every vessel that publishes it`);
15
50
  const stream = new PassThrough({ objectMode: true });
16
- stream.on("close", () => {
17
- unsubscribes.forEach((f) => f());
18
- });
19
- app.subscriptionmanager.subscribe({
20
- context: "vessels.self",
21
- subscribe: [{ path, policy: "instant" }],
22
- }, unsubscribes, (error) => app.error(error), (delta) => {
51
+ const unsubscribes = new Map();
52
+ let scanTimer;
53
+ const isSelf = (context) => context === "vessels.self" || context === selfContext;
54
+ const wanted = (context) => !exclude.has(context) && (include.size === 0 || include.has(context));
55
+ const readVessel = (context, path) => isSelf(context) ? app.getSelfPath(path) : app.getPath(`${context}.${path}`);
56
+ const coLocated = config.coLocatedDepth;
57
+ const coLocatedEnabled = coLocated?.enabled ?? true;
58
+ const coLocatedRadiusM = coLocated?.radiusM ?? 15;
59
+ const coLocatedDepthM = coLocated?.depthM ?? 2;
60
+ // How old our own position/depth may be to use as the reference.
61
+ const selfSourceTtlMs = 30_000;
62
+ /** True when another vessel is beside us reporting a depth that cannot be
63
+ * the water we are in — a tender on its davits, transducer in air, still
64
+ * emits a plausible-looking number. Our own soundings are never filtered. */
65
+ const implausibleBesideUs = (context, fix, depth) => {
66
+ if (!coLocatedEnabled || isSelf(context))
67
+ return false;
68
+ const now = Temporal.Now.instant();
69
+ const selfPositionNode = readVessel(selfContext, POSITION);
70
+ const selfPosition = positionOf(selfPositionNode);
71
+ if (!selfPosition ||
72
+ !selfPositionNode?.timestamp ||
73
+ isStale(selfPositionNode, now, selfSourceTtlMs)) {
74
+ return false;
75
+ }
76
+ const selfDepthNode = readVessel(selfContext, depthPath);
77
+ if (typeof selfDepthNode?.value !== "number" ||
78
+ !selfDepthNode.timestamp ||
79
+ isStale({ timestamp: selfDepthNode.timestamp }, now, selfSourceTtlMs)) {
80
+ return false;
81
+ }
82
+ if (distanceM(fix, selfPosition) > coLocatedRadiusM)
83
+ return false;
84
+ return Math.abs(depth - selfDepthNode.value) > coLocatedDepthM;
85
+ };
86
+ // The last fix seen per vessel on the stream, so a sounding is paired with
87
+ // the position it was recorded at — and a replayed (back-dated) sounding uses
88
+ // the replayed position, not the vessel's current one.
89
+ const fixes = new Map();
90
+ const headings = new Map();
91
+ // Course over ground, the heading fallback for a vessel with no compass.
92
+ const courses = new Map();
93
+ const collect = (context, delta) => {
23
94
  delta.updates.forEach((update) => {
24
- const timestamp = Temporal.Instant.from(update.timestamp ?? Temporal.Now.instant());
25
- const position = app.getSelfPath("navigation.position");
26
- let heading = app.getSelfPath("navigation.headingTrue");
27
- if ("values" in update) {
28
- update.values.forEach(({ value }) => {
29
- if (!value)
30
- return;
31
- if (!position)
32
- return app.debug("No position data, ignoring depth data");
33
- if (isStale(position, timestamp, ttl))
34
- return app.debug("Stale position data, ignoring depth data");
35
- if (heading && isStale(heading, timestamp, ttl)) {
36
- app.debug("Stale heading data, discarding");
37
- heading = undefined;
38
- }
39
- const { lon, lat } = offset
40
- ? correctToTransducer({
41
- lon: position.value.longitude,
42
- lat: position.value.latitude,
43
- }, heading?.value, offset)
44
- : { lon: position.value.longitude, lat: position.value.latitude };
45
- stream.push({
46
- longitude: lon,
47
- latitude: lat,
48
- depth: value,
49
- timestamp,
50
- heading: heading?.value,
51
- });
52
- });
95
+ if (!("values" in update))
96
+ return;
97
+ const ts = update.timestamp ?? Temporal.Now.instant().toString();
98
+ const timestamp = Temporal.Instant.from(ts);
99
+ // Absorb the update's own position/heading first, so a depth sounding in
100
+ // the same update pairs with the fix it was recorded at.
101
+ update.values.forEach(({ path, value }) => {
102
+ if (path === POSITION) {
103
+ const p = positionOf(value);
104
+ if (p)
105
+ fixes.set(context, { ...p, timestamp: ts });
106
+ }
107
+ else if (path === HEADING && typeof value === "number") {
108
+ headings.set(context, { value, timestamp: ts });
109
+ }
110
+ else if (path === COURSE && typeof value === "number") {
111
+ courses.set(context, { value, timestamp: ts });
112
+ }
113
+ });
114
+ // Pair soundings with the last fix from the stream, or the data model
115
+ // before the stream has carried one (a vessel discovered but silent so
116
+ // far).
117
+ let fix = fixes.get(context);
118
+ if (!fix) {
119
+ const node = readVessel(context, POSITION);
120
+ const p = positionOf(node);
121
+ if (p)
122
+ fix = { ...p, timestamp: node?.timestamp ?? ts };
53
123
  }
124
+ // A vessel with no compass has only course over ground; use it as the
125
+ // heading fallback (it is the direction of travel, so meaningless while
126
+ // stopped, but there is nothing else).
127
+ let heading = headings.get(context) ?? courses.get(context);
128
+ if (!heading) {
129
+ heading =
130
+ readVessel(context, HEADING) ??
131
+ readVessel(context, COURSE);
132
+ }
133
+ update.values.forEach(({ path, value }) => {
134
+ // The subscription carries position and heading too; only a depth value
135
+ // is a sounding.
136
+ if (path !== depthPath)
137
+ return;
138
+ if (!value)
139
+ return;
140
+ if (!fix)
141
+ return app.debug(`No position for ${context}, ignoring depth data`);
142
+ if (isStale(fix, timestamp, ttl))
143
+ return app.debug(`Stale position for ${context}, ignoring depth data`);
144
+ if (heading && isStale(heading, timestamp, ttl)) {
145
+ app.debug("Stale heading data, discarding");
146
+ heading = undefined;
147
+ }
148
+ if (implausibleBesideUs(context, fix, value)) {
149
+ return app.debug(`Ignoring ${context} depth ${value} m: beside us but not our water`);
150
+ }
151
+ const vesselOffset = isSelf(context) ? offset : undefined;
152
+ const { lon, lat } = vesselOffset
153
+ ? correctToTransducer({ lon: fix.longitude, lat: fix.latitude }, heading?.value, vesselOffset)
154
+ : { lon: fix.longitude, lat: fix.latitude };
155
+ stream.push({
156
+ longitude: lon,
157
+ latitude: lat,
158
+ depth: value,
159
+ timestamp,
160
+ heading: heading?.value,
161
+ context,
162
+ });
163
+ });
54
164
  });
165
+ };
166
+ const subscribe = (context) => {
167
+ const unsubs = [];
168
+ app.subscriptionmanager.subscribe({
169
+ context: context,
170
+ subscribe: [
171
+ { path: depthPath, policy: "instant" },
172
+ { path: POSITION, policy: "instant" },
173
+ { path: HEADING, policy: "instant" },
174
+ { path: COURSE, policy: "instant" },
175
+ ],
176
+ }, unsubs, (error) => app.error(error), (delta) => collect(context, delta));
177
+ unsubscribes.set(context, () => unsubs.forEach((f) => f()));
178
+ app.debug(`Recording ${depthPath} from ${context}`);
179
+ };
180
+ const scan = () => {
181
+ const vessels = app.getPath("vessels");
182
+ if (!vessels)
183
+ return;
184
+ for (const [key, node] of Object.entries(vessels)) {
185
+ const context = key === "self" ? "vessels.self" : `vessels.${key}`;
186
+ if (unsubscribes.has(context) || !wanted(context))
187
+ continue;
188
+ // A depth on the chosen datum is what makes a vessel worth recording;
189
+ // AIS targets have a position but never a depth.
190
+ if (!node?.environment?.depth?.[config.path])
191
+ continue;
192
+ if (!node?.navigation?.position)
193
+ continue;
194
+ subscribe(context);
195
+ }
196
+ // A vessel is never unsubscribed for going quiet. It may be offline and
197
+ // replay its buffered deltas when it reconnects, and the data model entry
198
+ // is pruned while it is away — dropping the subscription then is exactly
199
+ // what loses the replay.
200
+ };
201
+ scan();
202
+ scanTimer = setInterval(scan, scanIntervalMs);
203
+ scanTimer.unref?.();
204
+ stream.on("close", () => {
205
+ if (scanTimer)
206
+ clearInterval(scanTimer);
207
+ unsubscribes.forEach((unsubscribe) => unsubscribe());
208
+ unsubscribes.clear();
55
209
  });
56
210
  return stream;
57
211
  }
@@ -60,4 +214,16 @@ function isStale(object, timestamp, ttl) {
60
214
  Temporal.Instant.from(object.timestamp).epochMilliseconds <
61
215
  timestamp.subtract({ milliseconds: ttl }).epochMilliseconds);
62
216
  }
217
+ /** Great-circle distance between two positions, in metres. */
218
+ function distanceM(a, b) {
219
+ const earth = 6371000;
220
+ const rad = (deg) => (deg * Math.PI) / 180;
221
+ const dLat = rad(b.latitude - a.latitude);
222
+ const dLon = rad(b.longitude - a.longitude);
223
+ const lat1 = rad(a.latitude);
224
+ const lat2 = rad(b.latitude);
225
+ const h = Math.sin(dLat / 2) ** 2 +
226
+ Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) ** 2;
227
+ return 2 * earth * Math.asin(Math.min(1, Math.sqrt(h)));
228
+ }
63
229
  //# sourceMappingURL=live.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/streams/live.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/streams/live.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAoB,MAAM,wBAAwB,CAAC;AAE/E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,+DAA+D;AAC/D,MAAM,GAAG,GAAG,IAAI,CAAC;AAEjB,+EAA+E;AAC/E,MAAM,cAAc,GAAG,KAAK,CAAC;AAc7B;8DAC8D;AAC9D,MAAM,QAAQ,GAAG,qBAA6B,CAAC;AAC/C,MAAM,OAAO,GAAG,wBAAgC,CAAC;AACjD,8EAA8E;AAC9E,MAAM,MAAM,GAAG,iCAAyC,CAAC;AAEzD;2DAC2D;AAC3D,SAAS,UAAU,CACjB,KAAc;IAEd,MAAM,CAAC,GAAI,KAAyC,EAAE,KAAK,IAAI,KAAK,CAAC;IACrE,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAG/B,CAAC;IACF,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAc,EACd,MAAc,EACd,MAAyB;IAEzB,MAAM,SAAS,GAAG,qBAAqB,MAAM,CAAC,IAAI,EAAU,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAuB,CAAC;IAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IAEpE,GAAG,CAAC,KAAK,CAAC,cAAc,SAAS,sCAAsC,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;IACnD,IAAI,SAAqD,CAAC;IAE1D,MAAM,MAAM,GAAG,CAAC,OAAe,EAAE,EAAE,CACjC,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,WAAW,CAAC;IAExD,MAAM,MAAM,GAAG,CAAC,OAAe,EAAE,EAAE,CACjC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAExE,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,IAAY,EAAW,EAAE,CAC5D,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;IAE9E,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;IACxC,MAAM,gBAAgB,GAAG,SAAS,EAAE,OAAO,IAAI,IAAI,CAAC;IACpD,MAAM,gBAAgB,GAAG,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC;IAClD,MAAM,eAAe,GAAG,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC;IAC/C,iEAAiE;IACjE,MAAM,eAAe,GAAG,MAAM,CAAC;IAE/B;;iFAE6E;IAC7E,MAAM,mBAAmB,GAAG,CAC1B,OAAe,EACf,GAA4C,EAC5C,KAAa,EACJ,EAAE;QACX,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,gBAAgB,GAAG,UAAU,CAAC,WAAW,EAAE,QAAQ,CAC/B,CAAC;QAC3B,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAClD,IACE,CAAC,YAAY;YACb,CAAC,gBAAgB,EAAE,SAAS;YAC5B,OAAO,CAAC,gBAAgB,EAAE,GAAG,EAAE,eAAe,CAAC,EAC/C,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,EAAE,SAAS,CACF,CAAC;QACtD,IACE,OAAO,aAAa,EAAE,KAAK,KAAK,QAAQ;YACxC,CAAC,aAAa,CAAC,SAAS;YACxB,OAAO,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,eAAe,CAAC,EACrE,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,gBAAgB;YAAE,OAAO,KAAK,CAAC;QAClE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC;IACjE,CAAC,CAAC;IAEF,2EAA2E;IAC3E,8EAA8E;IAC9E,uDAAuD;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAGlB,CAAC;IACJ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,yEAAyE;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE/C,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,KAAY,EAAE,EAAE;QAChD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC/B,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC;gBAAE,OAAO;YAClC,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;YACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE5C,yEAAyE;YACzE,yDAAyD;YACzD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gBACxC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC5B,IAAI,CAAC;wBAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACzD,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,sEAAsE;YACtE,uEAAuE;YACvE,QAAQ;YACR,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAA6B,CAAC;gBACvE,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC;oBAAE,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;YAC1D,CAAC;YACD,sEAAsE;YACtE,wEAAwE;YACxE,uCAAuC;YACvC,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;oBACJ,UAAU,CAAC,OAAO,EAAE,OAAO,CAA6B;wBACxD,UAAU,CAAC,OAAO,EAAE,MAAM,CAA6B,CAAC;YAC7D,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gBACxC,wEAAwE;gBACxE,iBAAiB;gBACjB,IAAI,IAAI,KAAK,SAAS;oBAAE,OAAO;gBAC/B,IAAI,CAAC,KAAK;oBAAE,OAAO;gBAEnB,IAAI,CAAC,GAAG;oBACN,OAAO,GAAG,CAAC,KAAK,CAAC,mBAAmB,OAAO,uBAAuB,CAAC,CAAC;gBACtE,IAAI,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC;oBAC9B,OAAO,GAAG,CAAC,KAAK,CACd,sBAAsB,OAAO,uBAAuB,CACrD,CAAC;gBAEJ,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;oBAChD,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBAC5C,OAAO,GAAG,SAAS,CAAC;gBACtB,CAAC;gBAED,IAAI,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,KAAe,CAAC,EAAE,CAAC;oBACvD,OAAO,GAAG,CAAC,KAAK,CACd,YAAY,OAAO,UAAU,KAAK,iCAAiC,CACpE,CAAC;gBACJ,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1D,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,YAAY;oBAC/B,CAAC,CAAC,mBAAmB,CACjB,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EACzC,OAAO,EAAE,KAAK,EACd,YAAY,CACb;oBACH,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAE9C,MAAM,CAAC,IAAI,CAAC;oBACV,SAAS,EAAE,GAAG;oBACd,QAAQ,EAAE,GAAG;oBACb,KAAK,EAAE,KAAe;oBACtB,SAAS;oBACT,OAAO,EAAE,OAAO,EAAE,KAAK;oBACvB,OAAO;iBACiB,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,EAAE;QACpC,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAC/B;YACE,OAAO,EAAE,OAAkB;YAC3B,SAAS,EAAE;gBACT,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;gBACtC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;gBACrC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;gBACpC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;aACpC;SACF,EACD,MAAM,EACN,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,CAAC,EACrC,CAAC,KAAY,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAC1C,CAAC;QACF,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,GAAG,CAAC,KAAK,CAAC,aAAa,SAAS,SAAS,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CACG,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;YACnE,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC5D,sEAAsE;YACtE,iDAAiD;YACjD,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,SAAS;YACvD,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ;gBAAE,SAAS;YAC1C,SAAS,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAED,wEAAwE;QACxE,0EAA0E;QAC1E,yEAAyE;QACzE,yBAAyB;IAC3B,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC;IACP,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC9C,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;IAEpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,IAAI,SAAS;YAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QACxC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACrD,YAAY,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CACd,MAA6B,EAC7B,SAA2B,EAC3B,GAAW;IAEX,OAAO,CACL,CAAC,MAAM,EAAE,SAAS;QAClB,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB;YACvD,SAAS,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,iBAAiB,CAC9D,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,SAAS,SAAS,CAChB,CAA0C,EAC1C,CAA0C;IAE1C,MAAM,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACnD,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,CAAC,GACL,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -20,6 +20,15 @@ export interface TileMeta {
20
20
  * the plugin corrects for it; absent or null otherwise. A client applies the
21
21
  * same shift to its own soundings so they match the served tiles. */
22
22
  transducer?: TransducerOffset | null;
23
+ /** Vessel dimensions, for the debug footprint overlay. */
24
+ vessel?: {
25
+ loa?: number;
26
+ beam?: number;
27
+ };
28
+ /** Temporary debug flags; see the plugin's debug config. */
29
+ debug?: {
30
+ vesselFootprint?: boolean;
31
+ };
23
32
  }
24
33
  /** The finest tile level whose cells are no coarser than `cellMetres`, clamped
25
34
  * to the served range. Finer than needed wastes requests; coarser loses detail
@@ -1 +1 @@
1
- {"version":3,"file":"tile-source.d.ts","sourceRoot":"","sources":["../../../src/tiles/core/tile-source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAIL,SAAS,EACT,QAAQ,EAGT,MAAM,WAAW,CAAC;AAEnB,2DAA2D;AAC3D,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;yEAEqE;IACrE,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACtC;AAID;;iCAEiC;AACjC,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,SAAW,EAClB,QAAQ,SAAY,GACnB,MAAM,CAOR;AAkBD;oEACoE;AACpE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,CAAC,EAAE,MAAM,GACR;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,CA0BhC;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,MAAM,GACV,CAAC,MAAM,EAAE,MAAM,CAAC,CASlB;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,SAAS,GACf,QAAQ,EAAE,CASZ;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,UAAU,GAChB,QAAQ,EAAE,CAEZ;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"tile-source.d.ts","sourceRoot":"","sources":["../../../src/tiles/core/tile-source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAIL,SAAS,EACT,QAAQ,EAGT,MAAM,WAAW,CAAC;AAEnB,2DAA2D;AAC3D,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;yEAEqE;IACrE,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,0DAA0D;IAC1D,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,4DAA4D;IAC5D,KAAK,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACvC;AAID;;iCAEiC;AACjC,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,SAAW,EAClB,QAAQ,SAAY,GACnB,MAAM,CAOR;AAkBD;oEACoE;AACpE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,CAAC,EAAE,MAAM,GACR;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,CA0BhC;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,MAAM,GACV,CAAC,MAAM,EAAE,MAAM,CAAC,CASlB;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,SAAS,GACf,QAAQ,EAAE,CASZ;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,UAAU,GAChB,QAAQ,EAAE,CAEZ;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tile-source.js","sourceRoot":"","sources":["../../../src/tiles/core/tile-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tile-source.js","sourceRoot":"","sources":["../../../src/tiles/core/tile-source.ts"],"names":[],"mappings":"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"}