raain-model 2.6.7 → 2.6.10

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.
Files changed (214) hide show
  1. package/.cursorignore +10 -0
  2. package/.github/workflows/ci.yml +29 -0
  3. package/CHANGELOG.md +166 -0
  4. package/LICENSE +21 -0
  5. package/README.md +90 -9
  6. package/RELEASE_PROCESS.md +111 -0
  7. package/package.json +10 -8
  8. package/specs/REQUIREMENTS.md +42 -0
  9. package/specs/TECHNICAL.md +57 -0
  10. package/specs/cartesian/Cartesian.spec.ts +82 -0
  11. package/specs/cartesian/CartesianTools.spec.ts +121 -0
  12. package/specs/gauge/Gauge.spec.ts +39 -0
  13. package/specs/organization/Organization.spec.ts +38 -0
  14. package/specs/polar/Polar.spec.ts +267 -0
  15. package/specs/quality/Position.spec.ts +18 -0
  16. package/specs/quality/QualityPointEdgeCases.spec.ts +215 -0
  17. package/specs/quality/QualityTools.spec.ts +67 -0
  18. package/specs/quality/SpeedMatrix.spec.ts +214 -0
  19. package/specs/radar/Radar.spec.ts +129 -0
  20. package/specs/rain/Rain.spec.ts +334 -0
  21. package/specs/tsconfig.json +12 -0
  22. package/{cartesian/CartesianMeasureValue.js → src/cartesian/CartesianMeasureValue.ts} +73 -41
  23. package/{cartesian/CartesianTools.js → src/cartesian/CartesianTools.ts} +130 -69
  24. package/src/cartesian/CartesianValue.ts +26 -0
  25. package/src/cartesian/EarthMap.ts +5 -0
  26. package/src/cartesian/ICartesianMeasureValue.ts +22 -0
  27. package/src/cartesian/LatLng.ts +43 -0
  28. package/src/cartesian/RadarCartesianMeasureValue.ts +32 -0
  29. package/src/cartesian/RainCartesianMeasureValue.ts +32 -0
  30. package/src/gauge/GaugeMeasure.ts +42 -0
  31. package/src/gauge/GaugeNode.ts +133 -0
  32. package/src/gauge/GaugeNodeMap.ts +55 -0
  33. package/src/organization/EventNode.ts +43 -0
  34. package/{organization/Link.js → src/organization/Link.ts} +17 -14
  35. package/src/organization/Measure.ts +61 -0
  36. package/{organization/PeopleNode.js → src/organization/PeopleNode.ts} +20 -10
  37. package/src/organization/RaainNode.ts +205 -0
  38. package/src/organization/TeamNode.ts +91 -0
  39. package/{polar/AbstractPolarMeasureValue.js → src/polar/AbstractPolarMeasureValue.ts} +58 -32
  40. package/src/polar/IPolarMeasureValue.ts +21 -0
  41. package/{polar/MeasureValuePolarContainer.js → src/polar/MeasureValuePolarContainer.ts} +29 -13
  42. package/src/polar/PolarFilter.ts +46 -0
  43. package/{polar/PolarMeasureValue.js → src/polar/PolarMeasureValue.ts} +125 -62
  44. package/{polar/PolarMeasureValueMap.js → src/polar/PolarMeasureValueMap.ts} +165 -88
  45. package/src/polar/PolarValue.ts +16 -0
  46. package/{polar/RadarPolarMeasureValue.js → src/polar/RadarPolarMeasureValue.ts} +34 -21
  47. package/src/polar/RainPolarMeasureValue.ts +57 -0
  48. package/{quality/QualityPoint.js → src/quality/QualityPoint.ts} +62 -34
  49. package/{quality/SpeedMatrix.js → src/quality/SpeedMatrix.ts} +117 -76
  50. package/{quality/SpeedMatrixContainer.js → src/quality/SpeedMatrixContainer.ts} +210 -103
  51. package/src/quality/history/CartesianGaugeHistory.ts +23 -0
  52. package/src/quality/history/CartesianRainHistory.ts +15 -0
  53. package/src/quality/history/PositionHistory.ts +31 -0
  54. package/{quality/index.d.ts → src/quality/index.ts} +3 -0
  55. package/src/quality/position/Position.ts +59 -0
  56. package/src/quality/position/PositionValue.ts +15 -0
  57. package/{quality/tools/QualityTools.js → src/quality/tools/QualityTools.ts} +18 -17
  58. package/src/radar/RadarMeasure.ts +41 -0
  59. package/{radar/RadarNode.js → src/radar/RadarNode.ts} +41 -19
  60. package/src/radar/RadarNodeMap.ts +61 -0
  61. package/src/rain/MergeStrategy.ts +15 -0
  62. package/src/rain/RainComputation.ts +96 -0
  63. package/{rain/RainComputationAbstract.js → src/rain/RainComputationAbstract.ts} +135 -69
  64. package/src/rain/RainComputationMap.ts +139 -0
  65. package/{rain/RainComputationQuality.js → src/rain/RainComputationQuality.ts} +82 -44
  66. package/src/rain/RainMeasure.ts +25 -0
  67. package/{rain/RainNode.js → src/rain/RainNode.ts} +117 -72
  68. package/tsconfig.json +17 -0
  69. package/tslint.json +79 -0
  70. package/typedoc.json +31 -0
  71. package/cartesian/CartesianMeasureValue.d.ts +0 -40
  72. package/cartesian/CartesianMeasureValue.js.map +0 -1
  73. package/cartesian/CartesianTools.d.ts +0 -32
  74. package/cartesian/CartesianTools.js.map +0 -1
  75. package/cartesian/CartesianValue.d.ts +0 -14
  76. package/cartesian/CartesianValue.js +0 -17
  77. package/cartesian/CartesianValue.js.map +0 -1
  78. package/cartesian/EarthMap.d.ts +0 -5
  79. package/cartesian/EarthMap.js +0 -3
  80. package/cartesian/EarthMap.js.map +0 -1
  81. package/cartesian/ICartesianMeasureValue.d.ts +0 -23
  82. package/cartesian/ICartesianMeasureValue.js +0 -3
  83. package/cartesian/ICartesianMeasureValue.js.map +0 -1
  84. package/cartesian/LatLng.d.ts +0 -16
  85. package/cartesian/LatLng.js +0 -34
  86. package/cartesian/LatLng.js.map +0 -1
  87. package/cartesian/RadarCartesianMeasureValue.d.ts +0 -17
  88. package/cartesian/RadarCartesianMeasureValue.js +0 -22
  89. package/cartesian/RadarCartesianMeasureValue.js.map +0 -1
  90. package/cartesian/RainCartesianMeasureValue.d.ts +0 -17
  91. package/cartesian/RainCartesianMeasureValue.js +0 -23
  92. package/cartesian/RainCartesianMeasureValue.js.map +0 -1
  93. package/cartesian/index.js +0 -25
  94. package/cartesian/index.js.map +0 -1
  95. package/gauge/GaugeMeasure.d.ts +0 -20
  96. package/gauge/GaugeMeasure.js +0 -30
  97. package/gauge/GaugeMeasure.js.map +0 -1
  98. package/gauge/GaugeNode.d.ts +0 -28
  99. package/gauge/GaugeNode.js +0 -54
  100. package/gauge/GaugeNode.js.map +0 -1
  101. package/gauge/GaugeNodeMap.d.ts +0 -24
  102. package/gauge/GaugeNodeMap.js +0 -40
  103. package/gauge/GaugeNodeMap.js.map +0 -1
  104. package/gauge/index.js +0 -20
  105. package/gauge/index.js.map +0 -1
  106. package/index.js +0 -24
  107. package/index.js.map +0 -1
  108. package/organization/EventNode.d.ts +0 -22
  109. package/organization/EventNode.js +0 -30
  110. package/organization/EventNode.js.map +0 -1
  111. package/organization/IVersion.js +0 -3
  112. package/organization/IVersion.js.map +0 -1
  113. package/organization/Link.d.ts +0 -16
  114. package/organization/Link.js.map +0 -1
  115. package/organization/Measure.d.ts +0 -22
  116. package/organization/Measure.js +0 -45
  117. package/organization/Measure.js.map +0 -1
  118. package/organization/PeopleNode.d.ts +0 -18
  119. package/organization/PeopleNode.js.map +0 -1
  120. package/organization/RaainNode.d.ts +0 -24
  121. package/organization/RaainNode.js +0 -109
  122. package/organization/RaainNode.js.map +0 -1
  123. package/organization/TeamNode.d.ts +0 -22
  124. package/organization/TeamNode.js +0 -32
  125. package/organization/TeamNode.js.map +0 -1
  126. package/organization/index.js +0 -24
  127. package/organization/index.js.map +0 -1
  128. package/polar/AbstractPolarMeasureValue.d.ts +0 -29
  129. package/polar/AbstractPolarMeasureValue.js.map +0 -1
  130. package/polar/IPolarMeasureValue.d.ts +0 -19
  131. package/polar/IPolarMeasureValue.js +0 -3
  132. package/polar/IPolarMeasureValue.js.map +0 -1
  133. package/polar/MeasureValuePolarContainer.d.ts +0 -19
  134. package/polar/MeasureValuePolarContainer.js.map +0 -1
  135. package/polar/PolarFilter.d.ts +0 -16
  136. package/polar/PolarFilter.js +0 -45
  137. package/polar/PolarFilter.js.map +0 -1
  138. package/polar/PolarMeasureValue.d.ts +0 -51
  139. package/polar/PolarMeasureValue.js.map +0 -1
  140. package/polar/PolarMeasureValueMap.d.ts +0 -45
  141. package/polar/PolarMeasureValueMap.js.map +0 -1
  142. package/polar/PolarValue.d.ts +0 -10
  143. package/polar/PolarValue.js +0 -12
  144. package/polar/PolarValue.js.map +0 -1
  145. package/polar/RadarPolarMeasureValue.d.ts +0 -27
  146. package/polar/RadarPolarMeasureValue.js.map +0 -1
  147. package/polar/RainPolarMeasureValue.d.ts +0 -20
  148. package/polar/RainPolarMeasureValue.js +0 -42
  149. package/polar/RainPolarMeasureValue.js.map +0 -1
  150. package/polar/index.js +0 -25
  151. package/polar/index.js.map +0 -1
  152. package/quality/QualityPoint.d.ts +0 -37
  153. package/quality/QualityPoint.js.map +0 -1
  154. package/quality/SpeedMatrix.d.ts +0 -83
  155. package/quality/SpeedMatrix.js.map +0 -1
  156. package/quality/SpeedMatrixContainer.d.ts +0 -102
  157. package/quality/SpeedMatrixContainer.js.map +0 -1
  158. package/quality/history/CartesianGaugeHistory.d.ts +0 -15
  159. package/quality/history/CartesianGaugeHistory.js +0 -14
  160. package/quality/history/CartesianGaugeHistory.js.map +0 -1
  161. package/quality/history/CartesianRainHistory.d.ts +0 -9
  162. package/quality/history/CartesianRainHistory.js +0 -11
  163. package/quality/history/CartesianRainHistory.js.map +0 -1
  164. package/quality/history/PositionHistory.d.ts +0 -20
  165. package/quality/history/PositionHistory.js +0 -17
  166. package/quality/history/PositionHistory.js.map +0 -1
  167. package/quality/index.js +0 -26
  168. package/quality/index.js.map +0 -1
  169. package/quality/position/Position.d.ts +0 -22
  170. package/quality/position/Position.js +0 -50
  171. package/quality/position/Position.js.map +0 -1
  172. package/quality/position/PositionValue.d.ts +0 -9
  173. package/quality/position/PositionValue.js +0 -12
  174. package/quality/position/PositionValue.js.map +0 -1
  175. package/quality/tools/QualityTools.d.ts +0 -9
  176. package/quality/tools/QualityTools.js.map +0 -1
  177. package/radar/RadarMeasure.d.ts +0 -19
  178. package/radar/RadarMeasure.js +0 -30
  179. package/radar/RadarMeasure.js.map +0 -1
  180. package/radar/RadarNode.d.ts +0 -30
  181. package/radar/RadarNode.js.map +0 -1
  182. package/radar/RadarNodeMap.d.ts +0 -26
  183. package/radar/RadarNodeMap.js +0 -44
  184. package/radar/RadarNodeMap.js.map +0 -1
  185. package/radar/index.js +0 -20
  186. package/radar/index.js.map +0 -1
  187. package/rain/MergeStrategy.d.ts +0 -13
  188. package/rain/MergeStrategy.js +0 -11
  189. package/rain/MergeStrategy.js.map +0 -1
  190. package/rain/RainComputation.d.ts +0 -42
  191. package/rain/RainComputation.js +0 -65
  192. package/rain/RainComputation.js.map +0 -1
  193. package/rain/RainComputationAbstract.d.ts +0 -73
  194. package/rain/RainComputationAbstract.js.map +0 -1
  195. package/rain/RainComputationMap.d.ts +0 -37
  196. package/rain/RainComputationMap.js +0 -58
  197. package/rain/RainComputationMap.js.map +0 -1
  198. package/rain/RainComputationQuality.d.ts +0 -40
  199. package/rain/RainComputationQuality.js.map +0 -1
  200. package/rain/RainMeasure.d.ts +0 -17
  201. package/rain/RainMeasure.js +0 -18
  202. package/rain/RainMeasure.js.map +0 -1
  203. package/rain/RainNode.d.ts +0 -46
  204. package/rain/RainNode.js.map +0 -1
  205. package/rain/index.js +0 -23
  206. package/rain/index.js.map +0 -1
  207. /package/{cartesian/index.d.ts → src/cartesian/index.ts} +0 -0
  208. /package/{gauge/index.d.ts → src/gauge/index.ts} +0 -0
  209. /package/{index.d.ts → src/index.ts} +0 -0
  210. /package/{organization/IVersion.d.ts → src/organization/IVersion.ts} +0 -0
  211. /package/{organization/index.d.ts → src/organization/index.ts} +0 -0
  212. /package/{polar/index.d.ts → src/polar/index.ts} +0 -0
  213. /package/{radar/index.d.ts → src/radar/index.ts} +0 -0
  214. /package/{rain/index.d.ts → src/rain/index.ts} +0 -0
