mobility-toolbox-js 2.0.0-beta.34 → 2.0.0-beta.37
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/README.md +14 -8
- package/api/RealtimeAPI.d.ts +6 -6
- package/api/RealtimeAPI.d.ts.map +1 -1
- package/api/RealtimeAPI.js +170 -197
- package/api/RealtimeAPI.test.d.ts +2 -0
- package/api/RealtimeAPI.test.d.ts.map +1 -0
- package/api/RealtimeAPI.test.js +67 -0
- package/api/RoutingAPI.d.ts +6 -2
- package/api/RoutingAPI.d.ts.map +1 -1
- package/api/RoutingAPI.js +8 -38
- package/api/RoutingAPI.test.d.ts +2 -0
- package/api/RoutingAPI.test.d.ts.map +1 -0
- package/api/RoutingAPI.test.js +29 -0
- package/api/StopsAPI.d.ts +1 -1
- package/api/StopsAPI.d.ts.map +1 -1
- package/api/StopsAPI.js +8 -40
- package/api/StopsAPI.test.d.ts +2 -0
- package/api/StopsAPI.test.d.ts.map +1 -0
- package/api/StopsAPI.test.js +26 -0
- package/api/index.d.ts +3 -4
- package/api/index.d.ts.map +1 -1
- package/api/index.js +3 -10
- package/api/typedefs.js +1 -0
- package/common/api/HttpAPI.d.ts +2 -2
- package/common/api/HttpAPI.d.ts.map +1 -1
- package/common/api/HttpAPI.js +21 -48
- package/common/api/HttpAPI.test.d.ts +2 -0
- package/common/api/HttpAPI.test.d.ts.map +1 -0
- package/common/api/HttpAPI.test.js +54 -0
- package/common/api/WebSocketAPI.d.ts +8 -4
- package/common/api/WebSocketAPI.d.ts.map +1 -1
- package/common/api/WebSocketAPI.js +125 -129
- package/common/api/WebSocketAPI.test.d.ts +2 -0
- package/common/api/WebSocketAPI.test.d.ts.map +1 -0
- package/common/api/WebSocketAPI.test.js +380 -0
- package/common/controls/Control.d.ts +5 -5
- package/common/controls/Control.d.ts.map +1 -1
- package/common/controls/Control.js +44 -77
- package/common/controls/Control.test.d.ts +2 -0
- package/common/controls/Control.test.d.ts.map +1 -0
- package/common/controls/Control.test.js +89 -0
- package/common/index.js +2 -18
- package/common/layers/Layer.d.ts +11 -11
- package/common/layers/Layer.d.ts.map +1 -1
- package/common/layers/Layer.js +70 -104
- package/common/layers/Layer.test.d.ts +2 -0
- package/common/layers/Layer.test.d.ts.map +1 -0
- package/common/layers/Layer.test.js +137 -0
- package/common/mixins/CopyrightMixin.js +23 -52
- package/common/mixins/MapboxLayerMixin.js +162 -204
- package/common/mixins/RealtimeLayerMixin.js +580 -635
- package/common/mixins/StopFinderMixin.d.ts +3 -3
- package/common/mixins/StopFinderMixin.d.ts.map +1 -1
- package/common/mixins/StopFinderMixin.js +115 -157
- package/common/mixins/UserInteractionsLayerMixin.js +142 -175
- package/common/mixins/UserInteractionsLayerMixin.test.d.ts +2 -0
- package/common/mixins/UserInteractionsLayerMixin.test.d.ts.map +1 -0
- package/common/mixins/UserInteractionsLayerMixin.test.js +214 -0
- package/common/styles/index.js +4 -24
- package/common/styles/realtimeDefaultStyle.d.ts.map +1 -1
- package/common/styles/realtimeDefaultStyle.js +67 -78
- package/common/styles/realtimeDelayStyle.js +4 -17
- package/common/styles/realtimeSimpleStyle.js +5 -7
- package/common/typedefs.js +1 -0
- package/common/utils/cleanStopTime.js +3 -5
- package/common/utils/compareDepartures.d.ts +1 -1
- package/common/utils/compareDepartures.d.ts.map +1 -1
- package/common/utils/compareDepartures.js +8 -11
- package/common/utils/createCanvas.js +3 -5
- package/common/utils/createTrackerFilters.d.ts +1 -1
- package/common/utils/createTrackerFilters.d.ts.map +1 -1
- package/common/utils/createTrackerFilters.js +22 -32
- package/common/utils/createTrackerFilters.test.d.ts +2 -0
- package/common/utils/createTrackerFilters.test.d.ts.map +1 -0
- package/common/utils/createTrackerFilters.test.js +79 -0
- package/common/utils/getLayersAsFlatArray.js +6 -8
- package/common/utils/getMapboxMapCopyrights.js +9 -11
- package/common/utils/getMapboxMapCopyrights.test.d.ts +2 -0
- package/common/utils/getMapboxMapCopyrights.test.d.ts.map +1 -0
- package/common/utils/getMapboxMapCopyrights.test.js +40 -0
- package/common/utils/getMapboxRender.js +12 -15
- package/common/utils/getMaplibreRender.js +10 -13
- package/common/utils/getRealtimeModeSuffix.js +2 -6
- package/common/utils/getUrlWithParams.js +5 -8
- package/common/utils/getVehiclePosition.js +20 -23
- package/common/utils/index.js +12 -37
- package/common/utils/removeDuplicate.d.ts +1 -1
- package/common/utils/removeDuplicate.d.ts.map +1 -1
- package/common/utils/removeDuplicate.js +6 -21
- package/common/utils/removeDuplicate.test.d.ts +2 -0
- package/common/utils/removeDuplicate.test.d.ts.map +1 -0
- package/common/utils/removeDuplicate.test.js +19 -0
- package/common/utils/renderTrajectories.js +31 -43
- package/common/utils/sortByDelay.js +4 -6
- package/common/utils/timeUtils.js +14 -24
- package/common/utils/timeUtils.test.d.ts +2 -0
- package/common/utils/timeUtils.test.d.ts.map +1 -0
- package/common/utils/timeUtils.test.js +10 -0
- package/common/utils/trackerConfig.js +27 -39
- package/common/utils/trackerConfig.test.d.ts +2 -0
- package/common/utils/trackerConfig.test.d.ts.map +1 -0
- package/common/utils/trackerConfig.test.js +23 -0
- package/iife.js +3 -5
- package/index.d.ts +4 -0
- package/index.js +9 -10
- package/mapbox/controls/CopyrightControl.d.ts +0 -1
- package/mapbox/controls/CopyrightControl.d.ts.map +1 -1
- package/mapbox/controls/CopyrightControl.js +18 -38
- package/mapbox/controls/index.js +1 -5
- package/mapbox/index.js +4 -20
- package/mapbox/layers/Layer.d.ts +1 -1
- package/mapbox/layers/Layer.d.ts.map +1 -1
- package/mapbox/layers/Layer.js +29 -71
- package/mapbox/layers/Layer.test.d.ts +2 -0
- package/mapbox/layers/Layer.test.d.ts.map +1 -0
- package/mapbox/layers/Layer.test.js +204 -0
- package/mapbox/layers/RealtimeLayer.d.ts +4 -4
- package/mapbox/layers/RealtimeLayer.d.ts.map +1 -1
- package/mapbox/layers/RealtimeLayer.js +83 -125
- package/mapbox/layers/RealtimeLayer.test.d.ts +2 -0
- package/mapbox/layers/RealtimeLayer.test.d.ts.map +1 -0
- package/mapbox/layers/RealtimeLayer.test.js +10 -0
- package/mapbox/layers/index.js +2 -7
- package/mapbox/utils.js +19 -33
- package/mbt.js +59 -37
- package/mbt.js.map +2 -2
- package/mbt.min.js +10 -10
- package/mbt.min.js.map +2 -2
- package/ol/controls/CopyrightControl.js +26 -47
- package/ol/controls/CopyrightControl.test.d.ts +2 -0
- package/ol/controls/CopyrightControl.test.d.ts.map +1 -0
- package/ol/controls/CopyrightControl.test.js +177 -0
- package/ol/controls/RoutingControl.d.ts +6 -5
- package/ol/controls/RoutingControl.d.ts.map +1 -1
- package/ol/controls/RoutingControl.js +209 -270
- package/ol/controls/RoutingControl.test.d.ts +2 -0
- package/ol/controls/RoutingControl.test.d.ts.map +1 -0
- package/ol/controls/RoutingControl.test.js +150 -0
- package/ol/controls/StopFinderControl.js +9 -32
- package/ol/controls/StopFinderControl.test.d.ts +2 -0
- package/ol/controls/StopFinderControl.test.d.ts.map +1 -0
- package/ol/controls/StopFinderControl.test.js +49 -0
- package/ol/controls/index.js +3 -9
- package/ol/index.js +5 -21
- package/ol/layers/Layer.d.ts +1 -1
- package/ol/layers/Layer.d.ts.map +1 -1
- package/ol/layers/Layer.js +40 -72
- package/ol/layers/Layer.test.d.ts +2 -0
- package/ol/layers/Layer.test.d.ts.map +1 -0
- package/ol/layers/Layer.test.js +196 -0
- package/ol/layers/MapboxLayer.d.ts +7 -7
- package/ol/layers/MapboxLayer.d.ts.map +1 -1
- package/ol/layers/MapboxLayer.js +30 -66
- package/ol/layers/MapboxLayer.test.d.ts +2 -0
- package/ol/layers/MapboxLayer.test.d.ts.map +1 -0
- package/ol/layers/MapboxLayer.test.js +164 -0
- package/ol/layers/MapboxStyleLayer.d.ts +3 -3
- package/ol/layers/MapboxStyleLayer.d.ts.map +1 -1
- package/ol/layers/MapboxStyleLayer.js +92 -135
- package/ol/layers/MapboxStyleLayer.test.d.ts +2 -0
- package/ol/layers/MapboxStyleLayer.test.d.ts.map +1 -0
- package/ol/layers/MapboxStyleLayer.test.js +232 -0
- package/ol/layers/MaplibreLayer.d.ts +1 -1
- package/ol/layers/MaplibreLayer.d.ts.map +1 -1
- package/ol/layers/MaplibreLayer.js +14 -48
- package/ol/layers/RealtimeLayer.d.ts +2 -2
- package/ol/layers/RealtimeLayer.d.ts.map +1 -1
- package/ol/layers/RealtimeLayer.js +111 -147
- package/ol/layers/RealtimeLayer.test.d.ts +2 -0
- package/ol/layers/RealtimeLayer.test.d.ts.map +1 -0
- package/ol/layers/RealtimeLayer.test.js +71 -0
- package/ol/layers/RoutingLayer.d.ts +2 -2
- package/ol/layers/RoutingLayer.d.ts.map +1 -1
- package/ol/layers/RoutingLayer.js +29 -61
- package/ol/layers/RoutingLayer.test.d.ts +2 -0
- package/ol/layers/RoutingLayer.test.d.ts.map +1 -0
- package/ol/layers/RoutingLayer.test.js +39 -0
- package/ol/layers/VectorLayer.d.ts +1 -1
- package/ol/layers/VectorLayer.d.ts.map +1 -1
- package/ol/layers/VectorLayer.js +14 -48
- package/ol/layers/VectorLayer.test.d.ts +2 -0
- package/ol/layers/VectorLayer.test.d.ts.map +1 -0
- package/ol/layers/VectorLayer.test.js +87 -0
- package/ol/layers/WMSLayer.d.ts +1 -1
- package/ol/layers/WMSLayer.d.ts.map +1 -1
- package/ol/layers/WMSLayer.js +34 -68
- package/ol/layers/WMSLayer.test.d.ts +2 -0
- package/ol/layers/WMSLayer.test.d.ts.map +1 -0
- package/ol/layers/WMSLayer.test.js +66 -0
- package/ol/layers/index.js +8 -19
- package/ol/styles/fullTrajectoryDelayStyle.js +11 -13
- package/ol/styles/fullTrajectoryStyle.js +16 -18
- package/ol/styles/index.js +2 -7
- package/package.json +5 -2
- package/setupTests.js +12 -14
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import createTrackerFilters from './createTrackerFilters';
|
|
2
|
+
const u1 = {
|
|
3
|
+
properties: {
|
|
4
|
+
routeIdentifier: '001.000827.004:7',
|
|
5
|
+
operator: 'FoO',
|
|
6
|
+
line: {
|
|
7
|
+
name: 'U1',
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
const ireta = {
|
|
12
|
+
properties: {
|
|
13
|
+
routeIdentifier: '0022.000827.004:7',
|
|
14
|
+
operator: 'BAR',
|
|
15
|
+
line: {
|
|
16
|
+
name: 'IRETA',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
const arb = {
|
|
21
|
+
properties: {
|
|
22
|
+
routeIdentifier: '00333.000827.004:7',
|
|
23
|
+
operator: 'qux',
|
|
24
|
+
line: {
|
|
25
|
+
name: 'ARB',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
const trajectories = [u1, ireta, arb];
|
|
30
|
+
describe('#createTrackerFilter()', () => {
|
|
31
|
+
test('returns null', () => {
|
|
32
|
+
const filterFunc = createTrackerFilters();
|
|
33
|
+
expect(filterFunc).toBe(null);
|
|
34
|
+
});
|
|
35
|
+
describe('using line', () => {
|
|
36
|
+
test('as string', () => {
|
|
37
|
+
const filterFunc = createTrackerFilters('u1,foo');
|
|
38
|
+
expect(trajectories.filter(filterFunc)).toEqual([u1]);
|
|
39
|
+
});
|
|
40
|
+
test('as array of string', () => {
|
|
41
|
+
const filterFunc = createTrackerFilters(['u1', 'foo', 'IRETA']);
|
|
42
|
+
expect(trajectories.filter(filterFunc)).toEqual([u1, ireta]);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('using route identifier', () => {
|
|
46
|
+
test('as string', () => {
|
|
47
|
+
const filterFunc = createTrackerFilters(null, '1,foo');
|
|
48
|
+
expect(trajectories.filter(filterFunc)).toEqual([u1]);
|
|
49
|
+
});
|
|
50
|
+
test('as array of string', () => {
|
|
51
|
+
const filterFunc = createTrackerFilters(null, ['22', 'foo', '1']);
|
|
52
|
+
expect(trajectories.filter(filterFunc)).toEqual([u1, ireta]);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('using operator', () => {
|
|
56
|
+
test('as string', () => {
|
|
57
|
+
const filterFunc = createTrackerFilters(null, null, 'foo');
|
|
58
|
+
expect(trajectories.filter(filterFunc)).toEqual([u1]);
|
|
59
|
+
});
|
|
60
|
+
test('as array of string', () => {
|
|
61
|
+
const filterFunc = createTrackerFilters(null, null, ['bar', 'foo', '1']);
|
|
62
|
+
expect(trajectories.filter(filterFunc)).toEqual([u1, ireta]);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('using regexLine', () => {
|
|
66
|
+
test('as string', () => {
|
|
67
|
+
const filterFunc = createTrackerFilters(null, null, null, '^(S|R$|RE|PE|D|IRE|RB|TER)');
|
|
68
|
+
expect(trajectories.filter(filterFunc)).toEqual([ireta]);
|
|
69
|
+
});
|
|
70
|
+
test('as array of string', () => {
|
|
71
|
+
const filterFunc = createTrackerFilters(null, null, null, [
|
|
72
|
+
'^IR',
|
|
73
|
+
'^ARB$',
|
|
74
|
+
'foo',
|
|
75
|
+
]);
|
|
76
|
+
expect(trajectories.filter(filterFunc)).toEqual([ireta, arb]);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var getLayersAsFlatArray = function (layersOrLayer) {
|
|
4
|
-
var layers = layersOrLayer;
|
|
1
|
+
const getLayersAsFlatArray = (layersOrLayer) => {
|
|
2
|
+
let layers = layersOrLayer;
|
|
5
3
|
if (!Array.isArray(layers)) {
|
|
6
4
|
layers = [layersOrLayer];
|
|
7
5
|
}
|
|
8
|
-
|
|
9
|
-
layers.forEach(
|
|
6
|
+
let flatLayers = [];
|
|
7
|
+
layers.forEach((layer) => {
|
|
10
8
|
flatLayers.push(layer);
|
|
11
|
-
|
|
9
|
+
const { children } = layer;
|
|
12
10
|
flatLayers = flatLayers.concat(getLayersAsFlatArray(children || []));
|
|
13
11
|
});
|
|
14
12
|
return flatLayers;
|
|
15
13
|
};
|
|
16
|
-
|
|
14
|
+
export default getLayersAsFlatArray;
|
|
@@ -1,26 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var removeDuplicate_1 = require("./removeDuplicate");
|
|
1
|
+
import removeDuplicate from './removeDuplicate';
|
|
4
2
|
/**
|
|
5
3
|
* Return the copyright a Mapbox map.
|
|
6
4
|
* @param {mapboxgl.Map} map A Mapbox map
|
|
7
5
|
* @ignore
|
|
8
6
|
*/
|
|
9
|
-
|
|
7
|
+
const getMapboxMapCopyrights = (map) => {
|
|
10
8
|
if (!map || !map.style) {
|
|
11
9
|
return [];
|
|
12
10
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Object.values(sourceCaches).forEach(
|
|
11
|
+
const { sourceCaches } = map.style;
|
|
12
|
+
let copyrights = [];
|
|
13
|
+
Object.values(sourceCaches).forEach((sourceCache) => {
|
|
16
14
|
if (sourceCache.used) {
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const source = sourceCache.getSource();
|
|
16
|
+
const attribution = source.attribution || (source.options && source.options.attribution);
|
|
19
17
|
if (attribution) {
|
|
20
18
|
copyrights = copyrights.concat(attribution.replace(/©/g, '©').split(/(<a.*?<\/a>)/));
|
|
21
19
|
}
|
|
22
20
|
}
|
|
23
21
|
});
|
|
24
|
-
return (
|
|
22
|
+
return removeDuplicate(copyrights);
|
|
25
23
|
};
|
|
26
|
-
|
|
24
|
+
export default getMapboxMapCopyrights;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMapboxMapCopyrights.test.d.ts","sourceRoot":"","sources":["../../../src/common/utils/getMapboxMapCopyrights.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import getMapboxMapCopyrights from './getMapboxMapCopyrights';
|
|
2
|
+
describe('getMapboxMapCopyrights()', () => {
|
|
3
|
+
test('returns an empty array if map is not defined', () => {
|
|
4
|
+
expect(getMapboxMapCopyrights().length).toBe(0);
|
|
5
|
+
});
|
|
6
|
+
test('returns an empty array if map.style is not defined', () => {
|
|
7
|
+
expect(getMapboxMapCopyrights({}).length).toBe(0);
|
|
8
|
+
});
|
|
9
|
+
test('returns non depluicated copyrights in an array', () => {
|
|
10
|
+
expect(getMapboxMapCopyrights({
|
|
11
|
+
style: {
|
|
12
|
+
sourceCaches: {
|
|
13
|
+
used: {
|
|
14
|
+
used: true,
|
|
15
|
+
getSource() {
|
|
16
|
+
return {
|
|
17
|
+
attribution: '<a href="https://www.openmaptiles.org/" target="_blank">© OpenMapTiles</a> <a href="https://www.openstreetmap.org/about/" target="_blank">© OpenStreetMap contributors</a>',
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
'not used': {
|
|
22
|
+
used: false,
|
|
23
|
+
},
|
|
24
|
+
'also used': {
|
|
25
|
+
used: true,
|
|
26
|
+
getSource() {
|
|
27
|
+
return {
|
|
28
|
+
attribution: '<a href="https://www.openmaptiles.org/" target="_blank">© OpenMapTiles</a> <a href="https://www.imagico.de/" target="_blank">© imagico</a>',
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
})).toEqual([
|
|
35
|
+
'<a href="https://www.openmaptiles.org/" target="_blank">© OpenMapTiles</a>',
|
|
36
|
+
'<a href="https://www.openstreetmap.org/about/" target="_blank">© OpenStreetMap contributors</a>',
|
|
37
|
+
'<a href="https://www.imagico.de/" target="_blank">© imagico</a>',
|
|
38
|
+
]);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
1
|
/* eslint-disable no-underscore-dangle */
|
|
4
|
-
|
|
2
|
+
import { toLonLat } from 'ol/proj';
|
|
5
3
|
/**
|
|
6
4
|
* Return the render function fo the olLayer of a MaplibreLayer
|
|
7
5
|
*/
|
|
8
|
-
function getMapboxRender(mapoxLayer) {
|
|
9
|
-
return
|
|
10
|
-
|
|
6
|
+
export default function getMapboxRender(mapoxLayer) {
|
|
7
|
+
return (frameState) => {
|
|
8
|
+
const { map, mbMap, renderState, olLayer } = mapoxLayer;
|
|
11
9
|
if (!map || !mbMap) {
|
|
12
10
|
return null;
|
|
13
11
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
let changed = false;
|
|
13
|
+
const canvas = mbMap.getCanvas();
|
|
14
|
+
const { viewState } = frameState;
|
|
15
|
+
const visible = olLayer.getVisible();
|
|
18
16
|
if (renderState.visible !== visible) {
|
|
19
17
|
canvas.style.display = visible ? 'block' : 'none';
|
|
20
18
|
renderState.visible = visible;
|
|
@@ -22,13 +20,13 @@ function getMapboxRender(mapoxLayer) {
|
|
|
22
20
|
// Without you don't see others ol layers on top.
|
|
23
21
|
canvas.style.position = 'absolute';
|
|
24
22
|
}
|
|
25
|
-
|
|
23
|
+
const opacity = olLayer.getOpacity();
|
|
26
24
|
if (renderState.opacity !== opacity) {
|
|
27
25
|
canvas.style.opacity = opacity;
|
|
28
26
|
renderState.opacity = opacity;
|
|
29
27
|
}
|
|
30
28
|
// adjust view parameters in mapbox
|
|
31
|
-
|
|
29
|
+
const { rotation } = viewState;
|
|
32
30
|
if (renderState.rotation !== rotation) {
|
|
33
31
|
mbMap.rotateTo((-(rotation || 0) * 180) / Math.PI, {
|
|
34
32
|
animate: false,
|
|
@@ -40,7 +38,7 @@ function getMapboxRender(mapoxLayer) {
|
|
|
40
38
|
renderState.center[0] !== viewState.center[0] ||
|
|
41
39
|
renderState.center[1] !== viewState.center[1]) {
|
|
42
40
|
mbMap.jumpTo({
|
|
43
|
-
center:
|
|
41
|
+
center: toLonLat(viewState.center),
|
|
44
42
|
zoom: viewState.zoom - 1,
|
|
45
43
|
animate: false,
|
|
46
44
|
});
|
|
@@ -48,7 +46,7 @@ function getMapboxRender(mapoxLayer) {
|
|
|
48
46
|
renderState.zoom = viewState.zoom;
|
|
49
47
|
renderState.center = viewState.center;
|
|
50
48
|
}
|
|
51
|
-
|
|
49
|
+
const size = map.getSize();
|
|
52
50
|
if (renderState.size[0] !== size[0] || renderState.size[1] !== size[1]) {
|
|
53
51
|
changed = true;
|
|
54
52
|
renderState.size = size;
|
|
@@ -74,4 +72,3 @@ function getMapboxRender(mapoxLayer) {
|
|
|
74
72
|
return mbMap.getContainer();
|
|
75
73
|
};
|
|
76
74
|
}
|
|
77
|
-
exports.default = getMapboxRender;
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var proj_1 = require("ol/proj");
|
|
4
|
-
var math_1 = require("ol/math");
|
|
1
|
+
import { toLonLat } from 'ol/proj';
|
|
2
|
+
import { toDegrees } from 'ol/math';
|
|
5
3
|
/**
|
|
6
4
|
* Return the render function fo the olLayer of a MaplibreLayer
|
|
7
5
|
*/
|
|
8
|
-
function getMaplibreRender(maplibreLayer) {
|
|
9
|
-
return
|
|
10
|
-
|
|
6
|
+
export default function getMaplibreRender(maplibreLayer) {
|
|
7
|
+
return (frameState) => {
|
|
8
|
+
const { map, mbMap, olLayer } = maplibreLayer;
|
|
11
9
|
if (!map || !mbMap) {
|
|
12
10
|
return null;
|
|
13
11
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
const canvas = mbMap.getCanvas();
|
|
13
|
+
const { viewState } = frameState;
|
|
14
|
+
const opacity = olLayer.getOpacity();
|
|
17
15
|
canvas.style.opacity = opacity;
|
|
18
16
|
// adjust view parameters in mapbox
|
|
19
17
|
mbMap.jumpTo({
|
|
20
|
-
center:
|
|
18
|
+
center: toLonLat(viewState.center),
|
|
21
19
|
zoom: viewState.zoom - 1,
|
|
22
|
-
bearing:
|
|
20
|
+
bearing: toDegrees(-viewState.rotation),
|
|
23
21
|
animate: false,
|
|
24
22
|
});
|
|
25
23
|
if (!canvas.isConnected) {
|
|
@@ -35,4 +33,3 @@ function getMaplibreRender(maplibreLayer) {
|
|
|
35
33
|
return mbMap.getContainer();
|
|
36
34
|
};
|
|
37
35
|
}
|
|
38
|
-
exports.default = getMaplibreRender;
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
1
|
/**
|
|
4
2
|
* Get the websocket channel suffix, depending on the current mode.
|
|
5
3
|
* @param {String} mode Mode 'topographic' ou 'schematic'.
|
|
6
4
|
* @private
|
|
7
5
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
-
exports.default = getModeSuffix;
|
|
6
|
+
const getModeSuffix = (mode, modes) => mode === modes.SCHEMATIC ? '_schematic' : '';
|
|
7
|
+
export default getModeSuffix;
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
1
|
/**
|
|
4
2
|
* Return the styleUrl with apiKey parameters set.
|
|
5
3
|
* @param {string} url a url.
|
|
6
4
|
* @param {Object<String,String>} params a list of key/value pair to add to the url.
|
|
7
5
|
* @ignore
|
|
8
6
|
*/
|
|
9
|
-
|
|
7
|
+
const getUrlWithParams = (url, params) => {
|
|
10
8
|
// Clean requets parameters, removing undefined and null values.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Object.entries(searchParams).forEach(
|
|
14
|
-
var key = _a[0], value = _a[1];
|
|
9
|
+
const newUrl = new URL(url);
|
|
10
|
+
const searchParams = params || {};
|
|
11
|
+
Object.entries(searchParams).forEach(([key, value]) => {
|
|
15
12
|
if (value !== undefined && value !== null) {
|
|
16
13
|
newUrl.searchParams.set(key, value);
|
|
17
14
|
}
|
|
18
15
|
});
|
|
19
16
|
return newUrl;
|
|
20
17
|
};
|
|
21
|
-
|
|
18
|
+
export default getUrlWithParams;
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var GeometryType_1 = require("ol/geom/GeometryType");
|
|
1
|
+
import GeomType from 'ol/geom/GeometryType';
|
|
4
2
|
/**
|
|
5
3
|
* Interpolate or not the vehicle position from a trajectory at a specific date.
|
|
6
4
|
*
|
|
@@ -9,21 +7,20 @@ var GeometryType_1 = require("ol/geom/GeometryType");
|
|
|
9
7
|
* @param {boolean} noInterpolate If true, the vehicle position is not interpolated on each render but only once.
|
|
10
8
|
* @returns
|
|
11
9
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var rotation;
|
|
10
|
+
const getVehiclePosition = (now, trajectory, noInterpolate) => {
|
|
11
|
+
const { time_intervals: timeIntervals, olGeometry: geometry, coordinate, } = trajectory.properties;
|
|
12
|
+
let coord;
|
|
13
|
+
let rotation;
|
|
17
14
|
if (noInterpolate && coordinate) {
|
|
18
15
|
coord = coordinate;
|
|
19
16
|
}
|
|
20
|
-
else if (geometry.getType() ===
|
|
17
|
+
else if (geometry.getType() === GeomType.POINT) {
|
|
21
18
|
coord = geometry.getCoordinates();
|
|
22
19
|
}
|
|
23
|
-
else if (geometry.getType() ===
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
else if (geometry.getType() === GeomType.LINE_STRING) {
|
|
21
|
+
const intervals = timeIntervals || [[]];
|
|
22
|
+
const firstInterval = intervals[0];
|
|
23
|
+
const lastInterval = intervals[intervals.length - 1];
|
|
27
24
|
// Between the last time interval of a trajectory event and the beginning
|
|
28
25
|
// of the new trajectory event, there is few seconds, can be 6 to 30
|
|
29
26
|
// seconds (that's why the vehicle jumps sometimes).
|
|
@@ -32,26 +29,26 @@ var getVehiclePosition = function (now, trajectory, noInterpolate) {
|
|
|
32
29
|
// outside the time intervals we display the vehicle at the last (or first) position known.
|
|
33
30
|
if (now < firstInterval[0]) {
|
|
34
31
|
// Display first position known.
|
|
35
|
-
rotation = firstInterval
|
|
32
|
+
[, , rotation] = firstInterval;
|
|
36
33
|
coord = geometry.getFirstCoordinate();
|
|
37
34
|
}
|
|
38
35
|
else if (now > lastInterval[0]) {
|
|
39
36
|
// Display last position known.
|
|
40
|
-
rotation = lastInterval
|
|
37
|
+
[, , rotation] = lastInterval;
|
|
41
38
|
coord = geometry.getLastCoordinate();
|
|
42
39
|
}
|
|
43
40
|
else {
|
|
44
41
|
// Interpolate position using time intervals.
|
|
45
|
-
for (
|
|
42
|
+
for (let j = 0; j < intervals.length - 1; j += 1) {
|
|
46
43
|
// Rotation only available in realtime layer.
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
const [start, startFrac] = intervals[j];
|
|
45
|
+
const [end, endFrac] = intervals[j + 1];
|
|
49
46
|
if (start <= now && now <= end) {
|
|
50
47
|
// interpolate position inside the time interval.
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
const timeFrac = Math.min((now - start) / (end - start), 1);
|
|
49
|
+
const geomFrac = timeFrac * (endFrac - startFrac) + startFrac;
|
|
53
50
|
coord = geometry.getCoordinateAt(geomFrac);
|
|
54
|
-
|
|
51
|
+
[, , rotation] = intervals[j];
|
|
55
52
|
break;
|
|
56
53
|
}
|
|
57
54
|
}
|
|
@@ -61,6 +58,6 @@ var getVehiclePosition = function (now, trajectory, noInterpolate) {
|
|
|
61
58
|
// eslint-disable-next-line no-console
|
|
62
59
|
console.error('This geometry type is not supported. Only Point or LineString are. Current geometry: ', geometry);
|
|
63
60
|
}
|
|
64
|
-
return { coord
|
|
61
|
+
return { coord, rotation };
|
|
65
62
|
};
|
|
66
|
-
|
|
63
|
+
export default getVehiclePosition;
|
package/common/utils/index.js
CHANGED
|
@@ -1,37 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.trackerConfig = exports.getMapboxRender = exports.getMaplibreRender = exports.renderTrajectories = exports.sortByDelay = exports.getLayersAsFlatArray = exports.createTrackerFilters = exports.removeDuplicate = exports.getMapboxMapCopyrights = exports.getUrlWithParams = void 0;
|
|
18
|
-
var getUrlWithParams_1 = require("./getUrlWithParams");
|
|
19
|
-
Object.defineProperty(exports, "getUrlWithParams", { enumerable: true, get: function () { return getUrlWithParams_1.default; } });
|
|
20
|
-
var getMapboxMapCopyrights_1 = require("./getMapboxMapCopyrights");
|
|
21
|
-
Object.defineProperty(exports, "getMapboxMapCopyrights", { enumerable: true, get: function () { return getMapboxMapCopyrights_1.default; } });
|
|
22
|
-
var removeDuplicate_1 = require("./removeDuplicate");
|
|
23
|
-
Object.defineProperty(exports, "removeDuplicate", { enumerable: true, get: function () { return removeDuplicate_1.default; } });
|
|
24
|
-
var createTrackerFilters_1 = require("./createTrackerFilters");
|
|
25
|
-
Object.defineProperty(exports, "createTrackerFilters", { enumerable: true, get: function () { return createTrackerFilters_1.default; } });
|
|
26
|
-
var getLayersAsFlatArray_1 = require("./getLayersAsFlatArray");
|
|
27
|
-
Object.defineProperty(exports, "getLayersAsFlatArray", { enumerable: true, get: function () { return getLayersAsFlatArray_1.default; } });
|
|
28
|
-
__exportStar(require("./timeUtils"), exports);
|
|
29
|
-
var sortByDelay_1 = require("./sortByDelay");
|
|
30
|
-
Object.defineProperty(exports, "sortByDelay", { enumerable: true, get: function () { return sortByDelay_1.default; } });
|
|
31
|
-
var renderTrajectories_1 = require("./renderTrajectories");
|
|
32
|
-
Object.defineProperty(exports, "renderTrajectories", { enumerable: true, get: function () { return renderTrajectories_1.default; } });
|
|
33
|
-
var getMaplibreRender_1 = require("./getMaplibreRender");
|
|
34
|
-
Object.defineProperty(exports, "getMaplibreRender", { enumerable: true, get: function () { return getMaplibreRender_1.default; } });
|
|
35
|
-
var getMapboxRender_1 = require("./getMapboxRender");
|
|
36
|
-
Object.defineProperty(exports, "getMapboxRender", { enumerable: true, get: function () { return getMapboxRender_1.default; } });
|
|
37
|
-
exports.trackerConfig = require("./trackerConfig");
|
|
1
|
+
export { default as getUrlWithParams } from './getUrlWithParams';
|
|
2
|
+
export { default as getMapboxMapCopyrights } from './getMapboxMapCopyrights';
|
|
3
|
+
export { default as removeDuplicate } from './removeDuplicate';
|
|
4
|
+
export { default as createTrackerFilters } from './createTrackerFilters';
|
|
5
|
+
export { default as getLayersAsFlatArray } from './getLayersAsFlatArray';
|
|
6
|
+
export * from './timeUtils';
|
|
7
|
+
export { default as sortByDelay } from './sortByDelay';
|
|
8
|
+
export { default as renderTrajectories } from './renderTrajectories';
|
|
9
|
+
export { default as getMaplibreRender } from './getMaplibreRender';
|
|
10
|
+
export { default as getMapboxRender } from './getMapboxRender';
|
|
11
|
+
import * as trackerConfig_1 from './trackerConfig';
|
|
12
|
+
export { trackerConfig_1 as trackerConfig };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeDuplicate.d.ts","sourceRoot":"","sources":["../../../src/common/utils/removeDuplicate.js"],"names":[],"mappings":";AAAA;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"removeDuplicate.d.ts","sourceRoot":"","sources":["../../../src/common/utils/removeDuplicate.js"],"names":[],"mappings":";AAAA;;;;;;GAMG;AACH,oDAYC"}
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
3
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
4
|
-
if (ar || !(i in from)) {
|
|
5
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
6
|
-
ar[i] = from[i];
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
1
|
/**
|
|
13
2
|
* This function remove duplicates lower case string value of an array.
|
|
14
3
|
* It removes also null, undefined or non string values.
|
|
@@ -16,15 +5,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
5
|
* @param {array} array Array of values.
|
|
17
6
|
* @ignore
|
|
18
7
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var uniqueLowerCaseValues = __spreadArray([], new Set(lowerCasesValues), true);
|
|
25
|
-
var uniqueValues = uniqueLowerCaseValues.map(function (uniqueStr) {
|
|
26
|
-
return arrWithoutEmptyValues.find(function (str) { return str.toLowerCase() === uniqueStr; });
|
|
27
|
-
});
|
|
8
|
+
const removeDuplicate = (array) => {
|
|
9
|
+
const arrWithoutEmptyValues = array.filter((val) => val !== undefined && val !== null && val.trim && val.trim());
|
|
10
|
+
const lowerCasesValues = arrWithoutEmptyValues.map((str) => str.toLowerCase());
|
|
11
|
+
const uniqueLowerCaseValues = [...new Set(lowerCasesValues)];
|
|
12
|
+
const uniqueValues = uniqueLowerCaseValues.map((uniqueStr) => arrWithoutEmptyValues.find((str) => str.toLowerCase() === uniqueStr));
|
|
28
13
|
return uniqueValues;
|
|
29
14
|
};
|
|
30
|
-
|
|
15
|
+
export default removeDuplicate;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeDuplicate.test.d.ts","sourceRoot":"","sources":["../../../src/common/utils/removeDuplicate.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import removeDuplicate from './removeDuplicate';
|
|
2
|
+
describe('removeDuplicate()', () => {
|
|
3
|
+
test('removes duplicates', () => {
|
|
4
|
+
expect(removeDuplicate([
|
|
5
|
+
'a',
|
|
6
|
+
' ',
|
|
7
|
+
' ',
|
|
8
|
+
'b',
|
|
9
|
+
'a',
|
|
10
|
+
undefined,
|
|
11
|
+
null,
|
|
12
|
+
'A',
|
|
13
|
+
0,
|
|
14
|
+
'c',
|
|
15
|
+
'b',
|
|
16
|
+
'B',
|
|
17
|
+
])).toEqual(['a', 'b', 'c']);
|
|
18
|
+
});
|
|
19
|
+
});
|