From b875da9f84e3f6604503063e8141c4f43a51992d Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Tue, 16 Jun 2020 11:34:31 +0200 Subject: [PATCH 01/36] Fix pixel ratio --- doc/index.html | 4 ++-- src/mapbox/layers/TrackerLayer.js | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/index.html b/doc/index.html index 3f7f4fd4..8eac573f 100644 --- a/doc/index.html +++ b/doc/index.html @@ -4733,7 +4733,7 @@

Example
-
import { StopsAPI } from 'mobility-toolbox-js/api';
+
import { StopsAPI } from 'mobility-toolbox-js/src/api';
@@ -4881,7 +4881,7 @@

Example
-
import { TrajservAPI } from 'mobility-toolbox-js/api';
+
import { TrajservAPI } from 'mobility-toolbox-js/src/api';
diff --git a/src/mapbox/layers/TrackerLayer.js b/src/mapbox/layers/TrackerLayer.js index f2b02d6c..e3f25855 100644 --- a/src/mapbox/layers/TrackerLayer.js +++ b/src/mapbox/layers/TrackerLayer.js @@ -92,9 +92,10 @@ class TrackerLayer extends Layer { width, height, getPixelFromCoordinate: (coord) => { + const pixelRatio = window.devicePixelRatio || 1; const [lng, lat] = toLonLat(coord); const { x, y } = this.map.project({ lng, lat }); - return [x, y]; + return [x * pixelRatio, y * pixelRatio]; }, }); this.tracker.setStyle((props, r) => this.style(props, r)); From a0c3d52d5e8bd894f8b8bcc9ac67a92e0d713227 Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Tue, 16 Jun 2020 12:04:51 +0200 Subject: [PATCH 02/36] v1.0.0-beta.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9aab6c1d..84dae64f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mobility-toolbox-js", "license": "MIT", - "version": "1.0.0-beta.3", + "version": "1.0.0-beta.4", "main": "build/index.js", "module": "src/index.js", "files": [ From bec6f3a3b368c490513ff3df625079643860dad4 Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Wed, 17 Jun 2020 09:14:07 +0200 Subject: [PATCH 03/36] Fix trajectories.length is undefined error --- src/common/Tracker.js | 4 ++-- src/mapbox/layers/TrackerLayer.js | 2 +- src/ol/layers/TrackerLayer.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/Tracker.js b/src/common/Tracker.js index 176831eb..d0361a93 100644 --- a/src/common/Tracker.js +++ b/src/common/Tracker.js @@ -51,7 +51,7 @@ export default class Tracker { * Define the trajectories. * @param {array} trajectories */ - setTrajectories(trajectories) { + setTrajectories(trajectories = []) { if (this.sort) { trajectories.sort(this.sort); } @@ -127,7 +127,7 @@ export default class Tracker { let hoverVehicleImg; let hoverVehiclePx; - for (let i = this.trajectories.length - 1; i >= 0; i -= 1) { + for (let i = (this.trajectories || []).length - 1; i >= 0; i -= 1) { const traj = this.trajectories[i]; // We simplify the traj object diff --git a/src/mapbox/layers/TrackerLayer.js b/src/mapbox/layers/TrackerLayer.js index e3f25855..cbab3ab5 100644 --- a/src/mapbox/layers/TrackerLayer.js +++ b/src/mapbox/layers/TrackerLayer.js @@ -283,7 +283,7 @@ class TrackerLayer extends Layer { const ext = buffer([...coordinate, ...coordinate], 10 * resolution); const trajectories = this.tracker.getTrajectories(); const vehicles = []; - for (let i = 0; i < trajectories.length; i += 1) { + for (let i = 0; i < (this.trajectories || []).length; i += 1) { if ( trajectories[i].coordinate && containsCoordinate(ext, trajectories[i].coordinate) diff --git a/src/ol/layers/TrackerLayer.js b/src/ol/layers/TrackerLayer.js index 0c690cdb..f379dc49 100644 --- a/src/ol/layers/TrackerLayer.js +++ b/src/ol/layers/TrackerLayer.js @@ -277,7 +277,7 @@ class TrackerLayer extends Layer { const ext = buffer([...coordinate, ...coordinate], 10 * res); const trajectories = this.tracker.getTrajectories(); const vehicles = []; - for (let i = 0; i < trajectories.length; i += 1) { + for (let i = 0; i < (this.trajectories || []).length; i += 1) { if ( trajectories[i].coordinate && containsCoordinate(ext, trajectories[i].coordinate) From 7f380135854b1fdaaaeb20c13b8d3c4385867b25 Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Wed, 17 Jun 2020 09:14:39 +0200 Subject: [PATCH 04/36] v1.0.0-beta.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 84dae64f..65cebeb8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mobility-toolbox-js", "license": "MIT", - "version": "1.0.0-beta.4", + "version": "1.0.0-beta.5", "main": "build/index.js", "module": "src/index.js", "files": [ From c94a6f768b37b0078734e2ba9add342956f35197 Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Thu, 18 Jun 2020 11:03:54 +0200 Subject: [PATCH 05/36] Use web worker for mouse over --- .neutrinorc.js | 24 +++++++++++++++++++ doc/index.html | 4 ++-- package.json | 3 ++- src/mapbox/layers/TrackerLayer.js | 33 +++++++++++++------------- src/mapbox/layers/TrajservLayer.js | 12 +++++----- src/ol/layers/TrackerLayer.js | 38 ++++++++++++++++++++---------- yarn.lock | 18 +++++++++++++- 7 files changed, 92 insertions(+), 40 deletions(-) diff --git a/.neutrinorc.js b/.neutrinorc.js index 067c17b5..962760e5 100644 --- a/.neutrinorc.js +++ b/.neutrinorc.js @@ -19,6 +19,18 @@ if (process.env.REACT_APP_LIB_MODE) { }, }, use: [ + (neutrino) => { + neutrino.config.output + .globalObject('this') // will prevent `window` + .end() + .module.rule('worker') + .test(neutrino.regexFromExtensions(['worker.js'])) + .use('worker') + .loader(require.resolve('worker-loader')) + .options({ + // See: https://github.com/webpack-contrib/worker-loader#options + }); + }, library({ name: 'mobility-toolbox-js', }), @@ -83,6 +95,18 @@ if (process.env.REACT_APP_LIB_MODE) { }, ], }), + (neutrino) => { + neutrino.config.output + .globalObject('this') // will prevent `window` + .end() + .module.rule('worker') + .test(neutrino.regexFromExtensions(['worker.js'])) + .use('worker') + .loader(require.resolve('worker-loader')) + .options({ + // See: https://github.com/webpack-contrib/worker-loader#options + }); + }, ], }; } diff --git a/doc/index.html b/doc/index.html index 8eac573f..4447e0cf 100644 --- a/doc/index.html +++ b/doc/index.html @@ -2,7 +2,7 @@ - mobility-toolbox-js 1.0.0-beta.3 | Documentation + mobility-toolbox-js 1.0.0-beta.5 | Documentation @@ -14,7 +14,7 @@

mobility-toolbox-js

-
1.0.0-beta.3
+
1.0.0-beta.5
{ + const [vehicle] = e.data; + // eslint-disable-next-line no-console + console.log(vehicle); + this.map.getContainer().style.cursor = vehicle ? 'pointer' : 'auto'; + this.tracker.setHoverVehicleId(vehicle && vehicle.id); + }; } /** @@ -279,20 +285,13 @@ class TrackerLayer extends Layer { * @private */ getVehiclesAtCoordinate(coordinate) { - const resolution = getResolution(this.map); - const ext = buffer([...coordinate, ...coordinate], 10 * resolution); - const trajectories = this.tracker.getTrajectories(); - const vehicles = []; - for (let i = 0; i < (this.trajectories || []).length; i += 1) { - if ( - trajectories[i].coordinate && - containsCoordinate(ext, trajectories[i].coordinate) - ) { - vehicles.push(trajectories[i]); - } - } + const res = getResolution(this.map); - return vehicles; + // const ext = buffer([...coordinate, ...coordinate], 10 * res); + const trajectories = this.tracker.getTrajectories(); + this.getVehicleAtCoordinateWorker.postMessage( + JSON.stringify([trajectories, coordinate, res]), + ); } /** diff --git a/src/mapbox/layers/TrajservLayer.js b/src/mapbox/layers/TrajservLayer.js index 29ba488e..8ee8d947 100644 --- a/src/mapbox/layers/TrajservLayer.js +++ b/src/mapbox/layers/TrajservLayer.js @@ -165,12 +165,12 @@ class MapboxTrajservLayer extends TrackerLayer { const { regexPublishedLineName } = this.options; if (lineParam || routeParam || opParam || regexPublishedLineName) { - this.filterFc = MapboxTrajservLayer.createFilter( - lineParam ? lineParam.split(',') : undefined, - routeParam ? routeParam.split(',') : undefined, - opParam ? opParam.split(',') : undefined, - regexPublishedLineName, - ); + // this.filterFc = MapboxTrajservLayer.createFilter( + // lineParam ? lineParam.split(',') : undefined, + // routeParam ? routeParam.split(',') : undefined, + // opParam ? opParam.split(',') : undefined, + // regexPublishedLineName, + // ); } else { this.filterFc = null; } diff --git a/src/ol/layers/TrackerLayer.js b/src/ol/layers/TrackerLayer.js index f379dc49..549d8d60 100644 --- a/src/ol/layers/TrackerLayer.js +++ b/src/ol/layers/TrackerLayer.js @@ -1,9 +1,9 @@ import OLLayer from 'ol/layer/Layer'; import { unByKey } from 'ol/Observable'; -import { buffer, containsCoordinate } from 'ol/extent'; import Layer from './Layer'; import Tracker from '../../common/Tracker'; import { timeSteps } from '../../common/trackerConfig'; +import GetVehicleAtCoordinateW from '../../common/workers/getVehicleAtCoordinate.worker'; /** * Responsible for loading tracker data. @@ -99,6 +99,7 @@ class TrackerLayer extends Layer { if (!this.map) { return; } + this.getVehicleAtCoordinateWorker = new GetVehicleAtCoordinateW(); this.tracker = new Tracker({ getPixelFromCoordinate: this.map.getPixelFromCoordinate.bind(this.map), @@ -198,11 +199,20 @@ class TrackerLayer extends Layer { if (this.map.getView().getInteracting() || !this.isHoverActive) { return; } + this.getVehiclesAtCoordinate(evt.coordinate); const [vehicle] = this.getVehiclesAtCoordinate(evt.coordinate); this.map.getTargetElement().style.cursor = vehicle ? 'pointer' : 'auto'; this.tracker.setHoverVehicleId(vehicle && vehicle.id); }), ]; + + this.getVehicleAtCoordinateWorker.onmessage = (e) => { + const [vehicle] = e.data; + // eslint-disable-next-line no-console + console.log(vehicle); + this.map.getTargetElement().style.cursor = vehicle ? 'pointer' : 'auto'; + this.tracker.setHoverVehicleId(vehicle && vehicle.id); + }; } /** @@ -274,19 +284,21 @@ class TrackerLayer extends Layer { */ getVehiclesAtCoordinate(coordinate) { const res = this.map.getView().getResolution(); - const ext = buffer([...coordinate, ...coordinate], 10 * res); const trajectories = this.tracker.getTrajectories(); - const vehicles = []; - for (let i = 0; i < (this.trajectories || []).length; i += 1) { - if ( - trajectories[i].coordinate && - containsCoordinate(ext, trajectories[i].coordinate) - ) { - vehicles.push(trajectories[i]); - } - } - - return vehicles; + this.getVehicleAtCoordinateWorker.postMessage( + JSON.stringify([trajectories, coordinate, res]), + ); + // const vehicles = []; + // for (let i = 0; i < (trajectories || []).length; i += 1) { + // if ( + // trajectories[i].coordinate && + // containsCoordinate(ext, trajectories[i].coordinate) + // ) { + // vehicles.push(trajectories[i]); + // } + // } + + // return vehicles; } /** diff --git a/yarn.lock b/yarn.lock index 6fe7cb2b..360b747c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8298,7 +8298,7 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.0, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -11441,6 +11441,14 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" +schema-utils@^0.4.0: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -13687,6 +13695,14 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" +worker-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-2.0.0.tgz#45fda3ef76aca815771a89107399ee4119b430ac" + integrity sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw== + dependencies: + loader-utils "^1.0.0" + schema-utils "^0.4.0" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" From 7ae8b453f681f6c2a657ffb595898347602ff52e Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Thu, 18 Jun 2020 11:51:27 +0200 Subject: [PATCH 06/36] Use web worker for mouse over --- .../workers/getVehicleAtCoordinate.worker.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/common/workers/getVehicleAtCoordinate.worker.js diff --git a/src/common/workers/getVehicleAtCoordinate.worker.js b/src/common/workers/getVehicleAtCoordinate.worker.js new file mode 100644 index 00000000..9fff37b9 --- /dev/null +++ b/src/common/workers/getVehicleAtCoordinate.worker.js @@ -0,0 +1,26 @@ +import { buffer, containsCoordinate } from 'ol/extent'; + +const getVehicleAtCoordinate = (e) => { + // console.log('Worker: Message received from main script', e.data); + try { + const [trajectories, coordinate, resolution] = JSON.parse(e.data); + const ext = buffer([...coordinate, ...coordinate], 10 * resolution); + const vehicles = []; + for (let i = 0; i < (trajectories || []).length; i += 1) { + if ( + trajectories[i].coordinate && + containsCoordinate(ext, trajectories[i].coordinate) + ) { + vehicles.push(trajectories[i]); + } + } + + postMessage(vehicles); + } catch (err) { + // eslint-disable-next-line no-console + console.log('Error', err); + } +}; + +// eslint-disable-next-line no-restricted-globals +self.addEventListener('message', getVehicleAtCoordinate); From 9bf41e38e16c93401c554410479fdb7257f4a395 Mon Sep 17 00:00:00 2001 From: Olivier Terral Date: Thu, 18 Jun 2020 14:14:01 +0200 Subject: [PATCH 07/36] Fix blurry icon --- doc/index.html | 4 ++-- package.json | 2 +- src/doc/components/Documentation.js | 2 +- src/doc/examples/mapboxtracker.js | 4 ++-- src/mapbox/layers/TrackerLayer.js | 2 +- src/mapbox/layers/TrajservLayer.js | 4 +++- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/index.html b/doc/index.html index 4447e0cf..b63d5549 100644 --- a/doc/index.html +++ b/doc/index.html @@ -2,7 +2,7 @@ - mobility-toolbox-js 1.0.0-beta.5 | Documentation + mobility-toolbox-js 1.0.0-beta.6 | Documentation @@ -14,7 +14,7 @@

mobility-toolbox-js

-
1.0.0-beta.5
+
1.0.0-beta.6
{ return (
-