@wemap/providers 4.0.1 → 4.0.4

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 (35) hide show
  1. package/debug/dist/index.html +1 -0
  2. package/debug/dist/turn-detection.html +19 -0
  3. package/debug/index.js +2 -0
  4. package/debug/src/AbsoluteAttitudeComponent.jsx +0 -10
  5. package/debug/src/StepDetectionComponent.jsx +3 -3
  6. package/debug/src/TurnDetectionComponent.jsx +47 -0
  7. package/debug/src/Utils.js +24 -0
  8. package/package.json +7 -9
  9. package/src/Providers.js +5 -4
  10. package/src/ProvidersInterface.js +5 -6
  11. package/src/events/EventType.js +5 -1
  12. package/src/events/ProviderEvent.js +7 -0
  13. package/src/mapmatching/MapMatchingHandler.js +370 -53
  14. package/src/providers/Provider.js +42 -8
  15. package/src/providers/Provider.spec.js +3 -4
  16. package/src/providers/attitude/TurnDectector.js +71 -0
  17. package/src/providers/attitude/absolute/AbsoluteAttitude.js +123 -65
  18. package/src/providers/attitude/relative/RelativeAttitude.js +1 -3
  19. package/src/providers/attitude/relative/RelativeAttitudeFromBrowser.js +1 -2
  20. package/src/providers/attitude/relative/RelativeAttitudeFromEkf.js +1 -2
  21. package/src/providers/attitude/relative/RelativeAttitudeFromInertial.js +19 -2
  22. package/src/providers/imu/HighRotationsDetector.js +62 -0
  23. package/src/providers/inclination/Inclination.js +2 -2
  24. package/src/providers/others/CameraNative.js +2 -2
  25. package/src/providers/others/CameraProjectionMatrix.js +2 -2
  26. package/src/providers/position/absolute/AbsolutePosition.js +112 -82
  27. package/src/providers/position/relative/GeoRelativePosition.js +2 -2
  28. package/src/providers/position/relative/Pdr.js +4 -4
  29. package/src/providers/steps/{StepDetection.js → StepDetector.js} +4 -4
  30. package/src/providers/steps/StraightLineDetector.js +84 -0
  31. package/src/smoothers/AttitudeSmoother.js +94 -59
  32. package/src/providers/MetaProvider.js +0 -44
  33. package/src/providers/attitude/absolute/AbsoluteAttitudeFromRelAtt.js +0 -133
  34. package/src/providers/attitude/absolute/AbsoluteAttitudeFused.js +0 -166
  35. package/src/providers/position/absolute/AbsolutePositionFromRel.js +0 -106
@@ -14,6 +14,7 @@
14
14
  <a href="./absolute-attitude.html">Absolute Attitude</a><br />
15
15
  <a href="./gnss-wifi.html">GNSS-Wifi</a><br />
16
16
  <a href="./step-detection.html">Step Detection</a><br />
17
+ <a href="./turn-detection.html">Turn Detection</a><br />
17
18
  <a href="./absolute-position.html">Absolute Position</a>
18
19
  </body>
19
20
 
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, user-scalable=no">
7
+ <title>Debug Step Detection</title>
8
+ <script src="/js/providers-lib.js"></script>
9
+ </head>
10
+
11
+ <body>
12
+ <div id="app"></div>
13
+ <script>
14
+ /* global createReactElement, TurnDetectionComponent */
15
+ createReactElement(TurnDetectionComponent, document.getElementById('app'));
16
+ </script>
17
+ </body>
18
+
19
+ </html>
package/debug/index.js CHANGED
@@ -8,6 +8,7 @@ import ImuComponent from './src/ImuComponent.jsx';
8
8
  import InclinationComponent from './src/InclinationComponent.jsx';
9
9
  import RelativeAttitudeComponent from './src/RelativeAttitudeComponent.jsx';
10
10
  import StepDetectionComponent from './src/StepDetectionComponent.jsx';
11
+ import TurnDetectionComponent from './src/TurnDetectionComponent.jsx';
11
12
 
