@wemap/positioning 2.0.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +4 -2
- package/debug/absolute-attitude.html +16 -0
- package/debug/arcore.html +16 -0
- package/debug/gnss-wifi-pdr.html +16 -0
- package/debug/gnss-wifi.html +16 -0
- package/debug/imu.html +16 -0
- package/debug/inclination.html +16 -0
- package/debug/pdr.html +16 -0
- package/debug/pose.html +16 -0
- package/debug/positioning.html +16 -0
- package/debug/relative-attitude.html +16 -0
- package/package.json +7 -4
- package/src/PositioningHandler.js +96 -34
- package/src/components/AbsoluteAttitudeComponent.jsx +104 -0
- package/src/components/ArCoreComponent.jsx +74 -0
- package/src/components/GnssWifiComponent.jsx +58 -0
- package/src/components/GnssWifiPdrComponent.jsx +94 -0
- package/src/components/ImuComponent.jsx +100 -0
- package/src/components/InclinationComponent.jsx +53 -0
- package/src/components/MapComponent.jsx +226 -0
- package/src/components/PdrComponent.jsx +97 -0
- package/src/components/PoseComponent.jsx +81 -0
- package/src/components/PositioningComponent.jsx +26 -0
- package/src/components/PositioningInclinationComponent.jsx +76 -0
- package/src/components/PositioningPoseComponent.jsx +120 -0
- package/src/components/RelativeAttitudeComponent.jsx +82 -0
- package/src/components/StartStopComponent.jsx +50 -0
- package/src/components/Utils.js +92 -0
- package/src/components/index.js +32 -0
- package/src/errors/AskImuOnDesktopError.js +9 -0
- package/src/errors/GeolocationApiMissingError.js +9 -0
- package/src/errors/GeolocationPermissionDeniedError.js +9 -0
- package/src/errors/GeolocationPositionUnavailableError.js +9 -0
- package/src/errors/IpResolveServerError.js +9 -0
- package/src/errors/MissingAccelerometerError.js +11 -0
- package/src/errors/MissingArCoreError.js +9 -0
- package/src/errors/MissingGyroscopeError.js +11 -0
- package/src/errors/MissingMagnetometerError.js +9 -0
- package/src/errors/MissingNativeInterfaceError.js +9 -0
- package/src/errors/MissingSensorError.js +14 -0
- package/src/events/EventType.js +20 -0
- package/src/events/ProviderError.js +52 -0
- package/src/events/ProviderEvent.js +35 -0
- package/src/index.js +2 -2
- package/src/providers/Constants.js +5 -0
- package/src/providers/FakeAbsolutePositionProvider.js +56 -0
- package/src/providers/Provider.js +230 -0
- package/src/providers/ProviderOptions.js +28 -0
- package/{src.old → src}/providers/ProvidersLogger.js +2 -2
- package/src/providers/attitude/AbsoluteAttitudeProvider.js +207 -0
- package/src/providers/attitude/RelativeAttitudeProvider.js +129 -0
- package/src/providers/others/ImuProvider.js +186 -0
- package/src/providers/others/InclinationProvider.js +107 -0
- package/{src.old/providers/LocationSource.js → src/providers/others/MapMatchingProvider.js} +5 -148
- package/src/providers/pose/ArCoreProvider.js +127 -0
- package/src/providers/pose/GnssWifiPdrProvider.js +233 -0
- package/src/providers/pose/PoseProvider.js +90 -0
- package/{src.old/providers/PdrLocationSource.js → src/providers/pose/pdr/PdrProvider.js} +145 -113
- package/{src.old/providers/pdr → src/providers/pose/pdr/helpers}/Smoother.js +1 -1
- package/src/providers/position/GnssWifiProvider.js +129 -0
- package/src/providers/position/IpProvider.js +75 -0
- package/webpack/webpack.common.js +1 -1
- package/webpack/webpack.dev.js +1 -1
- package/debug/index.html +0 -15
- package/debug/index.old.html +0 -37
- package/scripts/release-github.js +0 -216
- package/src/providers/FakeLocationSource.js +0 -36
- package/src.old/Constants.js +0 -11
- package/src.old/NavigationHandler.js +0 -244
- package/src.old/Pose.js +0 -8
- package/src.old/attitude/AttitudeHandler.js +0 -342
- package/src.old/components/AbsoluteAttitude.jsx +0 -136
- package/src.old/components/Imu.jsx +0 -89
- package/src.old/components/LocationSource.jsx +0 -434
- package/src.old/components/Logger.jsx +0 -113
- package/src.old/components/NavigationDebugApp.jsx +0 -106
- package/src.old/components/Others.jsx +0 -121
- package/src.old/components/RelativeAttitude.jsx +0 -104
- package/src.old/components/Utils.js +0 -35
- package/src.old/components/index.js +0 -13
- package/src.old/index.js +0 -7
- package/src.old/providers/FixedLocationImuLocationSource.js +0 -66
- package/src.old/providers/GnssLocationSource.js +0 -118
- package/src.old/providers/GnssPdrLocationSource.js +0 -182
- package/src.old/providers/IPLocationSource.js +0 -96
- package/src.old/sensors/SensorsCompatibility.js +0 -486
- package/src.old/sensors/SensorsCompatibility.spec.js +0 -270
- package/src.old/sensors/SensorsLogger.js +0 -94
- package/src.old/sensors/SensorsLoggerUtils.js +0 -35
- /package/{src.old → src/providers}/attitude/EkfAttitude.js +0 -0
- /package/{src.old → src/providers}/attitude/EkfAttitude.spec.js +0 -0
- /package/{src.old/providers/pdr → src/providers/pose/pdr/helpers}/HeadingUnlocker.js +0 -0
- /package/{src.old/providers/pdr → src/providers/pose/pdr/helpers}/HeadingUnlocker.spec.js +0 -0
- /package/{src.old/providers/pdr → src/providers/pose/pdr/helpers}/Smoother.spec.js +0 -0
- /package/{src.old/providers/pdr → src/providers/pose/pdr/helpers}/ThugDetector.js +0 -0
- /package/{src.old/providers → src/providers/pose/pdr}/steps/StepDetection.js +0 -0
- /package/{src.old/providers → src/providers/pose/pdr}/steps/StepDetectionLadetto.js +0 -0
- /package/{src.old/providers → src/providers/pose/pdr}/steps/StepDetectionMinMaxPeaks.js +0 -0
- /package/{src.old/providers → src/providers/pose/pdr}/steps/StepDetectionMinMaxPeaks2.js +0 -0
package/.eslintrc.json
CHANGED
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"sourceType": "module"
|
|
18
18
|
},
|
|
19
19
|
"plugins": [
|
|
20
|
-
"react"
|
|
20
|
+
"react",
|
|
21
|
+
"jsdoc"
|
|
21
22
|
],
|
|
22
23
|
"rules": {
|
|
23
24
|
"accessor-pairs": [
|
|
@@ -457,7 +458,8 @@
|
|
|
457
458
|
2,
|
|
458
459
|
"never",
|
|
459
460
|
{}
|
|
460
|
-
]
|
|
461
|
+
],
|
|
462
|
+
"jsdoc/no-undefined-types": 1
|
|
461
463
|
},
|
|
462
464
|
"settings": {
|
|
463
465
|
"react": {
|
|
@@ -0,0 +1,16 @@
|
|
|
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 Absolute Attitude</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(AbsoluteAttitudeComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
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 ARCore</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(ArCoreComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
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 GnssWifiPdr</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(GnssWifiPdrComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
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 Positioning</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(GnssWifiComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
package/debug/imu.html
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
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 Imu</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(ImuComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
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 Inclination</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(InclinationComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
package/debug/pdr.html
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
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 PDR</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(PdrComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
package/debug/pose.html
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
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 Pose</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(PoseComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
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 Positioning</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(PositioningComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
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 Relative Attitude</title>
|
|
8
|
+
<script src="/js/positioning-components.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
<div id="app"></div>
|
|
13
|
+
<script>createReactElement(RelativeAttitudeComponent, document.getElementById('app'));</script>
|
|
14
|
+
</body>
|
|
15
|
+
|
|
16
|
+
</html>
|
package/package.json
CHANGED
|
@@ -8,12 +8,14 @@
|
|
|
8
8
|
"Guillaume Pannetier <guillaume.pannetier@getwemap.com>"
|
|
9
9
|
],
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@wemap/geo": "^0.1.
|
|
11
|
+
"@wemap/geo": "^0.1.4",
|
|
12
12
|
"@wemap/logger": "^0.1.4",
|
|
13
13
|
"@wemap/maths": "^0.1.2",
|
|
14
|
+
"@wemap/utils": "^0.1.2",
|
|
14
15
|
"file-saver": "^2.0.2",
|
|
15
16
|
"geomagnetism": "^0.1.0",
|
|
16
17
|
"jszip": "^3.2.2",
|
|
18
|
+
"lodash.isempty": "^4.4.0",
|
|
17
19
|
"lodash.isnumber": "^3.0.3",
|
|
18
20
|
"lodash.noop": "^3.0.1"
|
|
19
21
|
},
|
|
@@ -34,6 +36,7 @@
|
|
|
34
36
|
"dotenv": "^8.1.0",
|
|
35
37
|
"eslint": "^6.2.2",
|
|
36
38
|
"eslint-plugin-babel": "^5.3.0",
|
|
39
|
+
"eslint-plugin-jsdoc": "^15.9.1",
|
|
37
40
|
"eslint-plugin-react": "^7.14.3",
|
|
38
41
|
"esm": "^3.2.25",
|
|
39
42
|
"jsdom": "^15.1.1",
|
|
@@ -48,6 +51,7 @@
|
|
|
48
51
|
"request": "^2.88.0",
|
|
49
52
|
"request-promise": "^4.2.4",
|
|
50
53
|
"simple-git": "^1.124.0",
|
|
54
|
+
"style-loader": "^1.0.0",
|
|
51
55
|
"url-parse": "^1.4.7",
|
|
52
56
|
"webpack": "^4.39.3",
|
|
53
57
|
"webpack-cli": "^3.3.7",
|
|
@@ -75,8 +79,7 @@
|
|
|
75
79
|
"stats": "webpack --config webpack/webpack.prod.js --profile --json > stats.json",
|
|
76
80
|
"start": "webpack-dev-server --config webpack/webpack.dev.js --progress --inline --hot --https",
|
|
77
81
|
"lint": "eslint --ext .js,.jsx --quiet src",
|
|
78
|
-
"test": "mocha -r esm \"src/**/*.spec.js\""
|
|
79
|
-
"release": "node ./scripts/release-github.js"
|
|
82
|
+
"test": "mocha -r esm \"src/**/*.spec.js\""
|
|
80
83
|
},
|
|
81
|
-
"version": "2.
|
|
84
|
+
"version": "2.2.0"
|
|
82
85
|
}
|
|
@@ -1,60 +1,122 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import
|
|
1
|
+
import EventType from './events/EventType';
|
|
2
|
+
import PdrProvider from './providers/pose/pdr/PdrProvider';
|
|
3
|
+
import GnssWifiPdrProvider from './providers/pose/GnssWifiPdrProvider';
|
|
4
|
+
import PoseProvider from './providers/pose/PoseProvider';
|
|
5
|
+
import ProviderOptions from './providers/ProviderOptions';
|
|
6
|
+
import InclinationProvider from './providers/others/InclinationProvider';
|
|
7
|
+
import Logger from '@wemap/logger';
|
|
4
8
|
|
|
5
9
|
/**
|
|
6
10
|
* @private
|
|
7
11
|
*/
|
|
8
12
|
class PositioningHandler {
|
|
9
13
|
|
|
10
|
-
|
|
11
|
-
STARTING: 0,
|
|
12
|
-
STARTED: 1,
|
|
13
|
-
STOPPPED: 2
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
_state = PositioningHandler.State.STOPPPED;
|
|
14
|
+
providerInstances = [];
|
|
17
15
|
|
|
18
16
|
/**
|
|
19
17
|
* Constructor of PositioningHandler
|
|
20
|
-
* @param {Function} _callback callback on new pose
|
|
21
18
|
* @public
|
|
22
19
|
*/
|
|
23
|
-
constructor(
|
|
24
|
-
|
|
25
|
-
this.locationSource = new FakeLocationSource(pose => callback(pose));
|
|
20
|
+
constructor() {
|
|
21
|
+
|
|
26
22
|
}
|
|
27
23
|
|
|
28
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Start to listen events
|
|
26
|
+
* @param {EventType[]} eventsType array of events to subscribe
|
|
27
|
+
* @param {Function} onEvent Callback on events, first and only parameter is a: {@link ProviderEvent[]}.
|
|
28
|
+
* @param {Function} onError Callback on errors, first and only parameter is a: {@link ProviderError[]}.
|
|
29
|
+
* @param {ProviderOptions} options
|
|
30
|
+
* @returns {Number} an id to stop or interact with
|
|
31
|
+
*/
|
|
32
|
+
start(eventsType, onEvent, onError, options) {
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
this.options = Object.assign(ProviderOptions, options);
|
|
35
|
+
|
|
36
|
+
const providerClass = this.findProvider(eventsType, this.options);
|
|
37
|
+
|
|
38
|
+
if (!providerClass) {
|
|
39
|
+
throw new Error('No provider found');
|
|
35
40
|
}
|
|
36
41
|
|
|
37
|
-
|
|
42
|
+
const provider = Reflect.construct(providerClass, [onEvent, onError, this.options]);
|
|
43
|
+
this.providerInstances[provider.id] = provider;
|
|
44
|
+
provider.start();
|
|
45
|
+
|
|
46
|
+
return provider.id;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
findProvider(eventsType, options) {
|
|
38
53
|
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
.then(() => (this._state = PositioningHandler.State.STARTED))
|
|
42
|
-
.catch(() => (this._state = PositioningHandler.State.STOPPPED));
|
|
54
|
+
const wantPoseProvider = [EventType.AbsolutePosition, EventType.AbsoluteAttitude]
|
|
55
|
+
.every(elem => eventsType.includes(elem));
|
|
43
56
|
|
|
44
|
-
|
|
57
|
+
if (wantPoseProvider) {
|
|
58
|
+
if (options.ignoreProviders.includes(PdrProvider)) {
|
|
59
|
+
return PoseProvider;
|
|
60
|
+
}
|
|
61
|
+
if (options.waitInputPosition) {
|
|
62
|
+
return PdrProvider;
|
|
63
|
+
}
|
|
64
|
+
return GnssWifiPdrProvider;
|
|
65
|
+
}
|
|
66
|
+
if (eventsType.includes(EventType.Inclination)) {
|
|
67
|
+
return InclinationProvider;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
45
70
|
}
|
|
46
71
|
|
|
47
|
-
|
|
72
|
+
/**
|
|
73
|
+
* @public
|
|
74
|
+
*/
|
|
75
|
+
stop(providerId) {
|
|
76
|
+
this.providerInstances[providerId].stop();
|
|
77
|
+
delete this.providerInstances[providerId];
|
|
78
|
+
}
|
|
48
79
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
80
|
+
/**
|
|
81
|
+
* @public
|
|
82
|
+
*/
|
|
83
|
+
setPosition(id, position) {
|
|
84
|
+
const provider = this.providerInstances[id];
|
|
85
|
+
if (!provider) {
|
|
86
|
+
throw new Error('Unknown provider');
|
|
53
87
|
}
|
|
88
|
+
if (!provider.setLocation) {
|
|
89
|
+
Logger.warn('Cannot set location to ' + provider.constructor.name);
|
|
90
|
+
}
|
|
91
|
+
provider.setLocation(position);
|
|
92
|
+
}
|
|
54
93
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
94
|
+
/**
|
|
95
|
+
* @public
|
|
96
|
+
*/
|
|
97
|
+
setHeading(id, heading) {
|
|
98
|
+
const provider = this.providerInstances[id];
|
|
99
|
+
if (!provider) {
|
|
100
|
+
throw new Error('Unknown provider');
|
|
101
|
+
}
|
|
102
|
+
if (!provider.setHeading) {
|
|
103
|
+
Logger.warn('Cannot set heading to ' + provider.constructor.name);
|
|
104
|
+
}
|
|
105
|
+
provider.setHeading(heading);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @public
|
|
110
|
+
*/
|
|
111
|
+
setItinerary(id, itinerary) {
|
|
112
|
+
const provider = this.providerInstances[id];
|
|
113
|
+
if (!provider) {
|
|
114
|
+
throw new Error('Unknown provider');
|
|
115
|
+
}
|
|
116
|
+
if (!provider.setItinerary) {
|
|
117
|
+
Logger.warn('Cannot set itinerary to ' + provider.constructor.name);
|
|
118
|
+
}
|
|
119
|
+
provider.setItinerary(itinerary);
|
|
58
120
|
}
|
|
59
121
|
|
|
60
122
|
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import { WGS84 } from '@wemap/geo';
|
|
4
|
+
|
|
5
|
+
import AbsoluteAttitudeProvider from '../providers/attitude/AbsoluteAttitudeProvider';
|
|
6
|
+
import Utils from './Utils';
|
|
7
|
+
import EventType from '../events/EventType';
|
|
8
|
+
|
|
9
|
+
const userLocation = new WGS84(43.609275, 3.884236);
|
|
10
|
+
|
|
11
|
+
class AbsoluteAttitudeComponent extends React.Component {
|
|
12
|
+
|
|
13
|
+
constructor(props, context) {
|
|
14
|
+
super(props, context);
|
|
15
|
+
|
|
16
|
+
this.state = {
|
|
17
|
+
attitudeBrowser: null,
|
|
18
|
+
deviceorientation: null,
|
|
19
|
+
deviceorientationabsolute: null
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
this.absoluteAttitudeProvider = new AbsoluteAttitudeProvider(this.onEvent, this.onError);
|
|
23
|
+
this.absoluteAttitudeProvider.setLocation(userLocation);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
componentDidMount() {
|
|
27
|
+
this.absoluteAttitudeProvider.start();
|
|
28
|
+
|
|
29
|
+
this.onDeviceOrientationEventListener = (e) => this.setState({ deviceorientation: e });
|
|
30
|
+
window.addEventListener('deviceorientation', this.onDeviceOrientationEventListener, true);
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
this.onDeviceOrientationAbsoluteEventListener = (e) => this.setState({ deviceorientationabsolute: e });
|
|
34
|
+
window.addEventListener('deviceorientationabsolute', this.onDeviceOrientationAbsoluteEventListener, true);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
componentWillUnmount() {
|
|
38
|
+
this.absoluteAttitudeProvider.stop();
|
|
39
|
+
|
|
40
|
+
window.removeEventListener('deviceorientation', this.onDeviceOrientationEventListener, true);
|
|
41
|
+
|
|
42
|
+
window.removeEventListener('deviceorientationabsolute', this.onDeviceOrientationAbsoluteEventListener, true);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
onEvent = events => {
|
|
46
|
+
events.forEach(event => {
|
|
47
|
+
if (event.dataType === EventType.AbsoluteAttitude) {
|
|
48
|
+
this.setState({ attitudeBrowser: event.data });
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
onError = events => {
|
|
54
|
+
events.forEach(event => {
|
|
55
|
+
if (event.dataType === EventType.AbsoluteAttitude) {
|
|
56
|
+
this.setState({ attitudeBrowser: event.error });
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
render() {
|
|
62
|
+
|
|
63
|
+
let rawRender = <span>Not available</span>;
|
|
64
|
+
|
|
65
|
+
if (this.state.deviceorientation && this.state.deviceorientation.webkitCompassHeading) {
|
|
66
|
+
const alpha = this.state.deviceorientation.alpha;
|
|
67
|
+
const beta = this.state.deviceorientation.beta;
|
|
68
|
+
const gamma = this.state.deviceorientation.gamma;
|
|
69
|
+
const webkitCompassHeading = this.state.deviceorientation.webkitCompassHeading;
|
|
70
|
+
|
|
71
|
+
if (alpha && beta && gamma && webkitCompassHeading) {
|
|
72
|
+
rawRender = <p>alpha: {alpha.toFixed(2)}, <br />
|
|
73
|
+
beta: {beta.toFixed(2)}, <br />
|
|
74
|
+
gamma: {gamma.toFixed(2)}, <br />
|
|
75
|
+
webkitCompassHeading: {webkitCompassHeading.toFixed(2)}</p>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
} else if (this.state.deviceorientationabsolute) {
|
|
79
|
+
const alpha = this.state.deviceorientationabsolute.alpha;
|
|
80
|
+
const beta = this.state.deviceorientationabsolute.beta;
|
|
81
|
+
const gamma = this.state.deviceorientationabsolute.gamma;
|
|
82
|
+
|
|
83
|
+
if (alpha && beta && gamma) {
|
|
84
|
+
rawRender = <p>alpha: {alpha.toFixed(2)}, <br />
|
|
85
|
+
beta: {beta.toFixed(2)}, <br />
|
|
86
|
+
gamma: {gamma.toFixed(2)}</p>;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const browserRender = Utils.renderAttitude(this.state.attitudeBrowser);
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<div>
|
|
94
|
+
<h3>Raw:</h3>
|
|
95
|
+
{rawRender}
|
|
96
|
+
<h3>From browser:</h3>
|
|
97
|
+
{browserRender}
|
|
98
|
+
</div>
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export default AbsoluteAttitudeComponent;
|
|
104
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import isEmpty from 'lodash.isempty';
|
|
3
|
+
|
|
4
|
+
import EventType from '../events/EventType';
|
|
5
|
+
import Utils from './Utils';
|
|
6
|
+
import ArCoreProvider from '../providers/pose/ArCoreProvider';
|
|
7
|
+
|
|
8
|
+
class ArCoreComponent extends React.Component {
|
|
9
|
+
|
|
10
|
+
constructor(props, context) {
|
|
11
|
+
super(props, context);
|
|
12
|
+
this.state = {
|
|
13
|
+
position: null,
|
|
14
|
+
attitude: null
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
this.poseProvider = new ArCoreProvider(this.onEvent, this.onError);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
componentDidMount() {
|
|
22
|
+
this.poseProvider.start();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
componentWillUnmount() {
|
|
26
|
+
this.poseProvider.stop();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
onEvent = events => {
|
|
30
|
+
const newState = {};
|
|
31
|
+
events.forEach(event => {
|
|
32
|
+
if (event.dataType === EventType.RelativePosition) {
|
|
33
|
+
newState.position = event.data;
|
|
34
|
+
} else if (event.dataType === EventType.RelativeAttitude) {
|
|
35
|
+
newState.attitude = event.data;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
if (!isEmpty(newState)) {
|
|
39
|
+
this.setState(newState);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
onError = events => {
|
|
44
|
+
const newState = {};
|
|
45
|
+
events.forEach(event => {
|
|
46
|
+
if (event.dataType === EventType.RelativePosition) {
|
|
47
|
+
newState.position = event.error;
|
|
48
|
+
} else if (event.dataType === EventType.RelativeAttitude) {
|
|
49
|
+
newState.attitude = event.error;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
if (!isEmpty(newState)) {
|
|
53
|
+
this.setState(newState);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
render() {
|
|
58
|
+
|
|
59
|
+
const attitudeRender = Utils.renderAttitude(this.state.attitude);
|
|
60
|
+
const positionRender = Utils.renderRelativePosition(this.state.position);
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<div>
|
|
64
|
+
<h3>Position</h3>
|
|
65
|
+
{positionRender}
|
|
66
|
+
<h3>Attitude</h3>
|
|
67
|
+
{attitudeRender}
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export default ArCoreComponent;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import GnssWifiProvider from '../providers/position/GnssWifiProvider';
|
|
4
|
+
import Utils from './Utils';
|
|
5
|
+
import EventType from '../events/EventType';
|
|
6
|
+
import MapComponent from './MapComponent';
|
|
7
|
+
|
|
8
|
+
class GnssWifiComponent extends React.Component {
|
|
9
|
+
|
|
10
|
+
constructor(props, context) {
|
|
11
|
+
super(props, context);
|
|
12
|
+
this.state = { position: null };
|
|
13
|
+
|
|
14
|
+
this.gnssWifiProvider = new GnssWifiProvider(this.onEvent, this.onError);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
componentDidMount() {
|
|
19
|
+
this.gnssWifiProvider.start();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
componentWillUnmount() {
|
|
23
|
+
this.gnssWifiProvider.stop();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
onEvent = events => {
|
|
27
|
+
events.forEach(event => {
|
|
28
|
+
if (event.dataType === EventType.AbsolutePosition) {
|
|
29
|
+
this.setState({ position: event.data });
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
if (this.map) {
|
|
34
|
+
this.map.parseEvents(events);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
onError = events => {
|
|
39
|
+
events.forEach(event => {
|
|
40
|
+
if (event.dataType === EventType.AbsolutePosition) {
|
|
41
|
+
this.setState({ position: event.error });
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
render() {
|
|
47
|
+
return (
|
|
48
|
+
<div>
|
|
49
|
+
<h3>Position</h3>
|
|
50
|
+
{Utils.renderPosition(this.state.position)}
|
|
51
|
+
<h3>Map</h3>
|
|
52
|
+
<MapComponent ref={map => (this.map = map)} />
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default GnssWifiComponent;
|