@wemap/positioning 2.3.1 → 2.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fix_imu.patch +30 -0
- package/package.json +1 -1
- package/src/PositioningHandler.js +49 -18
- package/src/PositioningHandler.spec.js +18 -15
- package/src/{providers/ProviderOptions.js → PositioningOptions.js} +3 -3
- package/src/components/PositioningPoseComponent.jsx +4 -0
- package/src/errors/NoProviderFoundError.js +9 -0
- package/src/index.js +2 -1
- package/src/providers/ProvidersList.js +44 -0
- package/src/providers/others/ImuProvider.js +3 -2
package/fix_imu.patch
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
diff --git a/src/providers/others/ImuProvider.js b/src/providers/others/ImuProvider.js
|
|
2
|
+
index c1e294f..c22095e 100644
|
|
3
|
+
--- a/src/providers/others/ImuProvider.js
|
|
4
|
+
+++ b/src/providers/others/ImuProvider.js
|
|
5
|
+
@@ -3,6 +3,7 @@ import {
|
|
6
|
+
Browser, BrowserUtils
|
|
7
|
+
} from '@wemap/utils';
|
|
8
|
+
|
|
9
|
+
+import isnumber from 'lodash.isnumber';
|
|
10
|
+
import Provider from '../Provider';
|
|
11
|
+
import EventType from '../../events/EventType';
|
|
12
|
+
import MissingAccelerometerError from '../../errors/MissingAccelerometerError';
|
|
13
|
+
@@ -129,7 +130,7 @@ class ImuProvider extends Provider {
|
|
14
|
+
x, y, z
|
|
15
|
+
} = e.accelerationIncludingGravity;
|
|
16
|
+
|
|
17
|
+
- if (x && y && z) {
|
|
18
|
+
+ if (isnumber(x) && isnumber(y) && isnumber(z)) {
|
|
19
|
+
acc = [x, y, z];
|
|
20
|
+
|
|
21
|
+
if (BrowserUtils.name === Browser.SAFARI) {
|
|
22
|
+
@@ -161,7 +162,7 @@ class ImuProvider extends Provider {
|
|
23
|
+
alpha, beta, gamma
|
|
24
|
+
} = e.rotationRate;
|
|
25
|
+
|
|
26
|
+
- if (alpha && beta && gamma) {
|
|
27
|
+
+ if (isnumber(alpha) && isnumber(beta) && isnumber(gamma)) {
|
|
28
|
+
gyr = [deg2rad(alpha), deg2rad(beta), deg2rad(gamma)];
|
|
29
|
+
}
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
/* eslint-disable max-statements */
|
|
1
2
|
import EventType from './events/EventType';
|
|
2
3
|
import PdrProvider from './providers/pose/pdr/PdrProvider';
|
|
3
4
|
import GnssWifiPdrProvider from './providers/pose/GnssWifiPdrProvider';
|
|
4
5
|
import PoseProvider from './providers/pose/PoseProvider';
|
|
5
|
-
import
|
|
6
|
+
import PositioningOptions from './PositioningOptions';
|
|
6
7
|
import InclinationProvider from './providers/others/InclinationProvider';
|
|
7
8
|
import Logger from '@wemap/logger';
|
|
8
9
|
import ArCoreAbsoluteProvider from './providers/pose/ArCoreAbsoluteProvider';
|
|
9
10
|
import ArCoreProvider from './providers/pose/ArCoreProvider';
|
|
10
11
|
import GnssWifiProvider from './providers/position/GnssWifiProvider';
|
|
12
|
+
import NoProviderFoundError from './errors/NoProviderFoundError';
|
|
13
|
+
import ProviderError from './events/ProviderError';
|
|
11
14
|
|
|
12
15
|
/**
|
|
13
16
|
* @private
|
|
@@ -29,24 +32,24 @@ class PositioningHandler {
|
|
|
29
32
|
* @param {EventType[]} eventsType array of events to subscribe
|
|
30
33
|
* @param {Function} onEvent Callback on events, first and only parameter is a: {@link ProviderEvent[]}.
|
|
31
34
|
* @param {Function} onError Callback on errors, first and only parameter is a: {@link ProviderError[]}.
|
|
32
|
-
* @param {
|
|
35
|
+
* @param {PositioningOptions} options
|
|
33
36
|
* @returns {Number} an id to stop or interact with
|
|
34
37
|
*/
|
|
35
38
|
start(eventsType, onEvent, onError, options) {
|
|
36
39
|
|
|
37
|
-
this.options = Object.assign({},
|
|
40
|
+
this.options = Object.assign({}, PositioningOptions, options);
|
|
38
41
|
|
|
39
42
|
const providerClass = PositioningHandler.findProvider(eventsType, this.options);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
if (Array.isArray(providerClass)) {
|
|
44
|
+
onError(providerClass);
|
|
45
|
+
return null;
|
|
43
46
|
}
|
|
44
|
-
|
|
45
47
|
const provider = Reflect.construct(providerClass, [onEvent, onError, this.options]);
|
|
46
48
|
this.providerInstances[provider.id] = provider;
|
|
47
49
|
provider.start();
|
|
48
50
|
|
|
49
51
|
return provider.id;
|
|
52
|
+
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
/**
|
|
@@ -54,17 +57,29 @@ class PositioningHandler {
|
|
|
54
57
|
*/
|
|
55
58
|
static findProvider(eventsType, _options) {
|
|
56
59
|
|
|
57
|
-
const options = Object.assign({},
|
|
60
|
+
const options = Object.assign({}, PositioningOptions, _options);
|
|
61
|
+
|
|
62
|
+
let errors = [];
|
|
58
63
|
const canUse = (provider, others = []) => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
if (options.ignoreProviders.includes(provider.name)
|
|
65
|
+
|| others.some(elem => options.ignoreProviders.includes(elem.name))) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
errors = provider.checkAvailabilityErrors();
|
|
69
|
+
return errors.length === 0;
|
|
62
70
|
};
|
|
63
71
|
|
|
64
|
-
|
|
65
|
-
&& eventsType.includes(EventType.Inclination)
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
const wantInclination = eventsType.length === 1
|
|
73
|
+
&& eventsType.includes(EventType.Inclination);
|
|
74
|
+
|
|
75
|
+
if (wantInclination) {
|
|
76
|
+
if (canUse(InclinationProvider)) {
|
|
77
|
+
return InclinationProvider;
|
|
78
|
+
}
|
|
79
|
+
if (errors.length !== 0) {
|
|
80
|
+
return errors;
|
|
81
|
+
}
|
|
82
|
+
return [new ProviderError(null, EventType.Inclination, new NoProviderFoundError())];
|
|
68
83
|
}
|
|
69
84
|
|
|
70
85
|
const wantPoseProvider = [EventType.AbsolutePosition, EventType.AbsoluteAttitude]
|
|
@@ -79,14 +94,17 @@ class PositioningHandler {
|
|
|
79
94
|
if (canUse(PdrProvider)) {
|
|
80
95
|
return PdrProvider;
|
|
81
96
|
}
|
|
82
|
-
|
|
97
|
+
|
|
98
|
+
return [
|
|
99
|
+
new ProviderError(null, EventType.AbsoluteAttitude, new NoProviderFoundError()),
|
|
100
|
+
new ProviderError(null, EventType.AbsolutePosition, new NoProviderFoundError())
|
|
101
|
+
];
|
|
83
102
|
}
|
|
84
103
|
|
|
85
104
|
if (canUse(GnssWifiPdrProvider, [PdrProvider])) {
|
|
86
105
|
return GnssWifiPdrProvider;
|
|
87
106
|
}
|
|
88
107
|
|
|
89
|
-
|
|
90
108
|
if (canUse(PoseProvider)) {
|
|
91
109
|
return PoseProvider;
|
|
92
110
|
}
|
|
@@ -95,9 +113,22 @@ class PositioningHandler {
|
|
|
95
113
|
&& canUse(GnssWifiProvider)) {
|
|
96
114
|
return GnssWifiProvider;
|
|
97
115
|
}
|
|
116
|
+
|
|
117
|
+
if (errors.length !== 0) {
|
|
118
|
+
return errors;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (options.optionalEvents.includes(EventType.AbsoluteAttitude)) {
|
|
122
|
+
return [new ProviderError(null, EventType.AbsolutePosition, new NoProviderFoundError())];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return [
|
|
126
|
+
new ProviderError(null, EventType.AbsoluteAttitude, new NoProviderFoundError()),
|
|
127
|
+
new ProviderError(null, EventType.AbsolutePosition, new NoProviderFoundError())
|
|
128
|
+
];
|
|
98
129
|
}
|
|
99
130
|
|
|
100
|
-
return
|
|
131
|
+
return [];
|
|
101
132
|
}
|
|
102
133
|
|
|
103
134
|
/**
|
|
@@ -10,6 +10,8 @@ import PdrProvider from './providers/pose/pdr/PdrProvider';
|
|
|
10
10
|
import ArCoreAbsoluteProvider from './providers/pose/ArCoreAbsoluteProvider';
|
|
11
11
|
import GnssWifiProvider from './providers/position/GnssWifiProvider';
|
|
12
12
|
import ArCoreProvider from './providers/pose/ArCoreProvider';
|
|
13
|
+
import ProviderError from './events/ProviderError';
|
|
14
|
+
import { ProvidersName } from './providers/ProvidersList';
|
|
13
15
|
|
|
14
16
|
const expect = chai.expect;
|
|
15
17
|
|
|
@@ -53,7 +55,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
53
55
|
it('Inclination Desktop', () => {
|
|
54
56
|
config(CHROME_DESKTOP_USER_AGENT);
|
|
55
57
|
const provider = PositioningHandler.findProvider([EventType.Inclination]);
|
|
56
|
-
expect(provider).to.be.
|
|
58
|
+
expect(provider[0]).to.be.instanceOf(ProviderError);
|
|
57
59
|
});
|
|
58
60
|
|
|
59
61
|
it('Inclination Mobile', () => {
|
|
@@ -65,7 +67,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
65
67
|
it('Pose Desktop', () => {
|
|
66
68
|
config(CHROME_DESKTOP_USER_AGENT);
|
|
67
69
|
const provider = PositioningHandler.findProvider([EventType.AbsolutePosition, EventType.AbsoluteAttitude]);
|
|
68
|
-
expect(provider).to.be.
|
|
70
|
+
expect(provider[0]).to.be.instanceOf(ProviderError);
|
|
69
71
|
});
|
|
70
72
|
|
|
71
73
|
it('Pose without PDR Desktop', () => {
|
|
@@ -74,7 +76,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
74
76
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
75
77
|
{ ignoreProviders: [PdrProvider] }
|
|
76
78
|
);
|
|
77
|
-
expect(provider).to.be.
|
|
79
|
+
expect(provider[0]).to.be.instanceOf(ProviderError);
|
|
78
80
|
});
|
|
79
81
|
|
|
80
82
|
it('Pose without ArCore Desktop', () => {
|
|
@@ -83,13 +85,13 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
83
85
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
84
86
|
{ ignoreProviders: [ArCoreProvider] }
|
|
85
87
|
);
|
|
86
|
-
expect(provider).to.be.
|
|
88
|
+
expect(provider[0]).to.be.instanceOf(ProviderError);
|
|
87
89
|
});
|
|
88
90
|
|
|
89
91
|
it('Pose with optional attitude Desktop', () => {
|
|
90
92
|
config(CHROME_DESKTOP_USER_AGENT);
|
|
91
93
|
const provider = PositioningHandler.findProvider([EventType.AbsolutePosition, EventType.AbsoluteAttitude]);
|
|
92
|
-
expect(provider).to.be.
|
|
94
|
+
expect(provider[0]).to.be.instanceOf(ProviderError);
|
|
93
95
|
});
|
|
94
96
|
|
|
95
97
|
it('Pose with optional attitude without PDR Desktop', () => {
|
|
@@ -97,7 +99,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
97
99
|
const provider = PositioningHandler.findProvider(
|
|
98
100
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
99
101
|
{
|
|
100
|
-
ignoreProviders: [
|
|
102
|
+
ignoreProviders: [ProvidersName.Pdr],
|
|
101
103
|
optionalEvents: [EventType.AbsoluteAttitude]
|
|
102
104
|
}
|
|
103
105
|
);
|
|
@@ -109,7 +111,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
109
111
|
const provider = PositioningHandler.findProvider(
|
|
110
112
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
111
113
|
{
|
|
112
|
-
ignoreProviders: [
|
|
114
|
+
ignoreProviders: [ProvidersName.ArCore],
|
|
113
115
|
optionalEvents: [EventType.AbsoluteAttitude]
|
|
114
116
|
}
|
|
115
117
|
);
|
|
@@ -121,7 +123,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
121
123
|
const provider = PositioningHandler.findProvider(
|
|
122
124
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
123
125
|
{
|
|
124
|
-
ignoreProviders: [
|
|
126
|
+
ignoreProviders: [ProvidersName.Pdr, ProvidersName.ArCore],
|
|
125
127
|
optionalEvents: [EventType.AbsoluteAttitude]
|
|
126
128
|
}
|
|
127
129
|
);
|
|
@@ -138,7 +140,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
138
140
|
config(CHROME_ANDROID_USER_AGENT);
|
|
139
141
|
const provider = PositioningHandler.findProvider(
|
|
140
142
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
141
|
-
{ ignoreProviders: [
|
|
143
|
+
{ ignoreProviders: [ProvidersName.Pdr] }
|
|
142
144
|
);
|
|
143
145
|
expect(provider).to.be.equals(PoseProvider);
|
|
144
146
|
});
|
|
@@ -147,7 +149,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
147
149
|
config(CHROME_ANDROID_USER_AGENT);
|
|
148
150
|
const provider = PositioningHandler.findProvider(
|
|
149
151
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
150
|
-
{ ignoreProviders: [
|
|
152
|
+
{ ignoreProviders: [ProvidersName.ArCore] }
|
|
151
153
|
);
|
|
152
154
|
expect(provider).to.be.equals(GnssWifiPdrProvider);
|
|
153
155
|
});
|
|
@@ -156,7 +158,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
156
158
|
config(CHROME_ANDROID_USER_AGENT);
|
|
157
159
|
const provider = PositioningHandler.findProvider(
|
|
158
160
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
159
|
-
{ ignoreProviders: [
|
|
161
|
+
{ ignoreProviders: [ProvidersName.Pdr, ProvidersName.ArCore] }
|
|
160
162
|
);
|
|
161
163
|
expect(provider).to.be.equals(PoseProvider);
|
|
162
164
|
});
|
|
@@ -185,7 +187,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
185
187
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
186
188
|
{
|
|
187
189
|
waitInputPosition: true,
|
|
188
|
-
ignoreProviders: [
|
|
190
|
+
ignoreProviders: [ProvidersName.ArCore]
|
|
189
191
|
}
|
|
190
192
|
);
|
|
191
193
|
expect(provider).to.be.equals(PdrProvider);
|
|
@@ -197,10 +199,11 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
197
199
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
198
200
|
{
|
|
199
201
|
waitInputPosition: true,
|
|
200
|
-
ignoreProviders: [
|
|
202
|
+
ignoreProviders: [ProvidersName.Pdr]
|
|
201
203
|
}
|
|
202
204
|
);
|
|
203
|
-
expect(provider).to.be.
|
|
205
|
+
expect(provider[0]).to.be.instanceOf(ProviderError);
|
|
206
|
+
expect(provider[1]).to.be.instanceOf(ProviderError);
|
|
204
207
|
});
|
|
205
208
|
|
|
206
209
|
it('Pose with waitInputPosition without ArCore Mobile Native', () => {
|
|
@@ -209,7 +212,7 @@ describe('PositioningHandler#findProvider', () => {
|
|
|
209
212
|
[EventType.AbsolutePosition, EventType.AbsoluteAttitude],
|
|
210
213
|
{
|
|
211
214
|
waitInputPosition: true,
|
|
212
|
-
ignoreProviders: [
|
|
215
|
+
ignoreProviders: [ProvidersName.ArCore]
|
|
213
216
|
}
|
|
214
217
|
);
|
|
215
218
|
expect(provider).to.be.equals(PdrProvider);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const PositioningOptions = {
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Does provider have to wait an input position to start
|
|
@@ -20,7 +20,7 @@ const ProviderOptions = {
|
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Providers listed here will not be used by PositioningHandler
|
|
23
|
-
* List of {@link Provider}
|
|
23
|
+
* List of {@link Provider#name}
|
|
24
24
|
*/
|
|
25
25
|
ignoreProviders: [],
|
|
26
26
|
|
|
@@ -31,4 +31,4 @@ const ProviderOptions = {
|
|
|
31
31
|
optionalEvents: []
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
export default
|
|
34
|
+
export default PositioningOptions;
|
|
@@ -46,6 +46,10 @@ class PositioningPoseComponent extends React.Component {
|
|
|
46
46
|
}
|
|
47
47
|
);
|
|
48
48
|
|
|
49
|
+
if (!this.id) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
49
53
|
setTimeout(() => {
|
|
50
54
|
this.props.positioningHandler.setPosition(this.id, INITIAL_POSITION);
|
|
51
55
|
this.props.positioningHandler.setHeading(this.id, INITIAL_HEADING);
|
package/src/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import InclinationProvider from './providers/computed/InclinationProvider';
|
|
2
2
|
import PositioningHandler from './PositioningHandler';
|
|
3
3
|
import EventType from './events/EventType';
|
|
4
|
+
import { ProvidersName } from './providers/ProvidersList';
|
|
4
5
|
|
|
5
6
|
export {
|
|
6
|
-
InclinationProvider, PositioningHandler, EventType
|
|
7
|
+
InclinationProvider, PositioningHandler, EventType, ProvidersName
|
|
7
8
|
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import GnssWifi from './position/GnssWifiProvider';
|
|
2
|
+
import Ip from './position/IpProvider';
|
|
3
|
+
import Pdr from './pose/pdr/PdrProvider';
|
|
4
|
+
import ArCore from './pose/ArCoreProvider';
|
|
5
|
+
import ArCoreAbsolute from './pose/ArCoreAbsoluteProvider';
|
|
6
|
+
import Inclination from './others/InclinationProvider';
|
|
7
|
+
import GnssWifiPdr from './pose/GnssWifiPdrProvider';
|
|
8
|
+
import Imu from './others/ImuProvider';
|
|
9
|
+
import AbsoluteAttitude from './attitude/AbsoluteAttitudeProvider';
|
|
10
|
+
import RelativeAttitude from './attitude/RelativeAttitudeProvider';
|
|
11
|
+
|
|
12
|
+
const ProvidersName = {
|
|
13
|
+
AbsoluteAttitude: AbsoluteAttitude.name,
|
|
14
|
+
ArCore: ArCore.name,
|
|
15
|
+
ArCoreAbsolute: ArCoreAbsolute.name,
|
|
16
|
+
GnssWifi: GnssWifi.name,
|
|
17
|
+
GnssWifiPdr: GnssWifiPdr.name,
|
|
18
|
+
Imu: Imu.name,
|
|
19
|
+
Inclination: Inclination.name,
|
|
20
|
+
Ip: Ip.name,
|
|
21
|
+
Pdr: Pdr.name,
|
|
22
|
+
RelativeAttitude: RelativeAttitude.name
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const ProvidersModules = {
|
|
26
|
+
AbsoluteAttitude,
|
|
27
|
+
ArCore,
|
|
28
|
+
ArCoreAbsolute,
|
|
29
|
+
GnssWifi,
|
|
30
|
+
GnssWifiPdr,
|
|
31
|
+
Imu,
|
|
32
|
+
Inclination,
|
|
33
|
+
Ip,
|
|
34
|
+
Pdr,
|
|
35
|
+
RelativeAttitude
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
function getModuleFromName(name) {
|
|
39
|
+
return ProvidersModules[name];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export {
|
|
43
|
+
ProvidersName, getModuleFromName
|
|
44
|
+
};
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
Browser, BrowserUtils
|
|
4
4
|
} from '@wemap/utils';
|
|
5
5
|
|
|
6
|
+
import isnumber from 'lodash.isnumber';
|
|
6
7
|
import Provider from '../Provider';
|
|
7
8
|
import EventType from '../../events/EventType';
|
|
8
9
|
import MissingAccelerometerError from '../../errors/MissingAccelerometerError';
|
|
@@ -129,7 +130,7 @@ class ImuProvider extends Provider {
|
|
|
129
130
|
x, y, z
|
|
130
131
|
} = e.accelerationIncludingGravity;
|
|
131
132
|
|
|
132
|
-
if (x && y && z) {
|
|
133
|
+
if (isnumber(x) && isnumber(y) && isnumber(z)) {
|
|
133
134
|
acc = [x, y, z];
|
|
134
135
|
|
|
135
136
|
if (BrowserUtils.name === Browser.SAFARI) {
|
|
@@ -161,7 +162,7 @@ class ImuProvider extends Provider {
|
|
|
161
162
|
alpha, beta, gamma
|
|
162
163
|
} = e.rotationRate;
|
|
163
164
|
|
|
164
|
-
if (alpha && beta && gamma) {
|
|
165
|
+
if (isnumber(alpha) && isnumber(beta) && isnumber(gamma)) {
|
|
165
166
|
gyr = [deg2rad(alpha), deg2rad(beta), deg2rad(gamma)];
|
|
166
167
|
}
|
|
167
168
|
}
|