raain-model 2.6.10 → 3.0.1

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 (215) hide show
  1. package/CHANGELOG.md +94 -7
  2. package/README.md +14 -13
  3. package/RELEASE_PROCESS.md +91 -4
  4. package/cartesian/CartesianMeasureValue.d.ts +46 -0
  5. package/{src/cartesian/CartesianMeasureValue.ts → cartesian/CartesianMeasureValue.js} +41 -73
  6. package/cartesian/CartesianMeasureValue.js.map +1 -0
  7. package/cartesian/CartesianTools.d.ts +32 -0
  8. package/{src/cartesian/CartesianTools.ts → cartesian/CartesianTools.js} +69 -130
  9. package/cartesian/CartesianTools.js.map +1 -0
  10. package/cartesian/CartesianValue.d.ts +14 -0
  11. package/cartesian/CartesianValue.js +17 -0
  12. package/cartesian/CartesianValue.js.map +1 -0
  13. package/cartesian/EarthMap.d.ts +5 -0
  14. package/cartesian/EarthMap.js +3 -0
  15. package/cartesian/EarthMap.js.map +1 -0
  16. package/cartesian/ICartesianMeasureValue.d.ts +23 -0
  17. package/cartesian/ICartesianMeasureValue.js +3 -0
  18. package/cartesian/ICartesianMeasureValue.js.map +1 -0
  19. package/cartesian/LatLng.d.ts +16 -0
  20. package/cartesian/LatLng.js +34 -0
  21. package/cartesian/LatLng.js.map +1 -0
  22. package/cartesian/RadarCartesianMeasureValue.d.ts +27 -0
  23. package/cartesian/RadarCartesianMeasureValue.js +24 -0
  24. package/cartesian/RadarCartesianMeasureValue.js.map +1 -0
  25. package/cartesian/RainCartesianMeasureValue.d.ts +25 -0
  26. package/cartesian/RainCartesianMeasureValue.js +25 -0
  27. package/cartesian/RainCartesianMeasureValue.js.map +1 -0
  28. package/cartesian/index.js +25 -0
  29. package/cartesian/index.js.map +1 -0
  30. package/gauge/GaugeMeasure.d.ts +30 -0
  31. package/gauge/GaugeMeasure.js +30 -0
  32. package/gauge/GaugeMeasure.js.map +1 -0
  33. package/gauge/GaugeNode.d.ts +95 -0
  34. package/{src/gauge/GaugeNode.ts → gauge/GaugeNode.js} +28 -54
  35. package/gauge/GaugeNode.js.map +1 -0
  36. package/gauge/GaugeNodeMap.d.ts +35 -0
  37. package/gauge/GaugeNodeMap.js +42 -0
  38. package/gauge/GaugeNodeMap.js.map +1 -0
  39. package/gauge/index.js +20 -0
  40. package/gauge/index.js.map +1 -0
  41. package/index.js +24 -0
  42. package/index.js.map +1 -0
  43. package/organization/EventNode.d.ts +30 -0
  44. package/organization/EventNode.js +30 -0
  45. package/organization/EventNode.js.map +1 -0
  46. package/organization/IVersion.js +3 -0
  47. package/organization/IVersion.js.map +1 -0
  48. package/organization/Link.d.ts +16 -0
  49. package/{src/organization/Link.ts → organization/Link.js} +15 -15
  50. package/organization/Link.js.map +1 -0
  51. package/organization/Measure.d.ts +30 -0
  52. package/organization/Measure.js +51 -0
  53. package/organization/Measure.js.map +1 -0
  54. package/organization/PeopleNode.d.ts +23 -0
  55. package/{src/organization/PeopleNode.ts → organization/PeopleNode.js} +10 -20
  56. package/organization/PeopleNode.js.map +1 -0
  57. package/organization/RaainNode.d.ts +95 -0
  58. package/{src/organization/RaainNode.ts → organization/RaainNode.js} +38 -63
  59. package/organization/RaainNode.js.map +1 -0
  60. package/organization/TeamNode.d.ts +51 -0
  61. package/organization/TeamNode.js +52 -0
  62. package/organization/TeamNode.js.map +1 -0
  63. package/organization/index.js +24 -0
  64. package/organization/index.js.map +1 -0
  65. package/package.json +4 -2
  66. package/polar/AbstractPolarMeasureValue.d.ts +31 -0
  67. package/{src/polar/AbstractPolarMeasureValue.ts → polar/AbstractPolarMeasureValue.js} +34 -62
  68. package/polar/AbstractPolarMeasureValue.js.map +1 -0
  69. package/polar/IPolarMeasureValue.d.ts +19 -0
  70. package/polar/IPolarMeasureValue.js +3 -0
  71. package/polar/IPolarMeasureValue.js.map +1 -0
  72. package/polar/MeasureValuePolarContainer.d.ts +24 -0
  73. package/{src/polar/MeasureValuePolarContainer.ts → polar/MeasureValuePolarContainer.js} +13 -29
  74. package/polar/MeasureValuePolarContainer.js.map +1 -0
  75. package/polar/PolarFilter.d.ts +16 -0
  76. package/polar/PolarFilter.js +45 -0
  77. package/polar/PolarFilter.js.map +1 -0
  78. package/polar/PolarMeasureValue.d.ts +51 -0
  79. package/{src/polar/PolarMeasureValue.ts → polar/PolarMeasureValue.js} +62 -125
  80. package/polar/PolarMeasureValue.js.map +1 -0
  81. package/polar/PolarMeasureValueMap.d.ts +45 -0
  82. package/{src/polar/PolarMeasureValueMap.ts → polar/PolarMeasureValueMap.js} +88 -165
  83. package/polar/PolarMeasureValueMap.js.map +1 -0
  84. package/polar/PolarValue.d.ts +10 -0
  85. package/polar/PolarValue.js +12 -0
  86. package/polar/PolarValue.js.map +1 -0
  87. package/polar/RadarPolarMeasureValue.d.ts +33 -0
  88. package/{src/polar/RadarPolarMeasureValue.ts → polar/RadarPolarMeasureValue.js} +31 -39
  89. package/polar/RadarPolarMeasureValue.js.map +1 -0
  90. package/polar/RainPolarMeasureValue.d.ts +24 -0
  91. package/polar/RainPolarMeasureValue.js +46 -0
  92. package/polar/RainPolarMeasureValue.js.map +1 -0
  93. package/polar/index.js +25 -0
  94. package/polar/index.js.map +1 -0
  95. package/quality/QualityPoint.d.ts +37 -0
  96. package/{src/quality/QualityPoint.ts → quality/QualityPoint.js} +33 -56
  97. package/quality/QualityPoint.js.map +1 -0
  98. package/quality/SpeedMatrix.d.ts +83 -0
  99. package/{src/quality/SpeedMatrix.ts → quality/SpeedMatrix.js} +76 -117
  100. package/quality/SpeedMatrix.js.map +1 -0
  101. package/quality/SpeedMatrixContainer.d.ts +102 -0
  102. package/{src/quality/SpeedMatrixContainer.ts → quality/SpeedMatrixContainer.js} +103 -210
  103. package/quality/SpeedMatrixContainer.js.map +1 -0
  104. package/quality/history/CartesianGaugeHistory.d.ts +15 -0
  105. package/quality/history/CartesianGaugeHistory.js +14 -0
  106. package/quality/history/CartesianGaugeHistory.js.map +1 -0
  107. package/quality/history/CartesianRainHistory.d.ts +9 -0
  108. package/quality/history/CartesianRainHistory.js +11 -0
  109. package/quality/history/CartesianRainHistory.js.map +1 -0
  110. package/quality/history/PositionHistory.d.ts +20 -0
  111. package/quality/history/PositionHistory.js +17 -0
  112. package/quality/history/PositionHistory.js.map +1 -0
  113. package/{src/quality/index.ts → quality/index.d.ts} +0 -3
  114. package/quality/index.js +26 -0
  115. package/quality/index.js.map +1 -0
  116. package/quality/position/Position.d.ts +22 -0
  117. package/quality/position/Position.js +50 -0
  118. package/quality/position/Position.js.map +1 -0
  119. package/quality/position/PositionValue.d.ts +9 -0
  120. package/quality/position/PositionValue.js +12 -0
  121. package/quality/position/PositionValue.js.map +1 -0
  122. package/quality/tools/QualityTools.d.ts +9 -0
  123. package/{src/quality/tools/QualityTools.ts → quality/tools/QualityTools.js} +17 -18
  124. package/quality/tools/QualityTools.js.map +1 -0
  125. package/radar/RadarMeasure.d.ts +38 -0
  126. package/radar/RadarMeasure.js +33 -0
  127. package/radar/RadarMeasure.js.map +1 -0
  128. package/radar/RadarNode.d.ts +41 -0
  129. package/radar/RadarNode.js +58 -0
  130. package/radar/RadarNode.js.map +1 -0
  131. package/radar/RadarNodeMap.d.ts +51 -0
  132. package/radar/RadarNodeMap.js +50 -0
  133. package/radar/RadarNodeMap.js.map +1 -0
  134. package/radar/index.js +20 -0
  135. package/radar/index.js.map +1 -0
  136. package/rain/MergeStrategy.d.ts +13 -0
  137. package/rain/MergeStrategy.js +11 -0
  138. package/rain/MergeStrategy.js.map +1 -0
  139. package/rain/RainComputation.d.ts +59 -0
  140. package/rain/RainComputation.js +68 -0
  141. package/rain/RainComputation.js.map +1 -0
  142. package/rain/RainComputationAbstract.d.ts +89 -0
  143. package/rain/RainComputationAbstract.js +207 -0
  144. package/rain/RainComputationAbstract.js.map +1 -0
  145. package/rain/RainComputationMap.d.ts +113 -0
  146. package/{src/rain/RainComputationMap.ts → rain/RainComputationMap.js} +26 -60
  147. package/rain/RainComputationMap.js.map +1 -0
  148. package/rain/RainComputationQuality.d.ts +58 -0
  149. package/{src/rain/RainComputationQuality.ts → rain/RainComputationQuality.js} +52 -89
  150. package/rain/RainComputationQuality.js.map +1 -0
  151. package/rain/RainMeasure.d.ts +17 -0
  152. package/rain/RainMeasure.js +18 -0
  153. package/rain/RainMeasure.js.map +1 -0
  154. package/rain/RainNode.d.ts +60 -0
  155. package/rain/RainNode.js +198 -0
  156. package/rain/RainNode.js.map +1 -0
  157. package/{src/rain/index.ts → rain/index.d.ts} +1 -0
  158. package/rain/index.js +24 -0
  159. package/rain/index.js.map +1 -0
  160. package/.cursorignore +0 -10
  161. package/.github/workflows/ci.yml +0 -29
  162. package/LICENSE +0 -21
  163. package/RELEASE.md +0 -19
  164. package/specs/REQUIREMENTS.md +0 -42
  165. package/specs/TECHNICAL.md +0 -57
  166. package/specs/cartesian/Cartesian.spec.ts +0 -82
  167. package/specs/cartesian/CartesianTools.spec.ts +0 -121
  168. package/specs/gauge/Gauge.spec.ts +0 -39
  169. package/specs/organization/Organization.spec.ts +0 -38
  170. package/specs/polar/Polar.spec.ts +0 -267
  171. package/specs/quality/Position.spec.ts +0 -18
  172. package/specs/quality/QualityPointEdgeCases.spec.ts +0 -215
  173. package/specs/quality/QualityTools.spec.ts +0 -67
  174. package/specs/quality/SpeedMatrix.spec.ts +0 -214
  175. package/specs/radar/Radar.spec.ts +0 -129
  176. package/specs/rain/Rain.spec.ts +0 -334
  177. package/specs/tsconfig.json +0 -12
  178. package/src/cartesian/CartesianValue.ts +0 -26
  179. package/src/cartesian/EarthMap.ts +0 -5
  180. package/src/cartesian/ICartesianMeasureValue.ts +0 -22
  181. package/src/cartesian/LatLng.ts +0 -43
  182. package/src/cartesian/RadarCartesianMeasureValue.ts +0 -32
  183. package/src/cartesian/RainCartesianMeasureValue.ts +0 -32
  184. package/src/gauge/GaugeMeasure.ts +0 -42
  185. package/src/gauge/GaugeNodeMap.ts +0 -55
  186. package/src/organization/EventNode.ts +0 -43
  187. package/src/organization/Measure.ts +0 -61
  188. package/src/organization/TeamNode.ts +0 -91
  189. package/src/polar/IPolarMeasureValue.ts +0 -21
  190. package/src/polar/PolarFilter.ts +0 -46
  191. package/src/polar/PolarValue.ts +0 -16
  192. package/src/polar/RainPolarMeasureValue.ts +0 -57
  193. package/src/quality/history/CartesianGaugeHistory.ts +0 -23
  194. package/src/quality/history/CartesianRainHistory.ts +0 -15
  195. package/src/quality/history/PositionHistory.ts +0 -31
  196. package/src/quality/position/Position.ts +0 -59
  197. package/src/quality/position/PositionValue.ts +0 -15
  198. package/src/radar/RadarMeasure.ts +0 -41
  199. package/src/radar/RadarNode.ts +0 -78
  200. package/src/radar/RadarNodeMap.ts +0 -61
  201. package/src/rain/MergeStrategy.ts +0 -15
  202. package/src/rain/RainComputation.ts +0 -96
  203. package/src/rain/RainComputationAbstract.ts +0 -262
  204. package/src/rain/RainMeasure.ts +0 -25
  205. package/src/rain/RainNode.ts +0 -235
  206. package/tsconfig.json +0 -17
  207. package/tslint.json +0 -79
  208. package/typedoc.json +0 -31
  209. /package/{src/cartesian/index.ts → cartesian/index.d.ts} +0 -0
  210. /package/{src/gauge/index.ts → gauge/index.d.ts} +0 -0
  211. /package/{src/index.ts → index.d.ts} +0 -0
  212. /package/{src/organization/IVersion.ts → organization/IVersion.d.ts} +0 -0
  213. /package/{src/organization/index.ts → organization/index.d.ts} +0 -0
  214. /package/{src/polar/index.ts → polar/index.d.ts} +0 -0
  215. /package/{src/radar/index.ts → radar/index.d.ts} +0 -0