@@ -1,9 +1,26 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QualityPoint = void 0;
4
- const cartesian_1 = require("../cartesian");
5
- class QualityPoint {
6
- constructor(json) {
1
+ import {CartesianValue} from '../cartesian';
2
+
3
+ export class QualityPoint {
4
+
5
+ public gaugeId: string;
6
+ public gaugeLabel: string;
7
+ public gaugeDate: Date;
8
+ public rainDate: Date;
9
+ public gaugeCartesianValue: CartesianValue;
10
+ public rainCartesianValues: CartesianValue[];
11
+ public speed: { x: number, y: number };
12
+ public remark: string;
13
+
14
+ constructor(json: {
15
+ gaugeId: string,
16
+ gaugeLabel: string,
17
+ gaugeDate: Date,
18
+ rainDate: Date,
19
+ gaugeCartesianValue: CartesianValue,
20
+ rainCartesianValues: CartesianValue[],
21
+ speed: { x: number, y: number },
22
+ remark: string,
23
+ }) {
7
24
  this.gaugeId = json.gaugeId;
8
25
  this.gaugeLabel = json.gaugeLabel;
9
26
  this.gaugeDate = new Date(json.gaugeDate);
@@ -13,68 +30,81 @@ class QualityPoint {
13
30
  this.speed = json.speed;
14
31
  this.remark = json.remark;
15
32
  }
16
- static CreateFromJSON(src) {
17
- var _a, _b;
33
+
34
+ static CreateFromJSON(src: QualityPoint) {
18
35
  return new QualityPoint({
19
36
  gaugeId: src.gaugeId,
20
37
  gaugeLabel: src.gaugeLabel,
21
38
  gaugeDate: new Date(src.gaugeDate),
22
39
  rainDate: new Date(src.rainDate),
23
- gaugeCartesianValue: new cartesian_1.CartesianValue(src.gaugeCartesianValue),
24
- rainCartesianValues: src.rainCartesianValues.map(v => new cartesian_1.CartesianValue(v)),
25
- speed: { x: (_a = src.speed) === null || _a === void 0 ? void 0 : _a.x, y: (_b = src.speed) === null || _b === void 0 ? void 0 : _b.y },
40
+ gaugeCartesianValue: new CartesianValue(src.gaugeCartesianValue),
41
+ rainCartesianValues: src.rainCartesianValues.map(v => new CartesianValue(v)),
42
+ speed: {x: src.speed?.x, y: src.speed?.y},
26
43
  remark: src.remark,
27
- });
44
+ })
28
45
  }
29
- getGaugeValue() {
30
- var _a;
31
- return (_a = this.gaugeCartesianValue) === null || _a === void 0 ? void 0 : _a.value;
46
+
47
+ getGaugeValue(): number {
48
+ return this.gaugeCartesianValue?.value;
32
49
  }
33
- getRainValue() {
50
+
51
+ getRainValue(): number {
34
52
  const sum = this.rainCartesianValues.reduce((prev, rcv) => prev + rcv.value, 0);
35
53
  return this.rainCartesianValues.length ? sum / this.rainCartesianValues.length : 0;
36
54
  }
37
- getRainLat() {
38
- var _a;
39
- return (_a = this.getMiddleValue()) === null || _a === void 0 ? void 0 : _a.lat;
55
+
56
+ getRainLat(): number {
57
+ return this.getMiddleValue()?.lat;
40
58
  }
41
- getRainLng() {
42
- var _a;
43
- return (_a = this.getMiddleValue()) === null || _a === void 0 ? void 0 : _a.lng;
59
+
60
+ getRainLng(): number {
61
+ return this.getMiddleValue()?.lng;
44
62
  }
45
- getDelta() {
46
- return Math.abs(this.getRainValue() - this.getGaugeValue());
63
+
64
+ getDelta(): number {
65
+ const rain = this.getRainValue();
66
+ const gauge = this.getGaugeValue();
67
+ if (typeof rain !== 'number' || typeof gauge !== 'number') {
68
+ return undefined;
69
+ }
70
+ return Math.abs(rain - gauge);
47
71
  }
48
- getRatio() {
72
+
73
+ getRatio(): number {
74
+
49
75
  let ratio = 0;
50
76
  if (this.getRainValue() === 0) {
51
77
  return ratio;
52
78
  }
79
+
53
80
  if (this.getGaugeValue() > this.getRainValue()) {
54
81
  ratio = this.getRainValue() / this.getGaugeValue();
55
- }
56
- else {
82
+ } else {
57
83
  ratio = this.getGaugeValue() / this.getRainValue();
58
84
  }
85
+
59
86
  return ratio;
60
87
  }
61
- getTimeDeltaInMinutes() {
88
+
89
+ getTimeDeltaInMinutes(): number {
62
90
  const delta = this.rainDate.getTime() - this.gaugeDate.getTime();
63
91
  return Math.round(delta / 60000);
64
92
  }
65
- accumulateValues(qualityPoint) {
93
+
94
+ accumulateValues(qualityPoint: QualityPoint) {
66
95
  this.gaugeCartesianValue.value += qualityPoint.getGaugeValue();
67
96
  if (this.rainCartesianValues.length === 0) {
68
97
  this.rainCartesianValues = qualityPoint.rainCartesianValues.map(q => q);
69
- }
70
- else {
98
+ } else {
71
99
  this.rainCartesianValues.forEach(v => v.value += qualityPoint.getRainValue());
72
100
  }
73
101
  }
74
- getMiddleValue() {
102
+
103
+ private getMiddleValue(): CartesianValue {
75
104
  if (!this.rainCartesianValues || this.rainCartesianValues.length === 0) {
76
105
  return null;
77
106
  }
107
+
78
108
  const sortedValues = this.rainCartesianValues.sort((a, b) => {
79
109
  return (a.lat - b.lat) * (a.lng - b.lng);
80
110
  });
@@ -82,5 +112,3 @@ class QualityPoint {
82
112
  return sortedValues[middlePos];
83
113
  }
84
114
  }
85
- exports.QualityPoint = QualityPoint;
86
- //# sourceMappingURL=QualityPoint.js.map
@@ -1,41 +1,57 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SpeedMatrix = void 0;
4
- const PositionHistory_1 = require("./history/PositionHistory");
5
- const PositionValue_1 = require("./position/PositionValue");
6
- const QualityTools_1 = require("./tools/QualityTools");
7
- const Position_1 = require("./position/Position");
8
- const QualityPoint_1 = require("./QualityPoint");
9
- const CartesianValue_1 = require("../cartesian/CartesianValue");
10
- const CartesianTools_1 = require("../cartesian/CartesianTools");
11
- class SpeedMatrix {
12
- constructor(name, remarks, qualityPoints, speed = { angleInDegrees: 0, pixelsPerPeriod: 0 }, trustedTechnicalIndicator = SpeedMatrix.DEFAULT_TRUSTED_INDICATOR, flattenPositionRange = {
13
- xMin: -SpeedMatrix.DEFAULT_MATRIX_RANGE,
14
- xMax: SpeedMatrix.DEFAULT_MATRIX_RANGE,
15
- yMin: -SpeedMatrix.DEFAULT_MATRIX_RANGE,
16
- yMax: SpeedMatrix.DEFAULT_MATRIX_RANGE
17
- }, roundScale = new Position_1.Position({ x: CartesianTools_1.CartesianTools.DEFAULT_SCALE, y: CartesianTools_1.CartesianTools.DEFAULT_SCALE })) {
18
- this.name = name;
19
- this.remarks = remarks;
20
- this.qualityPoints = qualityPoints;
21
- this.speed = speed;
22
- this.trustedTechnicalIndicator = trustedTechnicalIndicator;
23
- this.flattenPositionRange = flattenPositionRange;
24
- this.roundScale = roundScale;
25
- }
26
- static CreateFromJson(json) {
27
- const created = new SpeedMatrix(json.name, json.remarks, json.qualityPoints, json.speed, json.trustedTechnicalIndicator, json.flattenPositionRange, json.roundScale);
1
+ import {PositionHistory} from './history/PositionHistory';
2
+ import {PositionValue} from './position/PositionValue';
3
+ import {QualityTools} from './tools/QualityTools';
4
+ import {Position} from './position/Position';
5
+ import {QualityPoint} from './QualityPoint';
6
+ import {CartesianValue} from '../cartesian/CartesianValue';
7
+ import {CartesianTools} from '../cartesian/CartesianTools';
8
+
9
+ export class SpeedMatrix {
10
+
11
+ public static DEFAULT_MATRIX_RANGE = 16;
12
+ public static DEFAULT_TRUSTED_INDICATOR = 1;
13
+
14
+ protected flattenPositionHistory: number[][];
15
+
16
+ constructor(
17
+ public name: string,
18
+ public remarks: string,
19
+ protected qualityPoints: QualityPoint[],
20
+ protected speed: { angleInDegrees: number, pixelsPerPeriod: number } = {angleInDegrees: 0, pixelsPerPeriod: 0},
21
+ protected trustedTechnicalIndicator = SpeedMatrix.DEFAULT_TRUSTED_INDICATOR,
22
+ protected flattenPositionRange: { xMin: number, xMax: number, yMin: number, yMax: number } = {
23
+ xMin: -SpeedMatrix.DEFAULT_MATRIX_RANGE,
24
+ xMax: SpeedMatrix.DEFAULT_MATRIX_RANGE,
25
+ yMin: -SpeedMatrix.DEFAULT_MATRIX_RANGE,
26
+ yMax: SpeedMatrix.DEFAULT_MATRIX_RANGE
27
+ },
28
+ public roundScale: Position = new Position({x: CartesianTools.DEFAULT_SCALE, y: CartesianTools.DEFAULT_SCALE})
29
+ ) {
30
+ }
31
+
32
+ public static CreateFromJson(json: any | SpeedMatrix): SpeedMatrix {
33
+ const created = new SpeedMatrix(
34
+ json.name,
35
+ json.remarks,
36
+ json.qualityPoints,
37
+ json.speed,
38
+ json.trustedTechnicalIndicator,
39
+ json.flattenPositionRange,
40
+ json.roundScale);
41
+
28
42
  if (json.flattenPositionHistory) {
29
43
  created.flattenPositionHistory = json.flattenPositionHistory;
30
44
  }
45
+
31
46
  return created;
32
47
  }
48
+
33
49
  /**
34
50
  * Get quality indicator based on delta from computed vs reality
35
51
  * 0 is ideal
36
52
  * 2.56 (for example) is not ideal => can be improved :)
37
53
  */
38
- static ComputeQualityIndicator(points) {
54
+ public static ComputeQualityIndicator(points: QualityPoint[]): number {
39
55
  let indicator = 0;
40
56
  for (const point of points) {
41
57
  indicator += point.getDelta();
@@ -43,34 +59,40 @@ class SpeedMatrix {
43
59
  if (points.length > 0) {
44
60
  indicator = indicator / points.length;
45
61
  }
62
+
46
63
  return indicator;
47
64
  }
48
- static LogPositionValues(positionValues, valueDisplayFn, flattenPositionRange = {
49
- xMin: -SpeedMatrix.DEFAULT_MATRIX_RANGE,
50
- xMax: SpeedMatrix.DEFAULT_MATRIX_RANGE,
51
- yMin: -SpeedMatrix.DEFAULT_MATRIX_RANGE,
52
- yMax: SpeedMatrix.DEFAULT_MATRIX_RANGE
53
- }, logger = console) {
54
- const labelWithSign = (val) => {
65
+
66
+ static LogPositionValues(positionValues: PositionHistory[],
67
+ valueDisplayFn: (v: PositionHistory) => string,
68
+ flattenPositionRange: { xMin: number, xMax: number, yMin: number, yMax: number } = {
69
+ xMin: -SpeedMatrix.DEFAULT_MATRIX_RANGE,
70
+ xMax: SpeedMatrix.DEFAULT_MATRIX_RANGE,
71
+ yMin: -SpeedMatrix.DEFAULT_MATRIX_RANGE,
72
+ yMax: SpeedMatrix.DEFAULT_MATRIX_RANGE
73
+ },
74
+ logger = console) {
75
+
76
+ const labelWithSign = (val: number) => {
55
77
  if (val < 0) {
56
78
  return '' + val;
57
- }
58
- else if (val === 0) {
79
+ } else if (val === 0) {
59
80
  return ' ' + 0;
60
81
  }
61
82
  return '+' + val;
62
- };
63
- const labelX = (x) => {
83
+ }
84
+ const labelX = (x: number) => {
64
85
  return 'x' + labelWithSign(x - flattenPositionRange.xMax);
65
86
  };
66
- const labelY = (y) => {
87
+ const labelY = (y: number) => {
67
88
  return 'y' + labelWithSign(y - flattenPositionRange.yMax);
68
89
  };
90
+
69
91
  const matrixToRender = {};
70
92
  for (let y = flattenPositionRange.yMax - flattenPositionRange.yMin; y >= 0; y--) {
71
93
  const xObject = {};
72
94
  for (let x = 0; x <= flattenPositionRange.xMax - flattenPositionRange.xMin; x++) {
73
- xObject[labelX(x)] = valueDisplayFn(new PositionHistory_1.PositionHistory({
95
+ xObject[labelX(x)] = valueDisplayFn(new PositionHistory({
74
96
  id: 'id',
75
97
  label: 'label',
76
98
  date: new Date(),
@@ -91,54 +113,65 @@ class SpeedMatrix {
91
113
  matrixToRender[labelY(yOfMatrix)][labelX(xOfMatrix)] = valueDisplayFn(value);
92
114
  }
93
115
  }
94
- logger === null || logger === void 0 ? void 0 : logger.table(matrixToRender);
116
+
117
+ logger?.table(matrixToRender);
95
118
  }
96
- static Normalize(values) {
97
- const built = [];
119
+
120
+
121
+ public static Normalize(values: PositionValue[]): PositionValue[] {
122
+ const built: PositionValue[] = [];
98
123
  let maxValue = Number.EPSILON;
99
124
  for (const pos of values) {
100
125
  maxValue = Math.max(maxValue, pos.value);
101
126
  }
102
127
  for (const pos of values) {
103
128
  const normalizedValue = pos.value / maxValue;
104
- built.push(new PositionValue_1.PositionValue({ x: pos.x, y: pos.y, value: normalizedValue }));
129
+ built.push(new PositionValue({x: pos.x, y: pos.y, value: normalizedValue}));
105
130
  }
106
131
  return built;
107
132
  }
108
- renderFlatten(options) {
133
+
134
+ renderFlatten(options: { normalize: boolean }): PositionValue[] {
135
+
109
136
  const positionMatrix = this.getFlatten();
110
137
  if (positionMatrix.length === 0) {
111
138
  return [];
112
139
  }
113
- const positionHistories = [];
140
+
141
+ const positionHistories: PositionValue[] = [];
114
142
  let maxValue = 0;
115
143
  for (const [iX, posX] of positionMatrix.entries()) {
116
144
  for (const [iY, value] of posX.entries()) {
117
145
  const x = iX + this.flattenPositionRange.xMin;
118
146
  const y = iY + this.flattenPositionRange.yMin;
119
147
  maxValue = Math.max(maxValue, value);
120
- positionHistories.push(new PositionValue_1.PositionValue({ x, y, value }));
148
+ positionHistories.push(new PositionValue({x, y, value}));
121
149
  }
122
150
  }
151
+
123
152
  // Normalize
124
153
  if (maxValue && options.normalize) {
125
154
  positionHistories.forEach(p => {
126
155
  p.value = p.value / maxValue;
127
156
  });
128
157
  }
158
+
129
159
  return positionHistories;
130
160
  }
131
- getGaugeIdRelatedValues(id) {
161
+
162
+ getGaugeIdRelatedValues(id: string): QualityPoint {
132
163
  const points = this.qualityPoints.filter(p => p.gaugeId === id);
133
164
  if (points.length === 1) {
134
165
  return points[0];
135
166
  }
136
167
  return null;
137
168
  }
138
- getQualityPoints() {
139
- return this.qualityPoints.map(p => new QualityPoint_1.QualityPoint(p));
169
+
170
+ getQualityPoints(): QualityPoint[] {
171
+ return this.qualityPoints.map(p => new QualityPoint(p));
140
172
  }
141
- getMaxRain() {
173
+
174
+ getMaxRain(): number {
142
175
  const qualityPoints = this.getQualityPoints();
143
176
  let max = -1;
144
177
  for (const p of qualityPoints) {
@@ -146,7 +179,8 @@ class SpeedMatrix {
146
179
  }
147
180
  return max;
148
181
  }
149
- getMaxGauge() {
182
+
183
+ getMaxGauge(): number {
150
184
  const qualityPoints = this.getQualityPoints();
151
185
  let max = -1;
152
186
  for (const p of qualityPoints) {
@@ -154,12 +188,15 @@ class SpeedMatrix {
154
188
  }
155
189
  return max;
156
190
  }
157
- getTrustedTechnicalIndicator() {
191
+
192
+ getTrustedTechnicalIndicator(): number {
158
193
  return this.trustedTechnicalIndicator;
159
194
  }
160
- isConsistent() {
195
+
196
+ isConsistent(): boolean {
161
197
  return this.trustedTechnicalIndicator > SpeedMatrix.DEFAULT_TRUSTED_INDICATOR / 2;
162
198
  }
199
+
163
200
  toJSON() {
164
201
  return {
165
202
  name: this.name,
@@ -172,10 +209,13 @@ class SpeedMatrix {
172
209
  roundScale: this.roundScale,
173
210
  };
174
211
  }
175
- logFlatten(options = { logger: console, simplify: false }) {
212
+
213
+ logFlatten(options: { logger: any, simplify: boolean }
214
+ = {logger: console, simplify: false}) {
176
215
  const logger = options.logger;
177
- const flatten = this.renderFlatten({ normalize: false });
178
- const positionHistories = flatten.map(pv => new PositionHistory_1.PositionHistory({
216
+
217
+ const flatten = this.renderFlatten({normalize: false});
218
+ const positionHistories = flatten.map(pv => new PositionHistory({
179
219
  id: '-',
180
220
  label: '-',
181
221
  date: null,
@@ -185,63 +225,64 @@ class SpeedMatrix {
185
225
  valueFromGauge: -1,
186
226
  valueFromRain: -1
187
227
  }));
188
- const valueDisplay = (pv) => {
228
+
229
+ const valueDisplay = (pv: PositionValue): string => {
189
230
  const v = pv.value;
190
231
  if (options.simplify) {
191
232
  if (v === 1) {
192
233
  return '##';
193
- }
194
- else if (v >= 0.8) {
234
+ } else if (v >= 0.8) {
195
235
  return '#';
196
- }
197
- else if (v >= 0.5) {
236
+ } else if (v >= 0.5) {
198
237
  return '=';
199
- }
200
- else if (v >= 0.2) {
238
+ } else if (v >= 0.2) {
201
239
  return '_';
202
240
  }
203
241
  return ' ';
204
242
  }
205
243
  return '' + Math.round(v * 1000) / 1000;
206
- };
244
+ }
245
+
207
246
  SpeedMatrix.LogPositionValues(positionHistories, valueDisplay, this.flattenPositionRange, logger);
208
247
  }
248
+
209
249
  getSpeed() {
210
250
  if (!this.speed) {
211
- return { angleInDegrees: 0, pixelsPerPeriod: 0 };
251
+ return {angleInDegrees: 0, pixelsPerPeriod: 0};
212
252
  }
213
253
  return this.speed;
214
254
  }
215
- getFlatten() {
255
+
256
+ protected getFlatten(): number[][] {
216
257
  if (this.flattenPositionHistory) {
217
258
  return this.flattenPositionHistory;
218
259
  }
260
+
219
261
  this.flattenPositionHistory = [];
220
262
  const yWidth = this.flattenPositionRange.yMax - this.flattenPositionRange.yMin + 1;
221
263
  const xWidth = this.flattenPositionRange.xMax - this.flattenPositionRange.xMin + 1;
222
264
  for (let y = 0; y < yWidth; y++) {
223
265
  this.flattenPositionHistory.push(new Array(xWidth).fill(0));
224
266
  }
267
+
225
268
  // same position => add value
226
269
  for (const qualityPoint of this.qualityPoints) {
227
270
  const value = qualityPoint.getRatio();
228
271
  const lat = qualityPoint.getRainLat() - qualityPoint.gaugeCartesianValue.lat;
229
272
  const lng = qualityPoint.getRainLng() - qualityPoint.gaugeCartesianValue.lng;
230
- const cartesianValue = new CartesianValue_1.CartesianValue({ value, lat, lng });
231
- const position = QualityTools_1.QualityTools.MapLatLngToPosition(cartesianValue);
273
+ const cartesianValue = new CartesianValue({value, lat, lng});
274
+ const position = QualityTools.MapLatLngToPosition(cartesianValue);
275
+
232
276
  const positionX = Math.round((position.x / this.roundScale.x) - this.flattenPositionRange.xMin);
233
277
  const positionY = Math.round((position.y / this.roundScale.y) - this.flattenPositionRange.yMin);
278
+
234
279
  if (0 <= positionX && positionX < xWidth && 0 <= positionY && positionY < yWidth) {
235
280
  this.flattenPositionHistory[positionX][positionY] += cartesianValue.value;
236
- }
237
- else {
281
+ } else {
238
282
  throw new Error('Matrix ranges and positions are not consistent.');
239
283
  }
240
284
  }
285
+
241
286
  return this.flattenPositionHistory;
242
287
  }
243
288
  }
244
- exports.SpeedMatrix = SpeedMatrix;
245
- SpeedMatrix.DEFAULT_MATRIX_RANGE = 16;
246
- SpeedMatrix.DEFAULT_TRUSTED_INDICATOR = 1;
247
- //# sourceMappingURL=SpeedMatrix.js.map