acmi-parser 1.0.0 → 1.1.0

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,26 +1,19 @@
1
- import { Cartesian3 } from '@cesium/engine';
2
1
  import { Dayjs } from 'dayjs';
3
2
  import dayjs from 'dayjs';
4
- import { Quaternion } from '@cesium/engine';
5
3
 
6
4
  export declare class AcmiData {
7
5
  isValid: boolean;
8
- header: AcmiHeader;
6
+ header: Header;
9
7
  globalProperties: GlobalProperties;
10
8
  timeSpan: TimeSpan;
11
- entities: Map<number, IEntityProps>;
12
- frames: Frames;
13
- private readonly _fixedFrame;
9
+ entities: Map<number, Entity>;
10
+ frames: Array<Frame>;
11
+ private _searchFrameIndex;
14
12
  getFrame(time: Dayjs): Frame | undefined;
15
13
  private _addFrame;
16
14
  createSampledTrajectories(options?: ITrajectoryOptions): Trajectories;
17
15
  }
18
16
 
19
- export declare class AcmiHeader {
20
- fileType: string;
21
- fileVersion: string;
22
- }
23
-
24
17
  declare class AcmiParser {
25
18
  private _decoder;
26
19
  private _currentLine;
@@ -30,19 +23,16 @@ declare class AcmiParser {
30
23
  private _filteredIds;
31
24
  private _data;
32
25
  private _filter;
33
- private _refLat;
34
- private _refLong;
35
26
  private readonly _acmiVersions;
36
27
  private readonly _acmiType;
37
28
  private readonly _propertySeparator;
38
29
  private readonly _headerPattern;
39
- constructor(geoidModel: Uint8Array);
30
+ constructor(geoidPgm?: Uint8Array);
40
31
  private _isValidVersion;
41
32
  private _isValidType;
42
33
  private _parseHeader;
43
34
  private _parseContent;
44
35
  private _parseLine;
45
- private _isZipped;
46
36
  private _unzip;
47
37
  private _parseBuffer;
48
38
  parse(data: Uint8Array, options?: AcmiParserOptions): Promise<AcmiData>;
@@ -54,7 +44,17 @@ export declare interface AcmiParserOptions {
54
44
  controller?: AbortController;
55
45
  }
56
46
 
57
- export declare class EntityProps implements IEntityProps {
47
+ declare type ConfigurationOptions = {
48
+ EPSILON: number;
49
+ debug?: boolean;
50
+ precision: number;
51
+ printTypes?: boolean;
52
+ printDegrees?: boolean;
53
+ printRowMajor?: boolean;
54
+ _cartographicRadians?: boolean;
55
+ };
56
+
57
+ export declare class Entity {
58
58
  id: number;
59
59
  timeSpan: TimeSpan;
60
60
  name?: string;
@@ -68,13 +68,102 @@ export declare class EntityProps implements IEntityProps {
68
68
  constructor(id: number);
69
69
  }
70
70
 
71
+ declare class Euler extends MathArray {
72
+ static get ZYX(): RotationOrder;
73
+ static get YXZ(): RotationOrder;
74
+ static get XZY(): RotationOrder;
75
+ static get ZXY(): RotationOrder;
76
+ static get YZX(): RotationOrder;
77
+ static get XYZ(): RotationOrder;
78
+ static get RollPitchYaw(): RotationOrder;
79
+ static get DefaultOrder(): RotationOrder;
80
+ static get RotationOrders(): typeof RotationOrder;
81
+ static rotationOrder(order: RotationOrder): string;
82
+ get ELEMENTS(): number;
83
+ constructor(x?: number, y?: number, z?: number, order?: RotationOrder);
84
+ fromQuaternion(quaternion: Readonly<NumericArray_2>): this;
85
+ fromObject(_object: Record<string, unknown>): this;
86
+ copy(array: Readonly<NumericArray_2>): this;
87
+ set(x: number | undefined, y: number | undefined, z: number | undefined, order: RotationOrder): this;
88
+ validate(): boolean;
89
+ toArray(array?: NumericArray_2, offset?: number): NumericArray_2;
90
+ toArray4(array?: NumericArray_2, offset?: number): NumericArray_2;
91
+ toVector3(result?: NumericArray_2): NumericArray_2;
92
+ toHeadingPitchRoll(): NumericArray_2;
93
+ toHeadingPitchRoll<T extends NumericArray_2>(result: T): T;
94
+ get x(): number;
95
+ set x(value: number);
96
+ get y(): number;
97
+ set y(value: number);
98
+ get z(): number;
99
+ set z(value: number);
100
+ get alpha(): number;
101
+ set alpha(value: number);
102
+ get beta(): number;
103
+ set beta(value: number);
104
+ get gamma(): number;
105
+ set gamma(value: number);
106
+ get phi(): number;
107
+ set phi(value: number);
108
+ get theta(): number;
109
+ set theta(value: number);
110
+ get psi(): number;
111
+ set psi(value: number);
112
+ get roll(): number;
113
+ set roll(value: number);
114
+ get pitch(): number;
115
+ set pitch(value: number);
116
+ get yaw(): number;
117
+ set yaw(value: number);
118
+ get order(): RotationOrder;
119
+ set order(value: RotationOrder);
120
+ fromVector3(v: Readonly<NumericArray_2>, order: RotationOrder): this;
121
+ fromArray(array: Readonly<NumericArray_2>, offset?: number): this;
122
+ fromRollPitchYaw(roll: number, pitch: number, yaw: number): this;
123
+ fromRotationMatrix(m: Readonly<NumericArray_2>, order?: RotationOrder): this;
124
+ getRotationMatrix(m: NumericArray_2): NumericArray_2;
125
+ getQuaternion(): Quaternion;
126
+ _fromRotationMatrix(m: Readonly<NumericArray_2>, order?: RotationOrder): this;
127
+ _getRotationMatrix(result: NumericArray_2): NumericArray_2;
128
+ toQuaternion(): Quaternion;
129
+ }
130
+
71
131
  export declare class Frame {
72
132
  timeStamp: number;
73
133
  scene: Scene;
74
134
  constructor(timeStamp: number, scene?: Scene);
75
135
  }
76
136
 
77
- export declare type Frames = Array<Frame>;
137
+ declare class Geoid {
138
+ private _v00;
139
+ private _v01;
140
+ private _v10;
141
+ private _v11;
142
+ private _t;
143
+ private _ix;
144
+ private _iy;
145
+ options: GeoidProps;
146
+ constructor(options: GeoidProps);
147
+ getHeight(lat: number, lon: number): number;
148
+ private _rawval;
149
+ }
150
+
151
+ declare type GeoidProps = {
152
+ cubic: boolean | undefined;
153
+ _width: number;
154
+ _height: number;
155
+ _rlonres: number;
156
+ _rlatres: number;
157
+ _offset: number;
158
+ _scale: number;
159
+ _swidth: number;
160
+ _datastart: number;
161
+ _maxerror: number;
162
+ _rmserror: number;
163
+ _description: string;
164
+ _datetime: string;
165
+ data: Uint8Array;
166
+ };
78
167
 
79
168
  export declare class GlobalProperties {
80
169
  referenceTime: dayjs.Dayjs;
@@ -92,48 +181,139 @@ export declare class GlobalProperties {
92
181
  additionalProps?: Map<string, string>;
93
182
  }
94
183
 
95
- export declare interface IEntityProps {
96
- id: number;
97
- timeSpan: {
98
- start: Dayjs;
99
- end: Dayjs;
100
- };
101
- name?: string;
102
- types?: string[];
103
- callsign?: string;
104
- pilot?: string;
105
- group?: string;
106
- country?: string;
107
- coalition?: string;
108
- color?: string;
109
- }
110
-
111
- export declare interface IStateVector {
112
- position: Cartesian3;
113
- orientation?: Quaternion;
184
+ export declare class Header {
185
+ fileType: string;
186
+ fileVersion: string;
114
187
  }
115
188
 
116
189
  export declare interface ITrajectoryOptions {
117
190
  sampleRate?: number;
118
- fixMslHeight?: boolean;
119
191
  emulateOrientation?: boolean;
120
192
  }
121
193
 
122
194
  export declare interface ITrajectorySample {
123
195
  time: Dayjs;
124
- state: IStateVector;
196
+ stateVector: StateVector;
197
+ }
198
+
199
+ declare abstract class MathArray extends Array<number> {
200
+ abstract get ELEMENTS(): number;
201
+ abstract copy(vector: Readonly<NumericArray_2>): this;
202
+ abstract fromObject(object: Record<string, unknown>): this;
203
+ clone(): this;
204
+ fromArray(array: Readonly<NumericArray_2>, offset?: number): this;
205
+ toArray<TypedArray>(targetArray: TypedArray, offset?: number): TypedArray;
206
+ toArray(targetArray?: number[], offset?: number): NumericArray_2;
207
+ toObject(targetObject: Record<string, unknown>): Record<string, unknown>;
208
+ from(arrayOrObject: Readonly<NumericArray_2> | Record<string, unknown>): this;
209
+ to<T extends NumericArray_2 | Record<string, unknown>>(arrayOrObject: T): T;
210
+ toTarget(target: this): this;
211
+ toFloat32Array(): Float32Array;
212
+ toString(): string;
213
+ formatString(opts: ConfigurationOptions): string;
214
+ equals(array: Readonly<NumericArray_2>): boolean;
215
+ exactEquals(array: Readonly<NumericArray_2>): boolean;
216
+ negate(): this;
217
+ lerp(a: Readonly<NumericArray_2>, t: number): this;
218
+ lerp(a: Readonly<NumericArray_2>, b: Readonly<NumericArray_2>, t: number): this;
219
+ min(vector: Readonly<NumericArray_2>): this;
220
+ max(vector: Readonly<NumericArray_2>): this;
221
+ clamp(minVector: Readonly<NumericArray_2>, maxVector: Readonly<NumericArray_2>): this;
222
+ add(...vectors: Readonly<NumericArray_2>[]): this;
223
+ subtract(...vectors: Readonly<NumericArray_2>[]): this;
224
+ scale(scale: number | Readonly<NumericArray_2>): this;
225
+ multiplyByScalar(scalar: number): this;
226
+ check(): this;
227
+ validate(): boolean;
228
+ sub(a: Readonly<NumericArray_2>): this;
229
+ setScalar(a: number): this;
230
+ addScalar(a: number): this;
231
+ subScalar(a: number): this;
232
+ multiplyScalar(scalar: number): this;
233
+ divideScalar(a: number): this;
234
+ clampScalar(min: number, max: number): this;
235
+ get elements(): NumericArray_2;
125
236
  }
126
237
 
127
- export declare interface ITransform {
128
- longitude: number;
129
- latitude: number;
130
- altitude: number;
131
- roll?: number;
132
- pitch?: number;
133
- yaw?: number;
238
+ declare type NumericArray_2 = TypedArray | number[];
239
+
240
+ declare class Quaternion extends MathArray {
241
+ constructor(x?: number | Readonly<NumericArray_2>, y?: number, z?: number, w?: number);
242
+ copy(array: Readonly<NumericArray_2>): this;
243
+ set(x: number, y: number, z: number, w: number): this;
244
+ fromObject(object: {
245
+ x: number;
246
+ y: number;
247
+ z: number;
248
+ w: number;
249
+ }): this;
250
+ fromMatrix3(m: Readonly<NumericArray_2>): this;
251
+ fromAxisRotation(axis: Readonly<NumericArray_2>, rad: number): this;
252
+ fromEuler(e: Euler): this;
253
+ identity(): this;
254
+ setAxisAngle(axis: Readonly<NumericArray_2>, rad: number): this;
255
+ get ELEMENTS(): number;
256
+ get x(): number;
257
+ set x(value: number);
258
+ get y(): number;
259
+ set y(value: number);
260
+ get z(): number;
261
+ set z(value: number);
262
+ get w(): number;
263
+ set w(value: number);
264
+ len(): number;
265
+ lengthSquared(): number;
266
+ dot(a: Readonly<NumericArray_2>): number;
267
+ rotationTo(vectorA: NumericArray_2, vectorB: NumericArray_2): this;
268
+ add(a: Readonly<NumericArray_2>): this;
269
+ calculateW(): this;
270
+ conjugate(): this;
271
+ invert(): this;
272
+ lerp(a: Readonly<NumericArray_2>, b: Readonly<NumericArray_2> | number, t?: number): this;
273
+ multiplyRight(a: Readonly<NumericArray_2>): this;
274
+ multiplyLeft(a: Readonly<NumericArray_2>): this;
275
+ normalize(): this;
276
+ rotateX(rad: number): this;
277
+ rotateY(rad: number): this;
278
+ rotateZ(rad: number): this;
279
+ scale(b: number): this;
280
+ slerp(target: Readonly<NumericArray_2>, ratio: number): this;
281
+ slerp(start: Readonly<NumericArray_2>, target: Readonly<NumericArray_2>, ratio: number): this;
282
+ slerp(params: {
283
+ start: Readonly<NumericArray_2>;
284
+ target: Readonly<NumericArray_2>;
285
+ ratio: number;
286
+ }): this;
287
+ transformVector4(vector: Readonly<NumericArray_2>, result?: NumericArray_2): NumericArray_2;
288
+ lengthSq(): number;
289
+ setFromAxisAngle(axis: Readonly<NumericArray_2>, rad: number): this;
290
+ premultiply(a: Readonly<NumericArray_2>): this;
291
+ multiply(a: Readonly<NumericArray_2>): this;
134
292
  }
135
293
 
136
- export declare type Scene = Map<number, ITransform>;
294
+ declare enum RotationOrder {
295
+ ZYX = 0,
296
+ YXZ = 1,
297
+ XZY = 2,
298
+ ZXY = 3,
299
+ YZX = 4,
300
+ XYZ = 5
301
+ }
302
+
303
+ export declare type Scene = Map<number, Transform>;
304
+
305
+ export declare class StateVector {
306
+ cartesian: Vector3;
307
+ quaternion?: Quaternion;
308
+ equals(stateVector: StateVector): boolean | undefined;
309
+ private static _scratchQuaternionX;
310
+ private static _scratchQuaternionY;
311
+ private static _scratchQuaternionZ;
312
+ private static _scratchHprMatrix;
313
+ private static _scratchTranslationMatrix;
314
+ private static _scratchRotation;
315
+ static fromTransform(transform: Transform, result?: StateVector): StateVector;
316
+ }
137
317
 
138
318
  export declare class TimeSpan {
139
319
  start: dayjs.Dayjs;
@@ -146,34 +326,97 @@ export declare type Trajectories = Map<number, Trajectory>;
146
326
 
147
327
  export declare class Trajectory {
148
328
  samples: ITrajectorySample[];
149
- private _mslHeightFixed;
150
- private static _geoid?;
151
- private readonly _fixedFrame;
152
- static loadGeoidModel(model: Uint8Array): void;
153
329
  hasOrientations(): boolean;
154
330
  private _lastRoll;
155
331
  private _simpleSmooth;
156
- private _m0;
157
- private _m1;
158
- private _hpr0;
159
- private _hpr1;
160
- private _alpha;
161
332
  private _computeRoll;
162
- private _p0;
163
- private _p1;
164
- private _p2;
165
- private _v0;
166
- private _v1;
167
- private _r0;
168
- private _r1;
169
- private _q0;
170
- private _q1;
171
- private _rollQuat;
172
- private _defaultHpr;
173
333
  private _computeOrientation;
174
- emulateOrientations(dt: number, withRoll?: boolean): void;
175
- private _cartographicScratch;
176
- fixMslHeight(): void;
334
+ emulateOrientations(withRoll?: boolean): void;
335
+ }
336
+
337
+ export declare class Transform {
338
+ position: Vector3;
339
+ orientation?: Euler;
340
+ static refLong: number;
341
+ static refLat: number;
342
+ static geoid: Geoid | undefined;
343
+ constructor(components: (number | undefined)[], previousTransform: Transform | undefined);
344
+ }
345
+
346
+ declare type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
347
+
348
+ declare abstract class Vector extends MathArray {
349
+ get x(): number;
350
+ set x(value: number);
351
+ get y(): number;
352
+ set y(value: number);
353
+ len(): number;
354
+ magnitude(): number;
355
+ lengthSquared(): number;
356
+ magnitudeSquared(): number;
357
+ distance(mathArray: Readonly<NumericArray_2>): number;
358
+ distanceSquared(mathArray: Readonly<NumericArray_2>): number;
359
+ dot(mathArray: Readonly<NumericArray_2>): number;
360
+ normalize(): this;
361
+ multiply(...vectors: Readonly<NumericArray_2>[]): this;
362
+ divide(...vectors: Readonly<NumericArray_2>[]): this;
363
+ lengthSq(): number;
364
+ distanceTo(vector: Readonly<NumericArray_2>): number;
365
+ distanceToSquared(vector: Readonly<NumericArray_2>): number;
366
+ getComponent(i: number): number;
367
+ setComponent(i: number, value: number): this;
368
+ addVectors(a: Readonly<NumericArray_2>, b: Readonly<NumericArray_2>): this;
369
+ subVectors(a: Readonly<NumericArray_2>, b: Readonly<NumericArray_2>): this;
370
+ multiplyVectors(a: Readonly<NumericArray_2>, b: Readonly<NumericArray_2>): this;
371
+ addScaledVector(a: Readonly<NumericArray_2>, b: number): this;
372
+ }
373
+
374
+ declare class Vector3 extends Vector {
375
+ static get ZERO(): Vector3;
376
+ static get X_AXIS(): Vector3;
377
+ static get Y_AXIS(): Vector3;
378
+ static get Z_AXIS(): Vector3;
379
+ constructor(x?: number | Readonly<NumericArray_2>, y?: number, z?: number);
380
+ set(x: number, y: number, z: number): this;
381
+ copy(array: Readonly<NumericArray_2>): this;
382
+ fromObject(object: {
383
+ x: number;
384
+ y: number;
385
+ z: number;
386
+ }): this;
387
+ toObject(object: {
388
+ x?: number;
389
+ y?: number;
390
+ z?: number;
391
+ }): {
392
+ x: number;
393
+ y: number;
394
+ z: number;
395
+ };
396
+ get ELEMENTS(): number;
397
+ get z(): number;
398
+ set z(value: number);
399
+ angle(vector: Readonly<NumericArray_2>): number;
400
+ static cross<T extends NumericArray_2>(left: Readonly<NumericArray_2>, right: Readonly<NumericArray_2>, result?: T): T;
401
+ cross(vector: Readonly<NumericArray_2>): this;
402
+ rotateX({ radians, origin, }: {
403
+ radians: number;
404
+ origin?: Readonly<NumericArray_2>;
405
+ }): this;
406
+ rotateY({ radians, origin, }: {
407
+ radians: number;
408
+ origin?: Readonly<NumericArray_2>;
409
+ }): this;
410
+ rotateZ({ radians, origin, }: {
411
+ radians: number;
412
+ origin?: Readonly<NumericArray_2>;
413
+ }): this;
414
+ transform(matrix4: Readonly<NumericArray_2>): this;
415
+ transformAsPoint(matrix4: Readonly<NumericArray_2>): this;
416
+ transformAsVector(matrix4: Readonly<NumericArray_2>): this;
417
+ transformByMatrix3(matrix3: Readonly<NumericArray_2>): this;
418
+ transformByMatrix2(matrix2: Readonly<NumericArray_2>): this;
419
+ transformByQuaternion(quaternion: Readonly<NumericArray_2>): this;
177
420
  }
178
421
 
179
422
  export { }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acmi-parser",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "ACMI file format parser",
5
5
  "author": "jfayot",
6
6
  "repository": {
@@ -52,9 +52,6 @@
52
52
  ]
53
53
  },
54
54
  "dependencies": {
55
- "@math.gl/geoid": "^4.0.0",
56
- "binary-search-bounds": "^2.0.5",
57
- "@cesium/engine": "^6.1.1",
58
55
  "dayjs": "^1.11.10",
59
56
  "unzipit": "^1.4.3"
60
57
  },