@@ -1,334 +0,0 @@
1
- import {expect} from 'chai';
2
- import {
3
- CartesianTools,
4
- CartesianValue,
5
- LatLng,
6
- MergeStrategy,
7
- PolarMeasureValue,
8
- RadarNode,
9
- RainCartesianMeasureValue,
10
- RainComputation,
11
- RainComputationMap,
12
- RainComputationQuality,
13
- RainMeasure,
14
- RainNode,
15
- RainPolarMeasureValue,
16
- SpeedMatrixContainer,
17
- TeamNode
18
- } from '../../src';
19
-
20
- // tslint:disable-next-line:only-arrow-functions
21
- describe('Rain', function () {
22
-
23
- this.timeout(100000);
24
- const optionalTrace = (...log: any[]) => {
25
- // console.log(new Date().toISOString(), log)
26
- }
27
-
28
- it('should create simple ones', () => {
29
- const rainNodeEmpty = new RainNode({
30
- id: 'notEmpty',
31
- name: '',
32
- links: [],
33
- team: null
34
- });
35
- expect(JSON.stringify(rainNodeEmpty.toJSON()))
36
- .eq('{"id":"notEmpty","links":[],"name":"","status":-1,"quality":-1,"team":null,' +
37
- '"radars":[],"gauges":[],"lastCompletedComputations":[]}');
38
- expect(rainNodeEmpty.getCenter().lat).eq(0);
39
- expect(rainNodeEmpty.getCenter().lng).eq(0);
40
-
41
- const radarNode1 = new RadarNode({
42
- id: 'rid',
43
- latitude: 1, longitude: 1,
44
- name: 'rname',
45
- team: null
46
- });
47
- const radarNode2 = new RadarNode({
48
- id: 'rid',
49
- latitude: 4, longitude: 6,
50
- name: 'rname',
51
- team: null
52
- });
53
- const rainNodeWithRadars = new RainNode({
54
- id: 'notEmpty',
55
- name: '',
56
- team: null,
57
- radars: [radarNode1, radarNode2],
58
- });
59
- expect(JSON.stringify(rainNodeWithRadars.toJSON()))
60
- .eq('{"id":"notEmpty","links":[{"rel":"radar","href":"../radars/rid"}],"name":"","status":-1,"quality":-1,"team":null,' +
61
- '"latLngRectsAsJSON":"[[{\\"lat\\":2,\\"lng\\":0},{\\"lat\\":0,\\"lng\\":2}],[{\\"lat\\":5,\\"lng\\":5},{\\"lat\\":3,\\"lng\\":7}]]",' +
62
- '"radars":["rid"],"gauges":[],"lastCompletedComputations":[]}');
63
-
64
- expect(rainNodeWithRadars.getCenter().lat).eq(2.5);
65
- expect(rainNodeWithRadars.getCenter().lng).eq(3.5);
66
- expect(JSON.stringify(rainNodeWithRadars.getLimitPoints())).eq('[{"lat":0,"lng":0},{"lat":5,"lng":7}]');
67
-
68
-
69
- });
70
-
71
- it('should create some', () => {
72
-
73
- const team1 = new TeamNode({
74
- id: 'tid1',
75
- name: 'team1',
76
- description: 'team...',
77
- contracts: ['basic'],
78
- contacts: []
79
- });
80
- const radarNode = new RadarNode({
81
- id: 'r1',
82
- latitude: 1, longitude: 1,
83
- name: 'any name',
84
- team: team1
85
- });
86
- const rainComputationEmpty = new RainComputation({
87
- id: 'rc1',
88
- date: new Date(10000000),
89
- isReady: null,
90
- results: null,
91
- version: '1.0.0'
92
- });
93
-
94
- const topLeft1 = new LatLng({lat: 1.23, lng: 2.65});
95
- const bottomRight1 = new LatLng({lat: 1.13, lng: 2.75});
96
- const topLeft2 = new LatLng({lat: 2.23, lng: 3.65});
97
- const bottomRight2 = new LatLng({lat: 2.13, lng: 3.75});
98
- const latLngRects = [[topLeft1, bottomRight1], [topLeft2, bottomRight2]]
99
- const rainNode = new RainNode({
100
- id: 'RainNode looks OK.',
101
- name: 'name',
102
- links: [radarNode, rainComputationEmpty, null],
103
- latLngRectsAsJSON: JSON.stringify(latLngRects),
104
- team: team1
105
- });
106
- expect(rainNode.id).eq('RainNode looks OK.');
107
- expect(JSON.stringify(rainNode.toJSON())).eq('' +
108
- '{"id":"RainNode looks OK.",' +
109
- '"links":[' +
110
- '{"rel":"radar","href":"../radars/r1"},' +
111
- '{"rel":"rain-computation","href":"../rain-computations/1970-01-01T02:46:40.000Z/1.0.0/rc1"}],' +
112
- '"name":"name","status":-1,"quality":-1,"team":"tid1",' +
113
- '"latLngRectsAsJSON":"[[{\\"lat\\":1.23,\\"lng\\":2.65},{\\"lat\\":1.13,\\"lng\\":2.75}],[{\\"lat\\":2.23,\\"lng\\":3.65},{\\"lat\\":2.13,\\"lng\\":3.75}]]",' +
114
- '"radars":["r1"],"gauges":[],"lastCompletedComputations":["rc1"]}');
115
-
116
- expect(rainNode.getCenter().lat).eq(1.68);
117
- expect(rainNode.getCenter().lng).eq(3.2);
118
- expect(rainNode.getLinksCount()).eq(2);
119
- expect(rainNode.getLinksCount(RadarNode.TYPE)).eq(1);
120
- expect(rainNode.getLinkIds().toString()).eq('r1,rc1');
121
- expect(rainNode.getLink('radar', 0).getId()).eq('r1');
122
-
123
- const rainComputation = new RainComputation({
124
- id: 'rc1',
125
- date: new Date('2022-01-01'),
126
- links: [radarNode, radarNode, null],
127
- quality: 1,
128
- progressIngest: 1,
129
- progressComputing: 1,
130
- timeSpentInMs: 100,
131
- isReady: true,
132
- isDoneDate: new Date(),
133
- results: [new RainPolarMeasureValue({
134
- polarMeasureValue:
135
- new PolarMeasureValue({measureValuePolarContainers: [], azimuthsCount: 0, polarEdgesCount: 0}),
136
- version: 'version2'
137
- })],
138
- launchedBy: 'oneUser',
139
- version: 'v1',
140
- });
141
-
142
- expect(rainComputation.id).eq('rc1');
143
- expect(rainComputation.getVersion()).eq('v1');
144
-
145
- const rainComputationQuality = new RainComputationQuality({
146
- id: 'rcq1',
147
- date: new Date('2026-07-08'),
148
- links: [radarNode],
149
- quality: 1,
150
- isReady: true,
151
- rainComputation,
152
- qualitySpeedMatrixContainer: new SpeedMatrixContainer({matrices: []}),
153
- version: 'v1'
154
- });
155
- expect(rainComputationQuality.id).eq('rcq1');
156
- expect(rainComputationQuality.getVersion()).eq('v1');
157
- expect(JSON.stringify(rainComputationQuality.toJSON()))
158
- .eq('{' +
159
- '"id":"rcq1",' +
160
- '"links":[' +
161
- '{"rel":"radar","href":"../radars/r1"},' +
162
- '{"rel":"rain-computation","href":"../rain-computations/2022-01-01T00:00:00.000Z/v1/rc1"}' +
163
- '],' +
164
- '"version":"v1",' +
165
- '"date":"2026-07-08T00:00:00.000Z",' +
166
- '"quality":1,' +
167
- '"progressIngest":-1,' +
168
- '"progressComputing":-1,' +
169
- '"isReady":true,' +
170
- '"qualitySpeedMatrixContainer":{"qualityPoints":[],"trustedIndicators":[],"flattenMatrices":[],"speed":{"angleInDegrees":0,"pixelsPerPeriod":0},"matrices":[]},' +
171
- '"rainComputation":"rc1"' +
172
- '}');
173
-
174
- const cartesianValues = [
175
- new CartesianValue({value: 123, lat: 10, lng: 20}),
176
- new CartesianValue({value: 321, lat: 10 + CartesianTools.DEFAULT_SCALE, lng: 20 + CartesianTools.DEFAULT_SCALE})];
177
- const rainCartesianMeasureValue = new RainCartesianMeasureValue({
178
- cartesianValues,
179
- version: 'test',
180
- limitPoints: undefined
181
- })
182
- const rainMeasure = new RainMeasure({id: 'measure', values: [rainCartesianMeasureValue], configurationAsJSON: '{"test": true}'});
183
- expect(JSON.stringify(rainMeasure.toJSON()))
184
- .eq('{"id":"measure","links":[],"validity":-1,"configurationAsJSON":"{\\"test\\":true}","values":[{"cartesianValues":[{"lat":10,"lng":20,"value":123},{"lat":10.01,"lng":20.01,"value":321}],"limitPoints":[{"lat":10,"lng":20},{"lat":10.01,"lng":20.01}],"version":"test"}]}');
185
-
186
- const rainComputationMap = new RainComputationMap({
187
- id: 'rc1',
188
- date: new Date('2022-01-01'),
189
- links: [radarNode, radarNode, null],
190
- quality: 1,
191
- progressIngest: 1,
192
- progressComputing: 1,
193
- timeSpentInMs: 100,
194
- isReady: true,
195
- isDoneDate: new Date('1988-01-01'),
196
- map: [rainMeasure],
197
- launchedBy: 'oneUser',
198
- version: 'v1',
199
- });
200
-
201
- expect(JSON.stringify(rainComputationMap.toJSON()))
202
- .eq('{"id":"rc1","links":[{"rel":"radar","href":"../radars/r1"}],"version":"v1","date":"2022-01-01T00:00:00.000Z","quality":1,"progressIngest":1,"progressComputing":1,"timeSpentInMs":100,"isReady":true,"isDoneDate":"1988-01-01T00:00:00.000Z","launchedBy":"oneUser","map":"[{\\"id\\":\\"measure\\",\\"links\\":[],\\"validity\\":-1,\\"configurationAsJSON\\":\\"{\\\\\\"test\\\\\\":true}\\",\\"values\\":[{\\"cartesianValues\\":[{\\"lat\\":10,\\"lng\\":20,\\"value\\":123},{\\"lat\\":10.01,\\"lng\\":20.01,\\"value\\":321}],\\"limitPoints\\":[{\\"lat\\":10,\\"lng\\":20},{\\"lat\\":10.01,\\"lng\\":20.01}],\\"version\\":\\"test\\"}]}]"}');
203
-
204
- rainComputationMap.setMapData([rainMeasure, rainMeasure], {mergeStrategy: MergeStrategy.NONE});
205
- expect(JSON.stringify(rainComputationMap.toJSON()))
206
- .eq('{"id":"rc1","links":[{"rel":"radar","href":"../radars/r1"}],"version":"v1","date":"2022-01-01T00:00:00.000Z","quality":1,"progressIngest":1,"progressComputing":1,"timeSpentInMs":100,"isReady":true,"isDoneDate":"1988-01-01T00:00:00.000Z","launchedBy":"oneUser","map":"[{\\"id\\":\\"measure\\",\\"links\\":[],\\"validity\\":-1,\\"configurationAsJSON\\":\\"{\\\\\\"test\\\\\\":true}\\",\\"values\\":[{\\"cartesianValues\\":[{\\"lat\\":10,\\"lng\\":20,\\"value\\":123},{\\"lat\\":10.01,\\"lng\\":20.01,\\"value\\":321}],\\"limitPoints\\":[{\\"lat\\":10,\\"lng\\":20},{\\"lat\\":10.01,\\"lng\\":20.01}],\\"version\\":\\"test\\"}]},{\\"id\\":\\"measure\\",\\"links\\":[],\\"validity\\":-1,\\"configurationAsJSON\\":\\"{\\\\\\"test\\\\\\":true}\\",\\"values\\":[{\\"cartesianValues\\":[{\\"lat\\":10,\\"lng\\":20,\\"value\\":123},{\\"lat\\":10.01,\\"lng\\":20.01,\\"value\\":321}],\\"limitPoints\\":[{\\"lat\\":10,\\"lng\\":20},{\\"lat\\":10.01,\\"lng\\":20.01}],\\"version\\":\\"test\\"}]}]"}');
207
-
208
- const cartesianTools = new CartesianTools();
209
- cartesianTools.buildLatLngEarthMap();
210
-
211
- const mergeLimitPoints: [LatLng, LatLng] = [new LatLng({lat: 10, lng: 11}), new LatLng({lat: 11, lng: 11.5})];
212
- rainComputationMap.setMapData([rainMeasure, rainMeasure], {
213
- mergeStrategy: MergeStrategy.AVERAGE,
214
- cartesianTools,
215
- mergeLimitPoints,
216
- removeNullValues: false,
217
- });
218
- expect(JSON.stringify(rainComputationMap.toJSON()))
219
- .eq('{"id":"rc1","links":[{"rel":"radar","href":"../radars/r1"}],"version":"v1","date":"2022-01-01T00:00:00.000Z","quality":1,"progressIngest":1,"progressComputing":1,"timeSpentInMs":100,"isReady":true,"isDoneDate":"1988-01-01T00:00:00.000Z","launchedBy":"oneUser","map":"[{\\"id\\":\\"measure\\",\\"links\\":[],\\"validity\\":-1,\\"configurationAsJSON\\":\\"{\\\\\\"test\\\\\\":true}\\",\\"values\\":[{\\"cartesianValues\\":[],\\"limitPoints\\":[{\\"lat\\":10,\\"lng\\":11},{\\"lat\\":11,\\"lng\\":11.5}]}]}]"}');
220
-
221
- });
222
-
223
- it('should challenge rainComputationMap.setMapData', () => {
224
-
225
- const cartesianPixelWidthToCompute = new LatLng({lat: 0.012, lng: 0.00876});
226
-
227
- optionalTrace('build..');
228
- const rainMeasures = [];
229
- const mergeLimitPoints: [LatLng, LatLng] = [new LatLng({lat: 1, lng: 2}), new LatLng({lat: 3, lng: 5})];
230
- for (let valueId = 1; valueId < 5; valueId++) {
231
- const cartesianValues = [];
232
- let value = valueId;
233
- for (let lat = mergeLimitPoints[0].lat; lat <= mergeLimitPoints[1].lat; lat += cartesianPixelWidthToCompute.lat) {
234
- for (let lng = mergeLimitPoints[0].lng; lng <= mergeLimitPoints[1].lng; lng += cartesianPixelWidthToCompute.lng) {
235
- cartesianValues.push(new CartesianValue({value: value++, lat, lng}))
236
- }
237
- }
238
-
239
- const rainCartesianMeasureValue = new RainCartesianMeasureValue({
240
- cartesianValues,
241
- version: 'test',
242
- limitPoints: undefined,
243
- });
244
- const rainMeasure = new RainMeasure({
245
- id: 'm_' + valueId,
246
- values: [rainCartesianMeasureValue],
247
- configurationAsJSON: '{"test": true}'
248
- });
249
-
250
- rainMeasures.push(rainMeasure);
251
- optionalTrace('rainMeasures pushed', value, 'values');
252
- }
253
- optionalTrace('build done');
254
-
255
- const rainComputationMap = new RainComputationMap({
256
- id: 'rc1',
257
- date: new Date('2022-01-01'),
258
- links: [],
259
- quality: 1,
260
- progressIngest: 1,
261
- progressComputing: 1,
262
- timeSpentInMs: 100,
263
- isReady: true,
264
- isDoneDate: new Date('1988-01-01'),
265
- map: [rainMeasures[0]],
266
- launchedBy: 'test',
267
- version: 'v1',
268
- });
269
-
270
- const cartesianTools = new CartesianTools();
271
- cartesianTools.buildLatLngEarthMap();
272
-
273
- optionalTrace('setMapData...');
274
- rainComputationMap.setMapData(rainMeasures, {
275
- mergeStrategy: MergeStrategy.MAX,
276
- cartesianTools,
277
- mergeLimitPoints,
278
- removeNullValues: true,
279
- });
280
-
281
- optionalTrace('setMapData done');
282
- const mappedRainMeasures = rainComputationMap.getMapData().map(m => new RainMeasure(m as any));
283
- expect(mappedRainMeasures.length).eq(1);
284
- const mappedRainCartesianMeasureValues = mappedRainMeasures[0].values.map(m => new RainCartesianMeasureValue(m as any));
285
- expect(mappedRainCartesianMeasureValues.length).eq(1);
286
- expect(mappedRainCartesianMeasureValues[0].getCartesianValues().length).eq(50267);
287
-
288
- });
289
-
290
- it('should challenge rainComputation merge', () => {
291
-
292
- const cartesianPixelWidthOfEach = new LatLng({lat: 0.05, lng: 0.05});
293
- const mergeLimitPoints: [LatLng, LatLng] = [new LatLng({lat: 2, lng: 1}), new LatLng({lat: 3, lng: 2})];
294
- const limitPointsOfEach: [LatLng, LatLng] = [new LatLng({lat: 1, lng: 1.5}), new LatLng({lat: 2.5, lng: 2})];
295
- const rainCartesianMeasureValues = [];
296
- for (let valueId = 1; valueId < 5; valueId++) {
297
- const cartesianValues = [];
298
- for (let lat = limitPointsOfEach[0].lat; lat <= limitPointsOfEach[1].lat; lat += cartesianPixelWidthOfEach.lat) {
299
- for (let lng = limitPointsOfEach[0].lng; lng <= limitPointsOfEach[1].lng; lng += cartesianPixelWidthOfEach.lng) {
300
- cartesianValues.push(new CartesianValue({lat, lng, value: 1}));
301
- }
302
- }
303
- const rainPolarMeasureValue = new RainCartesianMeasureValue({
304
- cartesianValues,
305
- limitPoints: limitPointsOfEach,
306
- version: 'v'
307
- });
308
- rainCartesianMeasureValues.push(rainPolarMeasureValue);
309
- }
310
-
311
- const rainComputation = new RainComputation({
312
- id: 'cartesian1', date: new Date('2022-01-01'), isReady: true,
313
- results: rainCartesianMeasureValues
314
- });
315
-
316
- const cartesianTools = new CartesianTools();
317
- cartesianTools.buildLatLngEarthMap();
318
-
319
- const mergedRainCartesianMeasureValues = rainComputation.mergeCartesianResults({
320
- mergeStrategy: MergeStrategy.SUM,
321
- cartesianTools,
322
- mergeLimitPoints,
323
- removeNullValues: true,
324
- });
325
-
326
- expect(mergedRainCartesianMeasureValues.length).eq(1);
327
- expect(mergedRainCartesianMeasureValues[0].values.length).eq(1);
328
- const cartesianValuesFound: CartesianValue[] = (mergedRainCartesianMeasureValues[0].values[0] as any).cartesianValues;
329
- expect(cartesianValuesFound.length).eq(110);
330
- expect(cartesianValuesFound[0].lat).eq(2);
331
- expect(cartesianValuesFound[0].lng).eq(1.5);
332
- });
333
-
334
- });
@@ -1,12 +0,0 @@
1
- {
2
- "extends": "../tsconfig.json",
3
- "compilerOptions": {
4
- "baseUrl": "./"
5
- },
6
- "exclude": [
7
- "../node_modules"
8
- ],
9
- "include": [
10
- "./**/*.spec.ts"
11
- ]
12
- }
@@ -1,26 +0,0 @@
1
- import {LatLng} from './LatLng';
2
-
3
- export class CartesianValue extends LatLng {
4
-
5
- public value: number;
6
-
7
- constructor(json: {
8
- value: number,
9
- lat: number,
10
- lng: number
11
- }
12
- ) {
13
- super(json);
14
- this.value = json.value;
15
- }
16
-
17
- toJSON(): {
18
- value: number,
19
- lat: number,
20
- lng: number
21
- } {
22
- const json = super.toJSON() as any;
23
- json.value = this.value;
24
- return json;
25
- }
26
- }
@@ -1,5 +0,0 @@
1
- export interface EarthMap {
2
- latitudeScale: number,
3
- latitudes: number[],
4
- latitudeLongitudeScales: number[],
5
- }
@@ -1,22 +0,0 @@
1
- import {CartesianValue} from './CartesianValue';
2
- import {LatLng} from './LatLng';
3
-
4
- export interface ICartesianMeasureValue {
5
-
6
- getLimitPoints(): [LatLng, LatLng];
7
-
8
- getCartesianValuesStringified(): string;
9
-
10
- getCartesianValues(): CartesianValue[];
11
-
12
- toJSON(): any;
13
-
14
- toJSONWithCartesianValuesStringified(): any;
15
-
16
- getCartesianValue(json: { lat: number, lng: number }): CartesianValue;
17
-
18
- getCartesianValueRounded(json: { lat: number, lng: number, scale: LatLng }): CartesianValue;
19
-
20
- setCartesianValue(json: { lat: number, lng: number, value: number }): void;
21
-
22
- }
@@ -1,43 +0,0 @@
1
- import {CartesianTools} from './CartesianTools';
2
-
3
- export class LatLng {
4
-
5
- public lat: number;
6
- public lng: number;
7
-
8
- constructor(json: {
9
- lat: number,
10
- lng: number,
11
- }) {
12
- if (typeof json?.lat === 'undefined' || typeof json?.lng === 'undefined') {
13
- throw new Error('LatLng needs valid latitude && longitude');
14
- }
15
-
16
- this.lat = json.lat;
17
- this.lng = json.lng;
18
- }
19
-
20
- public equals(v: LatLng) {
21
- return this.lat === v.lat && this.lng === v.lng;
22
- }
23
-
24
- setPrecision(precision: number = 12) {
25
- const tenPower = Math.pow(10, precision);
26
- this.lat = Math.round(this.lat * tenPower) / tenPower;
27
- this.lng = Math.round(this.lng * tenPower) / tenPower;
28
- }
29
-
30
- rounded(scale: LatLng) {
31
- this.lat = CartesianTools.RoundLatLng(this.lat, scale.lat, true);
32
- this.lng = CartesianTools.RoundLatLng(this.lng, scale.lng, true);
33
- }
34
-
35
- limitPrecision(precision = 12) {
36
- this.lat = CartesianTools.LimitWithPrecision(this.lat, precision);
37
- this.lng = CartesianTools.LimitWithPrecision(this.lng, precision);
38
- }
39
-
40
- toJSON() {
41
- return {lat: this.lat, lng: this.lng};
42
- }
43
- }
@@ -1,32 +0,0 @@
1
- import {CartesianValue} from './CartesianValue';
2
- import {CartesianMeasureValue} from './CartesianMeasureValue';
3
- import {LatLng} from './LatLng';
4
-
5
- export class RadarCartesianMeasureValue extends CartesianMeasureValue {
6
-
7
- public angle: number; // In degrees. Radar incidence angle, from 0° to 90°, from the ground to the top
8
- public axis: number; // In degrees. Polarization angle 0° = horizontal, 90°= vertical.
9
-
10
- constructor(json: {
11
- cartesianValues: string | CartesianValue[],
12
- angle: number,
13
- axis: number,
14
- limitPoints: [LatLng, LatLng],
15
- }) {
16
-
17
- super(json);
18
- this.angle = json.angle;
19
- this.axis = json.axis;
20
- }
21
-
22
- toJSON(options = {stringify: false}): any {
23
- const json: any = super.toJSON(options);
24
- json.angle = this.angle;
25
- json.axis = this.axis;
26
- return json;
27
- }
28
-
29
- toJSONWithCartesianValuesStringified(): any {
30
- return this.toJSON({stringify: true});
31
- }
32
- }
@@ -1,32 +0,0 @@
1
- import {IVersion} from '../organization';
2
- import {CartesianValue} from './CartesianValue';
3
- import {CartesianMeasureValue} from './CartesianMeasureValue';
4
- import {LatLng} from './LatLng';
5
-
6
- export class RainCartesianMeasureValue extends CartesianMeasureValue implements IVersion {
7
-
8
- private readonly version: string;
9
-
10
- constructor(json: {
11
- cartesianValues: string | CartesianValue[],
12
- limitPoints: [LatLng, LatLng],
13
- version: string,
14
- }) {
15
- super(json);
16
- this.version = json.version;
17
- }
18
-
19
- getVersion(): string {
20
- return this.version;
21
- }
22
-
23
- toJSON(options = {stringify: false}): any {
24
- const json: any = super.toJSON(options);
25
- json.version = this.getVersion();
26
- return json;
27
- }
28
-
29
- toJSONWithCartesianValuesStringified(): any {
30
- return this.toJSON({stringify: true});
31
- }
32
- }
@@ -1,42 +0,0 @@
1
- import {Measure} from '../organization';
2
- import {IPolarMeasureValue} from '../polar';
3
- import {ICartesianMeasureValue} from '../cartesian';
4
- import {GaugeNode} from './GaugeNode';
5
-
6
- /**
7
- * api/gauges/:id/measures/:id
8
- */
9
- export class GaugeMeasure extends Measure {
10
-
11
- public static TYPE = 'gauge-measure';
12
-
13
- public gauge: string;
14
-
15
- constructor(json: {
16
- id: string,
17
- values: IPolarMeasureValue[] | ICartesianMeasureValue[] | number[],
18
- date?: Date,
19
- validity?: number,
20
- configurationAsJSON?: string,
21
- gauge?: string
22
- }
23
- ) {
24
- super(json);
25
- if (json.gauge) {
26
- this.addLinks([new GaugeNode({id: json.gauge, latitude: NaN, longitude: NaN, team: null, name: null})]);
27
- }
28
- }
29
-
30
- public toJSON(options?: any): any {
31
- const json = super.toJSON(options);
32
- const gaugeLink = this.getLink(GaugeNode.TYPE);
33
- if (gaugeLink) {
34
- json['gauge'] = gaugeLink.getId();
35
- }
36
- return json;
37
- }
38
-
39
- protected getLinkType(): string {
40
- return GaugeMeasure.TYPE;
41
- }
42
- }
@@ -1,55 +0,0 @@
1
- import {Link, RaainNode, TeamNode} from '../organization';
2
- import {GaugeNode} from './GaugeNode';
3
- import {GaugeMeasure} from './GaugeMeasure';
4
-
5
- /**
6
- * api/gauges/:id?format=map&begin=...
7
- */
8
- export class GaugeNodeMap extends GaugeNode {
9
-
10
- private map: string; // GaugeMeasure[]; stringified
11
-
12
- constructor(json: {
13
- id: string,
14
- latitude: number,
15
- longitude: number,
16
- name: string,
17
- description: string,
18
- team: TeamNode,
19
- configurationAsJSON?: any,
20
- map?: string,
21
- links?: Link[] | RaainNode[],
22
- version?: string,
23
- }) {
24
- super(json);
25
- this.setMapData(json.map);
26
- }
27
-
28
- public toJSON(): any {
29
- const json = super.toJSON();
30
- json.map = this.map;
31
- return json;
32
- }
33
-
34
- public setMapData(mapData: GaugeMeasure[] | string) {
35
- if (!mapData) {
36
- return;
37
- }
38
-
39
- let map = mapData;
40
- try {
41
- if (typeof (mapData) !== 'string') {
42
- map = JSON.stringify(mapData);
43
- }
44
- } catch (e) {
45
- }
46
- this.map = map.toString();
47
- }
48
-
49
- public getMapData(): GaugeMeasure[] {
50
- if (!this.map) {
51
- return [];
52
- }
53
- return JSON.parse(this.map);
54
- }
55
- }
@@ -1,43 +0,0 @@
1
- /**
2
- * api/notifications/:id
3
- */
4
- export class EventNode {
5
- public id: string;
6
- public title: string;
7
- public status: number;
8
- public red: boolean;
9
- public description: string;
10
- public created: Date;
11
- public modified: Date;
12
-
13
- constructor(json: {
14
- id: string,
15
- title: string,
16
- status: number,
17
- red: boolean,
18
- description: string,
19
- created: Date,
20
- modified: Date
21
- }
22
- ) {
23
- this.id = json.id;
24
- this.title = json.title;
25
- this.status = json.status;
26
- this.red = json.red;
27
- this.description = json.description;
28
- this.created = json.created;
29
- this.modified = json.modified;
30
- }
31
-
32
- public toJSON(): any {
33
- return {
34
- id: this.id,
35
- title: this.title,
36
- status: this.status,
37
- red: this.red,
38
- description: this.description,
39
- created: this.created,
40
- modified: this.modified,
41
- } as any;
42
- }
43
- }