@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
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
import chai from 'chai';
|
|
2
|
-
import chaiAlmost from 'chai-almost';
|
|
3
|
-
import chaiAsPromised from 'chai-as-promised';
|
|
4
|
-
import 'jsdom-global/register';
|
|
5
|
-
|
|
6
|
-
import SensorsCompatibility from './SensorsCompatibility';
|
|
7
|
-
|
|
8
|
-
const expect = chai.expect;
|
|
9
|
-
chai.use(chaiAlmost());
|
|
10
|
-
chai.use(chaiAsPromised);
|
|
11
|
-
|
|
12
|
-
const IOS_USER_AGENT = 'iPad';
|
|
13
|
-
const ANDROID_USER_AGENT = 'Android';
|
|
14
|
-
const FIREFOX_USER_AGENT = 'Firefox';
|
|
15
|
-
const OPERA_USER_AGENT = 'Opera';
|
|
16
|
-
const UNKNOWN_USER_AGENT = 'foobar';
|
|
17
|
-
|
|
18
|
-
const defaultMotionSensors = {
|
|
19
|
-
accelerometer: true,
|
|
20
|
-
gyroscope: true,
|
|
21
|
-
magnetometer: true
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const defaultDeviceMotionSensors = {
|
|
25
|
-
accelerometer: true,
|
|
26
|
-
gyroscope: true,
|
|
27
|
-
magnetometer: false
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const timestamps = [
|
|
31
|
-
0, 0.02, 0.04, 0.06, 0.08
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
const accData = [
|
|
35
|
-
[-0.034561157, 3.81073, 8.860977],
|
|
36
|
-
[-0.030700684, 3.814499, 8.818954],
|
|
37
|
-
[-0.018234253, 3.8023376, 8.85762],
|
|
38
|
-
[-0.020080566, 3.8205414, 8.8676605],
|
|
39
|
-
[-0.054519653, 3.8456726, 8.810287]
|
|
40
|
-
];
|
|
41
|
-
|
|
42
|
-
const gyrData = [
|
|
43
|
-
[0.0047454834, 0.0028076172, 0.0022888184],
|
|
44
|
-
[0.005218506, 0.0020446777, 0.0012207031],
|
|
45
|
-
[0.0044555664, 0.0023040771, 4.4250488E-4],
|
|
46
|
-
[0.0044555664, 0.0027618408, 0.0011444092],
|
|
47
|
-
[0.0040893555, 0.0020446777, 0.0025787354]
|
|
48
|
-
];
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
function fakeUserAgent(userAgent) {
|
|
52
|
-
navigator.__defineGetter__('userAgent', () => userAgent);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const commonDeviceMotion = (userAgent = ANDROID_USER_AGENT,
|
|
56
|
-
_simulatedSensors = defaultDeviceMotionSensors,
|
|
57
|
-
_expectedSensors = defaultDeviceMotionSensors) => {
|
|
58
|
-
|
|
59
|
-
const simulatedSensors = !_simulatedSensors ? defaultMotionSensors : _simulatedSensors;
|
|
60
|
-
const expectedSensors = !_expectedSensors ? defaultMotionSensors : _expectedSensors;
|
|
61
|
-
|
|
62
|
-
return new Promise((resolve, reject) => {
|
|
63
|
-
const result = [];
|
|
64
|
-
|
|
65
|
-
fakeUserAgent(userAgent);
|
|
66
|
-
document.hasFocus = () => true;
|
|
67
|
-
const sc = new SensorsCompatibility();
|
|
68
|
-
|
|
69
|
-
let eventsReceived = 0;
|
|
70
|
-
sc.startImu((e) => {
|
|
71
|
-
result.push(e);
|
|
72
|
-
|
|
73
|
-
eventsReceived++;
|
|
74
|
-
if (eventsReceived === accData.length) {
|
|
75
|
-
resolve(result);
|
|
76
|
-
}
|
|
77
|
-
}, expectedSensors).catch(e => {
|
|
78
|
-
reject(e);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
if (!simulatedSensors.accelerometer && !simulatedSensors.gyroscope) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
for (let i = 0; i < timestamps.length; i++) {
|
|
86
|
-
|
|
87
|
-
const event = new CustomEvent('devicemotion');
|
|
88
|
-
|
|
89
|
-
Object.defineProperty(event, 'timeStamp', { get: () => timestamps[i] });
|
|
90
|
-
|
|
91
|
-
if (simulatedSensors.accelerometer) {
|
|
92
|
-
const acc = accData[i];
|
|
93
|
-
event.accelerationIncludingGravity = {
|
|
94
|
-
x: acc[0],
|
|
95
|
-
y: acc[1],
|
|
96
|
-
z: acc[2]
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (simulatedSensors.gyroscope) {
|
|
101
|
-
const gyr = gyrData[i];
|
|
102
|
-
event.rotationRate = {
|
|
103
|
-
alpha: gyr[0],
|
|
104
|
-
beta: gyr[1],
|
|
105
|
-
gamma: gyr[2]
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
window.dispatchEvent(event);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
describe('devicemotion', () => {
|
|
115
|
-
|
|
116
|
-
it('[Android] Acc - Gyr', (done) => {
|
|
117
|
-
commonDeviceMotion(ANDROID_USER_AGENT).then((receivedDataset) => {
|
|
118
|
-
for (let i = 0; i < receivedDataset.length; i++) {
|
|
119
|
-
const e = receivedDataset[i];
|
|
120
|
-
|
|
121
|
-
const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
|
|
122
|
-
const expectedAcc = accData[i];
|
|
123
|
-
const expectedTimestamp = timestamps[i] / 1e3;
|
|
124
|
-
|
|
125
|
-
expect(e.timestamp).almost(expectedTimestamp);
|
|
126
|
-
expect(e.acc).deep.almost(expectedAcc);
|
|
127
|
-
expect(e.gyr).deep.almost(expectedGyr);
|
|
128
|
-
}
|
|
129
|
-
done();
|
|
130
|
-
}).catch(e => done(e));
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('[iOS] Acc - Gyr', (done) => {
|
|
134
|
-
commonDeviceMotion(IOS_USER_AGENT).then((receivedDataset) => {
|
|
135
|
-
for (let i = 0; i < receivedDataset.length; i++) {
|
|
136
|
-
const e = receivedDataset[i];
|
|
137
|
-
|
|
138
|
-
const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
|
|
139
|
-
const expectedAcc = accData[i].map(x => -x);
|
|
140
|
-
const expectedTimestamp = timestamps[i] / 1e3;
|
|
141
|
-
|
|
142
|
-
expect(e.timestamp).almost(expectedTimestamp);
|
|
143
|
-
expect(e.acc).deep.almost(expectedAcc);
|
|
144
|
-
expect(e.gyr).deep.almost(expectedGyr);
|
|
145
|
-
}
|
|
146
|
-
done();
|
|
147
|
-
}).catch(e => done(e));
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it('[Firefox] Acc - Gyr', (done) => {
|
|
151
|
-
commonDeviceMotion(FIREFOX_USER_AGENT).then((receivedDataset) => {
|
|
152
|
-
for (let i = 0; i < receivedDataset.length; i++) {
|
|
153
|
-
const e = receivedDataset[i];
|
|
154
|
-
|
|
155
|
-
const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
|
|
156
|
-
const expectedAcc = accData[i];
|
|
157
|
-
const expectedTimestamp = timestamps[i] / 1e3;
|
|
158
|
-
|
|
159
|
-
expect(e.timestamp).almost(expectedTimestamp);
|
|
160
|
-
expect(e.acc).deep.almost(expectedAcc);
|
|
161
|
-
expect(e.gyr).deep.almost(expectedGyr);
|
|
162
|
-
}
|
|
163
|
-
done();
|
|
164
|
-
}).catch(e => done(e));
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
it('[Opera] Acc - Gyr', (done) => {
|
|
168
|
-
commonDeviceMotion(OPERA_USER_AGENT).then((receivedDataset) => {
|
|
169
|
-
for (let i = 0; i < receivedDataset.length; i++) {
|
|
170
|
-
const e = receivedDataset[i];
|
|
171
|
-
|
|
172
|
-
const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
|
|
173
|
-
const expectedAcc = accData[i];
|
|
174
|
-
const expectedTimestamp = timestamps[i] / 1e3;
|
|
175
|
-
|
|
176
|
-
expect(e.timestamp).almost(expectedTimestamp);
|
|
177
|
-
expect(e.acc).deep.almost(expectedAcc);
|
|
178
|
-
expect(e.gyr).deep.almost(expectedGyr);
|
|
179
|
-
}
|
|
180
|
-
done();
|
|
181
|
-
}).catch(e => done(e));
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
it('[Unknown] Acc - Gyr', (done) => {
|
|
186
|
-
commonDeviceMotion(UNKNOWN_USER_AGENT).then((receivedDataset) => {
|
|
187
|
-
for (let i = 0; i < receivedDataset.length; i++) {
|
|
188
|
-
const e = receivedDataset[i];
|
|
189
|
-
|
|
190
|
-
const expectedGyr = gyrData[i].map(x => x * Math.PI / 180);
|
|
191
|
-
const expectedAcc = accData[i];
|
|
192
|
-
const expectedTimestamp = timestamps[i] / 1e3;
|
|
193
|
-
|
|
194
|
-
expect(e.timestamp).almost(expectedTimestamp);
|
|
195
|
-
expect(e.acc).deep.almost(expectedAcc);
|
|
196
|
-
expect(e.gyr).deep.almost(expectedGyr);
|
|
197
|
-
}
|
|
198
|
-
done();
|
|
199
|
-
}).catch(e => done(e));
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
it('[Unknown] Missing gyr', (done) => {
|
|
204
|
-
|
|
205
|
-
const globalTimeout = setTimeout(() => done(), 20);
|
|
206
|
-
|
|
207
|
-
commonDeviceMotion(UNKNOWN_USER_AGENT,
|
|
208
|
-
{
|
|
209
|
-
accelerometer: true,
|
|
210
|
-
gyroscope: false
|
|
211
|
-
}, {
|
|
212
|
-
accelerometer: true,
|
|
213
|
-
gyroscope: true
|
|
214
|
-
})
|
|
215
|
-
.then(() => {
|
|
216
|
-
clearTimeout(globalTimeout);
|
|
217
|
-
done(Error('Should not success'));
|
|
218
|
-
})
|
|
219
|
-
.catch(() => {
|
|
220
|
-
clearTimeout(globalTimeout);
|
|
221
|
-
done(Error('Should not reject'));
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
it('[Unknown] Missing acc', (done) => {
|
|
227
|
-
|
|
228
|
-
const globalTimeout = setTimeout(() => done(), 20);
|
|
229
|
-
|
|
230
|
-
commonDeviceMotion(UNKNOWN_USER_AGENT,
|
|
231
|
-
{
|
|
232
|
-
accelerometer: true,
|
|
233
|
-
gyroscope: false
|
|
234
|
-
}, {
|
|
235
|
-
accelerometer: true,
|
|
236
|
-
gyroscope: true
|
|
237
|
-
})
|
|
238
|
-
.then(() => {
|
|
239
|
-
clearTimeout(globalTimeout);
|
|
240
|
-
done(Error('Should not success'));
|
|
241
|
-
})
|
|
242
|
-
.catch(() => {
|
|
243
|
-
clearTimeout(globalTimeout);
|
|
244
|
-
done(Error('Should not reject'));
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
it('[Unknown] No sensor', (done) => {
|
|
250
|
-
|
|
251
|
-
const globalTimeout = setTimeout(() => done(), 20);
|
|
252
|
-
|
|
253
|
-
commonDeviceMotion(UNKNOWN_USER_AGENT,
|
|
254
|
-
{
|
|
255
|
-
accelerometer: false,
|
|
256
|
-
gyroscope: false
|
|
257
|
-
}, {
|
|
258
|
-
accelerometer: true,
|
|
259
|
-
gyroscope: true
|
|
260
|
-
})
|
|
261
|
-
.then(() => {
|
|
262
|
-
clearTimeout(globalTimeout);
|
|
263
|
-
done(Error('Should not success'));
|
|
264
|
-
})
|
|
265
|
-
.catch(() => {
|
|
266
|
-
clearTimeout(globalTimeout);
|
|
267
|
-
done(Error('Should not reject'));
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
});
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
const DataType = {
|
|
3
|
-
ACCELEROMETER: 0,
|
|
4
|
-
GYROSCOPE: 1,
|
|
5
|
-
DEVICE_ORIENTATION_RELATIVE: 2,
|
|
6
|
-
DEVICE_ORIENTATION_ABSOLUTE: 3,
|
|
7
|
-
WATCH_POSITION: 4,
|
|
8
|
-
USER_INPUT_POSITION: 10,
|
|
9
|
-
USER_INPUT_HEADING: 11,
|
|
10
|
-
IP_POSITION: 12
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const PRECISION = 1000;
|
|
14
|
-
|
|
15
|
-
class SensorsLogger {
|
|
16
|
-
|
|
17
|
-
constructor() {
|
|
18
|
-
this.dataset = [];
|
|
19
|
-
this.videoBlobs = [];
|
|
20
|
-
this.removeDuplicates = true;
|
|
21
|
-
|
|
22
|
-
this.lastDataTimestamp = new Array(DataType.length);
|
|
23
|
-
for (let i = 0; i < DataType.length; i++) {
|
|
24
|
-
this.lastDataTimestamp[i] = 0;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
static get DataType() {
|
|
29
|
-
return DataType;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
disableRemoveDuplicates() {
|
|
33
|
-
this.removeDuplicates = false;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
feedWithCurrentTime(dataType, data, compact) {
|
|
37
|
-
this.feed(dataType, performance.now() / 1e3, data, compact);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
feed(dataType, timestamp, _data, compact = false) {
|
|
41
|
-
|
|
42
|
-
let data;
|
|
43
|
-
|
|
44
|
-
const smallTimestamp = Math.round(timestamp * PRECISION) / PRECISION;
|
|
45
|
-
if (this.removeDuplicates && this.lastDataTimestamp[dataType] === timestamp) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (compact) {
|
|
50
|
-
const smallData = new Array(_data.length);
|
|
51
|
-
for (let i = 0; i < _data.length; i++) {
|
|
52
|
-
smallData[i] = Math.round(_data[i] * PRECISION) / PRECISION;
|
|
53
|
-
}
|
|
54
|
-
data = smallData;
|
|
55
|
-
} else {
|
|
56
|
-
data = _data;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const dataArray = [dataType, smallTimestamp].concat(data);
|
|
60
|
-
this.dataset.push(dataArray);
|
|
61
|
-
if (this.removeDuplicates) {
|
|
62
|
-
this.lastDataTimestamp[dataType] = timestamp;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// TODO: this is not linked to the rest of the code. Check why
|
|
67
|
-
// videoFeed = event => {
|
|
68
|
-
// if (event.data && event.data.size > 0) {
|
|
69
|
-
// this.videoBlobs.push(event.data);
|
|
70
|
-
// }
|
|
71
|
-
// }
|
|
72
|
-
|
|
73
|
-
getVideoSize() {
|
|
74
|
-
return this.videoBlobs.length;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Pop current logs dataset
|
|
79
|
-
*/
|
|
80
|
-
pop() {
|
|
81
|
-
const currentDataset = this.dataset;
|
|
82
|
-
this.dataset = [];
|
|
83
|
-
return currentDataset;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
popVideoBlob() {
|
|
87
|
-
const currentVideoBlobs = this.videoBlobs;
|
|
88
|
-
this.videoBlobs = [];
|
|
89
|
-
return new Blob(currentVideoBlobs, { type: 'video/webm' });
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export default SensorsLogger;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import JSZip from 'jszip';
|
|
2
|
-
import { saveAs } from 'file-saver';
|
|
3
|
-
|
|
4
|
-
class SensorsLoggerUtils {
|
|
5
|
-
|
|
6
|
-
static download(sensorsLogger) {
|
|
7
|
-
|
|
8
|
-
const data = sensorsLogger.pop();
|
|
9
|
-
const csvData = data.map(row => row.join(',')).join('\r\n');
|
|
10
|
-
|
|
11
|
-
const zip = new JSZip();
|
|
12
|
-
zip.file('data.csv', csvData);
|
|
13
|
-
zip.file('video.webm', sensorsLogger.popVideoBlob());
|
|
14
|
-
zip.generateAsync({ type: 'blob' })
|
|
15
|
-
.then(function(content) {
|
|
16
|
-
saveAs(content, 'dataset.zip');
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Return a value equivalent to performance now from a given unix timestamp
|
|
23
|
-
* @param {Number} timestamp a unix timestamp
|
|
24
|
-
* @returns timestamp relative to performance.now()
|
|
25
|
-
*/
|
|
26
|
-
static unixTimestampToPerformanceNow(timestamp) {
|
|
27
|
-
|
|
28
|
-
if (!window || !window.performance) {
|
|
29
|
-
throw new Error('window.performance does not exist');
|
|
30
|
-
}
|
|
31
|
-
return window.performance.now() + timestamp - new Date().getTime();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export default SensorsLoggerUtils;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|