12
13
  const createReactElement = (component, container) => ReactDOM.render(
13
14
  React.createElement(component, {}, null),
@@ -22,5 +23,6 @@ export {
22
23
  GnssWifiComponent,
23
24
  RelativeAttitudeComponent,
24
25
  StepDetectionComponent,
26
+ TurnDetectionComponent,
25
27
  createReactElement
26
28
  };
@@ -9,7 +9,6 @@ import { TimeUtils } from '@wemap/utils';
9
9
  import ProvidersLoggerOld from '../../src/events/ProvidersLoggerOld.js';
10
10
  import {
11
11
  AbsoluteAttitudeFromBrowser,
12
- AbsoluteAttitudeFromRelAtt,
13
12
  AbsoluteAttitude,
14
13
  AbsolutePosition
15
14
  } from '../../src/Providers.js';
@@ -26,7 +25,6 @@ class AbsoluteAttitudeComponent extends React.Component {
26
25
 
27
26
  this.state = {
28
27
  attitude: null,
29
- attitudeFromRelAtt: null,
30
28
  attitudeFromBrowser: null,
31
29
  deviceorientation: null,
32
30
  deviceorientationabsolute: null
@@ -46,11 +44,6 @@ class AbsoluteAttitudeComponent extends React.Component {
46
44
  error => this.setState({ attitudeFromBrowser: error })
47
45
  );
48
46
 
49
- this.providerFromRelAttId = AbsoluteAttitudeFromRelAtt.addEventListener(
50
- events => this.setState({ attitudeFromRelAtt: events[0] }),
51
- error => this.setState({ attitudeFromRelAtt: error })
52
- );
53
-
54
47
  this.providerId = AbsoluteAttitude.addEventListener(
55
48
  events => this.setState({ attitude: events[0] }),
56
49
  error => this.setState({ attitude: error })
@@ -67,7 +60,6 @@ class AbsoluteAttitudeComponent extends React.Component {
67
60
  stop() {
68
61
  this.isStarted = false;
69
62
  AbsoluteAttitudeFromBrowser.removeEventListener(this.providerFromBrowserId);
70
- AbsoluteAttitudeFromRelAtt.removeEventListener(this.providerFromRelAttId);
71
63
  AbsoluteAttitude.removeEventListener(this.providerId);
72
64
  window.removeEventListener('deviceorientation', this.onDeviceOrientationEventListener, true);
73
65
  window.removeEventListener('deviceorientationabsolute', this.onDeviceOrientationAbsoluteEventListener, true);
@@ -158,8 +150,6 @@ class AbsoluteAttitudeComponent extends React.Component {
158
150
  {rawRender}
159
151
  <h3>Absolute attitude:</h3>
160
152
  {Utils.renderAttitudeEvent(this.state.attitude)}
161
- <h3>Absolute attitude From relative + offset:</h3>
162
- {Utils.renderAttitudeEvent(this.state.attitudeFromRelAtt)}
163
153
  <h3>Absolute attitude From browser:</h3>
164
154
  {Utils.renderAttitudeEvent(this.state.attitudeFromBrowser)}
165
155
  </div>
@@ -2,7 +2,7 @@ import React from 'react';
2
2
 
3
3
  import Utils from './Utils.js';
4
4
  import ProvidersLoggerOld from '../../src/events/ProvidersLoggerOld.js';
5
- import { StepDetection } from '../../src/Providers.js';
5
+ import { StepDetector } from '../../src/Providers.js';
6
6
 
7
7
  ProvidersLoggerOld.enabled = true;
8
8
 
@@ -15,14 +15,14 @@ class StepDetectionComponent extends React.Component {
15
15
  }
16
16
 
17
17
  componentDidMount() {
18
- this.providerId = StepDetection.addEventListener(
18
+ this.providerId = StepDetector.addEventListener(
19
19
  events => this.setState({ stepDetected: events[0] }),
20
20
  error => this.setState({ stepDetected: error })
21
21
  );
22
22
  }
23
23
 
24
24
  componentWillUnmount() {
25
- StepDetection.removeEventListener(this.providerId);
25
+ StepDetector.removeEventListener(this.providerId);
26
26
  }
27
27
 
28
28
  render() {
@@ -0,0 +1,47 @@
1
+ import React from 'react';
2
+
3
+ import Utils from './Utils.js';
4
+ import ProvidersLoggerOld from '../../src/events/ProvidersLoggerOld.js';
5
+ import { TurnDetector, HighRotationsDetector } from '../../src/Providers.js';
6
+
7
+ ProvidersLoggerOld.enabled = true;
8
+
9
+ class TurnDetectionComponent extends React.Component {
10
+
11
+ constructor(props) {
12
+ super(props);
13
+
14
+ this.state = { turnDetected: 0, highRotationsDetected: 0 };
15
+ }
16
+
17
+ componentDidMount() {
18
+ this.turnDetectorId = TurnDetector.addEventListener(
19
+ () => this.setState(({ turnDetected }) => ({ turnDetected: turnDetected + 1 })),
20
+ error => this.setState({ turnDetected: error })
21
+ );
22
+
23
+ this.highRotationsDetectorId = HighRotationsDetector.addEventListener(
24
+ () => this.setState(({ highRotationsDetected }) => ({ highRotationsDetected: highRotationsDetected + 1 })),
25
+ error => this.setState({ highRotationsDetected: error })
26
+ );
27
+ }
28
+
29
+ componentWillUnmount() {
30
+ TurnDetector.removeEventListener(this.turnDetectorId);
31
+ HighRotationsDetector.removeEventListener(this.highRotationsDetectorId);
32
+ }
33
+
34
+ render() {
35
+ return (
36
+ <div>
37
+ <h3>Turn detected</h3>
38
+ {Utils.renderTurnEvent(this.state.turnDetected)}
39
+ <h3>High rotation detected</h3>
40
+ {Utils.renderTurnEvent(this.state.highRotationsDetected)}
41
+ </div>
42
+ );
43
+
44
+ }
45
+ }
46
+
47
+ export default TurnDetectionComponent;
@@ -1,5 +1,6 @@
1
1
  import React from 'react'; // eslint-disable-line no-unused-vars
2
2
 
3
+ import { ItineraryInfo } from '@wemap/geo';
3
4
  import { rad2deg } from '@wemap/maths';
4
5
  import { OsrmUtils } from '@wemap/osm';
5
6
 
@@ -121,6 +122,9 @@ class Utils {
121
122
 
122
123
  }
123
124
 
125
+ /**
126
+ * @param {ItineraryInfo} info
127
+ */
124
128
  static renderItineraryInfo(info) {
125
129
 
126
130
  if (!info) {
@@ -189,6 +193,26 @@ class Utils {
189
193
  );
190
194
  }
191
195
 
196
+ /**
197
+ * @param {number|Error} event
198
+ */
199
+ static renderTurnEvent(event) {
200
+ if (event === null) {
201
+ return 'Waiting';
202
+ }
203
+ if (event instanceof Error) {
204
+ return Utils.renderError(event);
205
+ }
206
+ return (
207
+ <div>
208
+ <pre style={{ margin: 0 }}>
209
+ Number: {event}
210
+ </pre>
211
+ {/* {Utils.renderFromStack(event)} */}
212
+ </div>
213
+ );
214
+ }
215
+
192
216
  static renderError(error) {
193
217
  return (<div style={{ maxWidth: '180px' }}><strong>[{error.constructor.name}]</strong><br />{error.message}</div>);
194
218
  }
package/package.json CHANGED
@@ -8,18 +8,16 @@
8
8
  "Guillaume Pannetier <guillaume.pannetier@getwemap.com>"
9
9
  ],
10
10
  "dependencies": {
11
- "@wemap/geo": "^4.0.1",
11
+ "@wemap/geo": "^4.0.4",
12
12
  "@wemap/geomagnetism": "^0.1.1",
13
13
  "@wemap/logger": "^4.0.0",
14
- "@wemap/map": "^4.0.1",
15
- "@wemap/maths": "^4.0.0",
16
- "@wemap/utils": "^4.0.0",
17
- "lodash.isempty": "^4.4.0",
18
- "lodash.noop": "^3.0.1"
14
+ "@wemap/map": "^4.0.4",
15
+ "@wemap/maths": "^4.0.3",
16
+ "@wemap/utils": "^4.0.0"
19
17
  },
20
18
  "description": "A package using different geoloc systems",
21
19
  "devDependencies": {
22
- "@wemap/osm": "^4.0.1",
20
+ "@wemap/osm": "^4.0.4",
23
21
  "mapbox-gl": "^1.11.1"
24
22
  },
25
23
  "homepage": "https://github.com/wemap/wemap-modules-js#readme",
@@ -41,6 +39,6 @@
41
39
  "url": "git+https://github.com/wemap/wemap-modules-js.git"
42
40
  },
43
41
  "type": "module",
44
- "version": "4.0.1",
45
- "gitHead": "ba5cebf23d528021d4bd1a3498d51d98ac655fb9"
42
+ "version": "4.0.4",
43
+ "gitHead": "8cb2140ad039f1e12b9834effb7cef467ade7549"
46
44
  }
package/src/Providers.js CHANGED
@@ -3,6 +3,7 @@
3
3
  export { default as Imu } from './providers/imu/Imu.js';
4
4
  export { default as Accelerometer } from './providers/imu/Accelerometer.js';
5
5
  export { default as Gyroscope } from './providers/imu/Gyroscope.js';
6
+ export { default as HighRotationsDetector } from './providers/imu/HighRotationsDetector.js';
6
7
 
7
8
  export { default as RelativeAttitudeFromBrowser } from './providers/attitude/relative/RelativeAttitudeFromBrowser.js';
8
9
  export { default as RelativeAttitudeFromEkf } from './providers/attitude/relative/RelativeAttitudeFromEkf.js';
@@ -10,22 +11,22 @@ export { default as RelativeAttitudeFromInertial } from './providers/attitude/re
10
11
  export { default as RelativeAttitude } from './providers/attitude/relative/RelativeAttitude.js';
11
12
 
12
13
  export { default as AbsoluteAttitudeFromBrowser } from './providers/attitude/absolute/AbsoluteAttitudeFromBrowser.js';
13
- export { default as AbsoluteAttitudeFromRelAtt } from './providers/attitude/absolute/AbsoluteAttitudeFromRelAtt.js';
14
- export { default as AbsoluteAttitudeFused } from './providers/attitude/absolute/AbsoluteAttitudeFused.js';
15
14
  export { default as AbsoluteAttitude } from './providers/attitude/absolute/AbsoluteAttitude.js';
16
15
 
16
+ export { default as TurnDetector } from './providers/attitude/TurnDectector.js';
17
+
17
18
  export { default as InclinationFromAcc } from './providers/inclination/InclinationFromAcc.js';
18
19
  export { default as InclinationFromRelativeAttitude } from './providers/inclination/InclinationFromRelativeAttitude.js';
19
20
  export { default as Inclination } from './providers/inclination/Inclination.js';
20
21
 
21
- export { default as StepDetection } from './providers/steps/StepDetection.js';
22
+ export { default as StepDetector } from './providers/steps/StepDetector.js';
23
+ export { default as StraightLineDetector } from './providers/steps/StraightLineDetector.js';
22
24
 
23
25
  export { default as ArCore } from './providers/position/relative/ArCore.js';
24
26
  export { default as Pdr } from './providers/position/relative/Pdr.js';
25
27
  export { default as GeoRelativePositionFromArCore } from './providers/position/relative/GeoRelativePositionFromArCore.js';
26
28
  export { default as GeoRelativePosition } from './providers/position/relative/GeoRelativePosition.js';
27
29
 
28
- export { default as AbsolutePositionFromRel } from './providers/position/absolute/AbsolutePositionFromRel.js';
29
30
  export { default as GnssWifi } from './providers/position/absolute/GnssWifi.js';
30
31
  export { default as Ip } from './providers/position/absolute/Ip.js';
31
32
  export { default as AbsolutePosition } from './providers/position/absolute/AbsolutePosition.js';
@@ -4,7 +4,6 @@ import {
4
4
  } from '@wemap/geo';
5
5
 
6
6
  import EventType from './events/EventType.js';
7
- import MetaProvider from './providers/MetaProvider.js';
8
7
  import {
9
8
  AbsoluteAttitude, AbsolutePosition, Barcode, CameraNative, CameraProjectionMatrix, Inclination, RelativeAttitude
10
9
  } from './Providers.js';
@@ -23,7 +22,7 @@ class ProvidersInterface {
23
22
  * @returns {Number}
24
23
  */
25
24
  static addEventListener(eventType, onEvent, onError, watchOnly = false) {
26
- const provider = this._getMetaProviderFromEventType(eventType);
25
+ const provider = this._getProviderFromEventType(eventType);
27
26
  const id = provider.addEventListener(events => onEvent(events[0].data), onError, !watchOnly);
28
27
  this.idListeners.set(id, provider);
29
28
  return id;
@@ -52,22 +51,22 @@ class ProvidersInterface {
52
51
  MapMatchingHandler.network = data;
53
52
  return;
54
53
  }
55
- this._getMetaProviderFromEventType(eventType).feed(data, eventType);
54
+ this._getProviderFromEventType(eventType).feed(data, eventType);
56
55
  }
57
56
 
58
57
  /**
59
58
  * @param {EventType} eventType
60
59
  */
61
60
  static getLastKnown(eventType) {
62
- const { lastEvent } = this._getMetaProviderFromEventType(eventType);
61
+ const { lastEvent } = this._getProviderFromEventType(eventType);
63
62
  return lastEvent ? lastEvent.data : null;
64
63
  }
65
64
 
66
65
  /**
67
66
  * @param {EventType} eventType
68
- * @returns {MetaProvider}
67
+ * @returns {Provider}
69
68
  */
70
- static _getMetaProviderFromEventType(eventType) {
69
+ static _getProviderFromEventType(eventType) {
71
70
 
72
71
  switch (eventType) {
73
72
  case EventType.AbsoluteAttitude:
@@ -8,18 +8,22 @@ export default {
8
8
  AngularRate: 'ANGULAR_RATE',
9
9
  Acceleration: 'ACCELERATION',
10
10
 
11
-
12
11
  RelativeAttitude: 'RELATIVE_ATTITUDE',
13
12
  AbsoluteAttitude: 'ABSOLUTE_ATTITUDE',
14
13
  Attitude: 'ATTITUDE',
15
14
 
16
15
  Inclination: 'INCLINATION',
17
16
  AbsoluteHeading: 'ABSOLUTE_HEADING',
17
+ Turn: 'TURN',
18
+ HighRotation: 'HIGH_ROTATION',
18
19
 
19
20
  RelativePosition: 'RELATIVE_POSITION',
20
21
  GeoRelativePosition: 'GEO_RELATIVE_POSITION',
21
22
  AbsolutePosition: 'ABSOLUTE_POSITION',
22
23
 
24
+ Step: 'STEP',
25
+ StraightLine: 'STRAIGHT_LINE',
26
+
23
27
  Pressure: 'PRESSURE',
24
28
  BluetoothSignals: 'BLUETOOTH_SIGNALS',
25
29
  WifiSignals: 'WIFI_SIGNALS',
@@ -3,11 +3,15 @@ import EventType from './EventType.js';
3
3
  /**
4
4
  * A provider event is an event which can be triggered by device sensors
5
5
  * or can be computed from raw providers.
6
+ *
7
+ * @template T
6
8
  */
7
9
  class ProviderEvent {
8
10
 
9
11
  dataType = EventType.Unknown;
10
12
  providersStack = [];
13
+
14
+ /** @type {T} */
11
15
  data = null;
12
16
 
13
17
  /**
@@ -20,6 +24,9 @@ class ProviderEvent {
20
24
  this.data = data;
21
25
  }
22
26
 
27
+ /**
28
+ * @return {ProviderEvent<T>}
29
+ */
23
30
  clone() {
24
31
  const evt = new ProviderEvent(this.dataType, this.data);
25
32
  evt.providersStack = this.providersStack.slice(0);