mobility-toolbox-js 2.0.0-beta.1 → 2.0.0-beta.6

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.
Files changed (303) hide show
  1. package/.babelrc +6 -0
  2. package/.esdoc.json +17 -0
  3. package/.eslintignore +1 -0
  4. package/.github/workflows/conventional-pr-title.yml +21 -0
  5. package/.github/workflows/cypress.yml +29 -0
  6. package/.github/workflows/nodejs.yml +28 -0
  7. package/.husky/commit-msg +4 -0
  8. package/.husky/post-checkout +4 -0
  9. package/.husky/post-merge +4 -0
  10. package/.husky/post-rebase +4 -0
  11. package/.husky/pre-commit +4 -0
  12. package/.neutrinorc.js +176 -0
  13. package/.nvmrc +1 -0
  14. package/CHANGELOG.md +10 -0
  15. package/LICENSE +21 -0
  16. package/Layer.js +2 -0
  17. package/Layer.js.map +7 -0
  18. package/README.md +7 -4
  19. package/__mocks__/mapbox-gl.js +81 -0
  20. package/__mocks__/maplibre-gl.js +81 -0
  21. package/commitlint.config.js +1 -0
  22. package/cypress/fixtures/example.json +5 -0
  23. package/cypress/integration/examples/api.spec.js +7 -0
  24. package/cypress/integration/examples/examples.spec.js +7 -0
  25. package/cypress/integration/examples/navigation.spec.js +29 -0
  26. package/cypress/plugins/index.js +21 -0
  27. package/cypress/support/commands.js +25 -0
  28. package/cypress/support/index.js +20 -0
  29. package/cypress.json +4 -0
  30. package/data/fetchRoute.json +292 -0
  31. package/data/fetchTrajectories.json +18 -0
  32. package/data/fetchTrajectoryById.json +3 -0
  33. package/data/fetchTrajectoryStations.json +18 -0
  34. package/data/stopsSearch.json +15 -0
  35. package/documentation.yml +4 -0
  36. package/esdoc/README.md +27 -0
  37. package/esdoc/plugins/MyPlugin.js +69 -0
  38. package/esdoc/plugins/dynamic-property-plugin/Plugin.js +50 -0
  39. package/esdoc/plugins/externals-plugin/Plugin.js +45 -0
  40. package/esdoc/plugins/externals-plugin/externals.js +96 -0
  41. package/global-setup.js +3 -0
  42. package/{ol/README.md → index.html} +0 -0
  43. package/indexweb.html +49 -0
  44. package/jest.config.js +5 -0
  45. package/package.json +34 -13
  46. package/pull_request_template.md +17 -0
  47. package/renovate.json +4 -0
  48. package/scripts/read-pkg-json.js +22 -0
  49. package/{api → src/api}/index.js +0 -1
  50. package/{api → src/api}/routing/RoutingAPI.js +0 -0
  51. package/{api → src/api}/routing/RoutingAPI.test.js +0 -0
  52. package/{api → src/api}/stops/StopsAPI.js +0 -0
  53. package/{api → src/api}/stops/StopsAPI.test.js +0 -0
  54. package/{api → src/api}/tralis/TralisAPI.js +1 -1
  55. package/{api → src/api}/tralis/TralisAPI.test.js +0 -0
  56. package/{api → src/api}/tralis/TralisAPIUtils.js +0 -0
  57. package/{api → src/api}/tralis/WebSocketConnector.js +0 -0
  58. package/{api → src/api}/tralis/WebSocketConnector.test.js +0 -0
  59. package/{api → src/api}/tralis/typedefs.js +0 -0
  60. package/src/assets/Lato-Black.ttf +0 -0
  61. package/src/assets/Lato-BlackItalic.ttf +0 -0
  62. package/src/assets/Lato-Bold.ttf +0 -0
  63. package/src/assets/Lato-BoldItalic.ttf +0 -0
  64. package/src/assets/Lato-Italic.ttf +0 -0
  65. package/src/assets/Lato-Light.ttf +0 -0
  66. package/src/assets/Lato-LightItalic.ttf +0 -0
  67. package/src/assets/Lato-Regular.ttf +0 -0
  68. package/src/assets/Lato-Thin.ttf +0 -0
  69. package/src/assets/Lato-ThinItalic.ttf +0 -0
  70. package/src/assets/OFL.txt +93 -0
  71. package/{common → src/common}/Tracker.js +0 -0
  72. package/{common → src/common}/api/api.js +0 -0
  73. package/{common → src/common}/api/api.test.js +0 -0
  74. package/{common → src/common}/controls/Control.js +4 -1
  75. package/{common → src/common}/controls/Control.test.js +0 -0
  76. package/{common → src/common}/layers/Layer.js +18 -49
  77. package/{common → src/common}/layers/Layer.test.js +2 -106
  78. package/{common → src/common}/mixins/CopyrightMixin.js +0 -0
  79. package/{common → src/common}/mixins/SearchMixin.js +1 -1
  80. package/{common/mixins/TrackerLayerMixin.js → src/common/mixins/TralisLayerMixin.js} +380 -195
  81. package/src/common/styles/index.js +4 -0
  82. package/{common/utils/delayTrackerStyle.js → src/common/styles/trackerDefaultStyle.js} +8 -8
  83. package/src/common/styles/trackerDelayStyle.js +17 -0
  84. package/src/common/styles/trackerSimpleStyle.js +22 -0
  85. package/{common → src/common}/trackerConfig.js +0 -0
  86. package/{common → src/common}/trackerConfig.test.js +0 -13
  87. package/{common → src/common}/typedefs.js +0 -0
  88. package/{common → src/common}/utils/createTrackerFilters.js +0 -0
  89. package/{common → src/common}/utils/createTrackerFilters.test.js +0 -0
  90. package/{common → src/common}/utils/getMapboxMapCopyrights.js +1 -0
  91. package/{common → src/common}/utils/getMapboxMapCopyrights.test.js +0 -0
  92. package/{common → src/common}/utils/getMapboxStyleUrl.js +0 -0
  93. package/{common → src/common}/utils/getVehiclePosition.js +0 -0
  94. package/{common → src/common}/utils/index.js +2 -3
  95. package/{common → src/common}/utils/removeDuplicate.js +0 -0
  96. package/{common → src/common}/utils/removeDuplicate.test.js +0 -0
  97. package/src/common/utils/sortByDelay.js +23 -0
  98. package/{common → src/common}/utils/timeUtils.js +0 -0
  99. package/{common → src/common}/utils/timeUtils.test.js +0 -0
  100. package/src/doc/App.js +116 -0
  101. package/src/doc/App.scss +51 -0
  102. package/src/doc/_redirects +2 -0
  103. package/src/doc/components/CodeSandboxButton.js +103 -0
  104. package/src/doc/components/Documentation.js +40 -0
  105. package/src/doc/components/Esdoc/Anchor.js +57 -0
  106. package/src/doc/components/Esdoc/ClassDoc.js +272 -0
  107. package/src/doc/components/Esdoc/DeprecatedHTML.js +16 -0
  108. package/src/doc/components/Esdoc/DetailDocs.js +281 -0
  109. package/src/doc/components/Esdoc/DetailHTML.js +33 -0
  110. package/src/doc/components/Esdoc/DirectSubclassHTML.js +30 -0
  111. package/src/doc/components/Esdoc/DocBuilderUtils.js +694 -0
  112. package/src/doc/components/Esdoc/DocLinkHTML.js +62 -0
  113. package/src/doc/components/Esdoc/DocsLinkHTML.js +38 -0
  114. package/src/doc/components/Esdoc/Esdoc.js +63 -0
  115. package/src/doc/components/Esdoc/EsdocContent.js +51 -0
  116. package/src/doc/components/Esdoc/EsdocNavigation.js +13 -0
  117. package/src/doc/components/Esdoc/EsdocSearch.js +81 -0
  118. package/src/doc/components/Esdoc/ExperimentalHTML.js +17 -0
  119. package/src/doc/components/Esdoc/ExtendsChainHTML.js +32 -0
  120. package/src/doc/components/Esdoc/FileDocLinkHTML.js +60 -0
  121. package/src/doc/components/Esdoc/IdentifiersDoc.js +113 -0
  122. package/src/doc/components/Esdoc/IndirectSubclassHTML.js +30 -0
  123. package/src/doc/components/Esdoc/InheritedSummaryDoc.js +70 -0
  124. package/src/doc/components/Esdoc/InheritedSummaryHTML.js +38 -0
  125. package/src/doc/components/Esdoc/MixinClassesHTML.js +29 -0
  126. package/src/doc/components/Esdoc/NavDoc.js +112 -0
  127. package/src/doc/components/Esdoc/OverrideMethod.js +44 -0
  128. package/src/doc/components/Esdoc/OverrideMethodDescription.js +35 -0
  129. package/src/doc/components/Esdoc/Properties.js +89 -0
  130. package/src/doc/components/Esdoc/README.md +45 -0
  131. package/src/doc/components/Esdoc/SignatureHTML.js +123 -0
  132. package/src/doc/components/Esdoc/SingleDoc.js +31 -0
  133. package/src/doc/components/Esdoc/SummaryDoc.js +160 -0
  134. package/src/doc/components/Esdoc/SummaryHTML.js +96 -0
  135. package/src/doc/components/Esdoc/TypeDocLinkHTML.js +249 -0
  136. package/src/doc/components/Esdoc/css/identifiers.css +38 -0
  137. package/src/doc/components/Esdoc/css/search.css +76 -0
  138. package/src/doc/components/Esdoc/css/style.css +603 -0
  139. package/src/doc/components/Esdoc/index.js +7 -0
  140. package/src/doc/components/Example.js +153 -0
  141. package/src/doc/components/Examples.js +183 -0
  142. package/src/doc/components/Home.js +106 -0
  143. package/src/doc/components/TrackerExample.js +38 -0
  144. package/src/doc/components/esm.min.js +2 -0
  145. package/src/doc/components/examples/assets/tralis-live-map/index.js +11 -0
  146. package/src/doc/components/examples/assets/tralis-live-map/s1kreis.svg +105 -0
  147. package/src/doc/components/examples/assets/tralis-live-map/s20kreis.svg +101 -0
  148. package/src/doc/components/examples/assets/tralis-live-map/s2kreis.svg +95 -0
  149. package/src/doc/components/examples/assets/tralis-live-map/s3kreis.svg +95 -0
  150. package/src/doc/components/examples/assets/tralis-live-map/s4kreis.svg +95 -0
  151. package/src/doc/components/examples/assets/tralis-live-map/s6kreis.svg +95 -0
  152. package/src/doc/components/examples/assets/tralis-live-map/s7kreis.svg +95 -0
  153. package/src/doc/components/examples/assets/tralis-live-map/s8kreis.svg +93 -0
  154. package/src/doc/components/examples/assets/tralis-live-map/unknown.svg +107 -0
  155. package/src/doc/components/examples/mb-copyright.html +26 -0
  156. package/src/doc/components/examples/mb-copyright.js +37 -0
  157. package/src/doc/components/examples/mb-tracker.html +1 -0
  158. package/src/doc/components/examples/mb-tracker.js +39 -0
  159. package/src/doc/components/examples/mb-tracker.md +1 -0
  160. package/src/doc/components/examples/mb-tralis.html +1 -0
  161. package/src/doc/components/examples/mb-tralis.js +34 -0
  162. package/src/doc/components/examples/ol-copyright.html +26 -0
  163. package/src/doc/components/examples/ol-copyright.js +43 -0
  164. package/src/doc/components/examples/ol-mapbox-layer.html +1 -0
  165. package/src/doc/components/examples/ol-mapbox-layer.js +28 -0
  166. package/src/doc/components/examples/ol-mapbox-layer.md +0 -0
  167. package/src/doc/components/examples/ol-mapbox-style-layer.html +12 -0
  168. package/src/doc/components/examples/ol-mapbox-style-layer.js +44 -0
  169. package/src/doc/components/examples/ol-query.html +32 -0
  170. package/src/doc/components/examples/ol-query.js +83 -0
  171. package/src/doc/components/examples/ol-routing.html +26 -0
  172. package/src/doc/components/examples/ol-routing.js +59 -0
  173. package/src/doc/components/examples/ol-routing.md +1 -0
  174. package/src/doc/components/examples/ol-stop-finder.html +15 -0
  175. package/src/doc/components/examples/ol-stop-finder.js +31 -0
  176. package/src/doc/components/examples/ol-stop-finder.md +1 -0
  177. package/src/doc/components/examples/ol-tracker.html +1 -0
  178. package/src/doc/components/examples/ol-tracker.js +44 -0
  179. package/src/doc/components/examples/ol-tracker.md +1 -0
  180. package/src/doc/components/examples/ol-tralis.html +5 -0
  181. package/src/doc/components/examples/ol-tralis.js +57 -0
  182. package/src/doc/components/examples/tralis-live-map.html +1 -0
  183. package/src/doc/components/examples/tralis-live-map.js +51 -0
  184. package/src/doc/components/examples/tralis-live-map.md +3 -0
  185. package/src/doc/examples/assets/tralis-live-map/index.js +11 -0
  186. package/src/doc/examples/assets/tralis-live-map/s1kreis.svg +105 -0
  187. package/src/doc/examples/assets/tralis-live-map/s20kreis.svg +101 -0
  188. package/src/doc/examples/assets/tralis-live-map/s2kreis.svg +95 -0
  189. package/src/doc/examples/assets/tralis-live-map/s3kreis.svg +95 -0
  190. package/src/doc/examples/assets/tralis-live-map/s4kreis.svg +95 -0
  191. package/src/doc/examples/assets/tralis-live-map/s6kreis.svg +95 -0
  192. package/src/doc/examples/assets/tralis-live-map/s7kreis.svg +95 -0
  193. package/src/doc/examples/assets/tralis-live-map/s8kreis.svg +93 -0
  194. package/src/doc/examples/assets/tralis-live-map/unknown.svg +107 -0
  195. package/src/doc/examples/mb-copyright.html +26 -0
  196. package/src/doc/examples/mb-copyright.js +37 -0
  197. package/src/doc/examples/mb-tracker.html +1 -0
  198. package/src/doc/examples/mb-tracker.js +39 -0
  199. package/src/doc/examples/mb-tracker.md +1 -0
  200. package/src/doc/examples/mb-tralis.html +1 -0
  201. package/src/doc/examples/mb-tralis.js +34 -0
  202. package/src/doc/examples/ol-copyright.html +26 -0
  203. package/src/doc/examples/ol-copyright.js +43 -0
  204. package/src/doc/examples/ol-mapbox-layer.html +1 -0
  205. package/src/doc/examples/ol-mapbox-layer.js +28 -0
  206. package/src/doc/examples/ol-mapbox-layer.md +0 -0
  207. package/src/doc/examples/ol-mapbox-style-layer.html +12 -0
  208. package/src/doc/examples/ol-mapbox-style-layer.js +44 -0
  209. package/src/doc/examples/ol-query.html +32 -0
  210. package/src/doc/examples/ol-query.js +83 -0
  211. package/src/doc/examples/ol-routing.html +26 -0
  212. package/src/doc/examples/ol-routing.js +59 -0
  213. package/src/doc/examples/ol-routing.md +1 -0
  214. package/src/doc/examples/ol-stop-finder.html +15 -0
  215. package/src/doc/examples/ol-stop-finder.js +31 -0
  216. package/src/doc/examples/ol-stop-finder.md +1 -0
  217. package/src/doc/examples/ol-tracker.html +1 -0
  218. package/src/doc/examples/ol-tracker.js +44 -0
  219. package/src/doc/examples/ol-tracker.md +1 -0
  220. package/src/doc/examples/ol-tralis.html +5 -0
  221. package/src/doc/examples/ol-tralis.js +57 -0
  222. package/src/doc/examples/tralis-live-map.html +1 -0
  223. package/src/doc/examples/tralis-live-map.js +51 -0
  224. package/src/doc/examples/tralis-live-map.md +3 -0
  225. package/src/doc/examples.js +107 -0
  226. package/src/doc/img/examples/live_tracker_mb.jpg +0 -0
  227. package/src/doc/img/examples/live_tracker_munich.jpg +0 -0
  228. package/src/doc/img/examples/live_tracker_ol.jpg +0 -0
  229. package/src/doc/img/examples/mapbox.jpg +0 -0
  230. package/src/doc/img/examples/mapbox_style.jpg +0 -0
  231. package/src/doc/img/examples/ol-copyright.png +0 -0
  232. package/src/doc/img/examples/query_objects.jpg +0 -0
  233. package/src/doc/img/examples/routing.jpg +0 -0
  234. package/src/doc/img/examples/simple_map.jpg +0 -0
  235. package/src/doc/img/examples/stops.jpg +0 -0
  236. package/src/doc/img/favico.ico +0 -0
  237. package/src/doc/index.js +21 -0
  238. package/src/iife.js +7 -0
  239. package/{module.js → src/index.js} +3 -9
  240. package/{mapbox → src/mapbox}/controls/CopyrightControl.js +5 -1
  241. package/{mapbox → src/mapbox}/index.js +0 -2
  242. package/{mapbox → src/mapbox}/layers/Layer.js +0 -0
  243. package/{mapbox → src/mapbox}/layers/Layer.test.js +2 -2
  244. package/{mapbox/layers/TrackerLayer.js → src/mapbox/layers/TralisLayer.js} +71 -24
  245. package/src/mapbox/layers/TralisLayer.test.js +40 -0
  246. package/{mapbox → src/mapbox}/utils.js +0 -0
  247. package/src/ol/README.md +0 -0
  248. package/{ol → src/ol}/controls/CopyrightControl.js +4 -4
  249. package/{ol → src/ol}/controls/CopyrightControl.test.js +16 -16
  250. package/{ol → src/ol}/controls/RoutingControl.js +9 -7
  251. package/{ol → src/ol}/controls/RoutingControl.test.js +1 -1
  252. package/{ol → src/ol}/controls/StopFinderControl.js +8 -6
  253. package/{ol → src/ol}/controls/StopFinderControl.test.js +1 -1
  254. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen10.json +0 -0
  255. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen100.json +0 -0
  256. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen30.json +0 -0
  257. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen5.json +0 -0
  258. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteOSM.json +0 -0
  259. package/{ol → src/ol}/controls/snapshots/RoutingControlStation1.json +0 -0
  260. package/{ol → src/ol}/controls/snapshots/RoutingControlStation2.json +0 -0
  261. package/{ol → src/ol}/index.js +3 -3
  262. package/{ol → src/ol}/layers/Layer.js +9 -0
  263. package/{ol → src/ol}/layers/Layer.test.js +22 -7
  264. package/{ol → src/ol}/layers/MapboxLayer.js +39 -44
  265. package/{ol → src/ol}/layers/MapboxLayer.test.js +5 -5
  266. package/{ol → src/ol}/layers/MapboxStyleLayer.js +0 -6
  267. package/{ol → src/ol}/layers/MapboxStyleLayer.test.js +22 -6
  268. package/src/ol/layers/MaplibreLayer.js +280 -0
  269. package/{ol → src/ol}/layers/RoutingLayer.js +0 -0
  270. package/{ol → src/ol}/layers/RoutingLayer.test.js +1 -1
  271. package/{ol/layers/TrackerLayer.js → src/ol/layers/TralisLayer.js} +96 -33
  272. package/{ol → src/ol}/layers/TralisLayer.test.js +1 -49
  273. package/{ol → src/ol}/layers/VectorLayer.js +0 -0
  274. package/{ol → src/ol}/layers/VectorLayer.test.js +1 -1
  275. package/{ol → src/ol}/layers/WMSLayer.js +0 -0
  276. package/{ol → src/ol}/layers/WMSLayer.test.js +6 -2
  277. package/src/ol/styles/fullTrajectoryDelayStyle.js +35 -0
  278. package/src/ol/styles/fullTrajectoryStyle.js +51 -0
  279. package/src/ol/styles/index.js +2 -0
  280. package/src/setupTests.js +15 -0
  281. package/webpack.config.js +6 -0
  282. package/api/trajserv/TrajservAPI.js +0 -71
  283. package/api/trajserv/TrajservAPI.test.js +0 -171
  284. package/api/trajserv/TrajservAPIUtils.js +0 -191
  285. package/api/trajserv/TrajservAPIUtils.test.js +0 -40
  286. package/api/trajserv/typedefs.js +0 -44
  287. package/common/mixins/MapMixin.js +0 -103
  288. package/common/mixins/TrajservLayerMixin.js +0 -544
  289. package/common/mixins/TralisLayerMixin.js +0 -402
  290. package/common/utils/simpleTrackerStyle.js +0 -18
  291. package/index.js +0 -2
  292. package/index.js.map +0 -1
  293. package/mapbox/Map.js +0 -87
  294. package/mapbox/layers/TrackerLayer.test.js +0 -68
  295. package/mapbox/layers/TrajservLayer.js +0 -114
  296. package/mapbox/layers/TrajservLayer.test.js +0 -90
  297. package/mapbox/layers/TralisLayer.js +0 -64
  298. package/ol/Map.js +0 -109
  299. package/ol/Map.test.js +0 -34
  300. package/ol/layers/TrackerLayer.test.js +0 -70
  301. package/ol/layers/TrajservLayer.js +0 -190
  302. package/ol/layers/TrajservLayer.test.js +0 -113
  303. package/ol/layers/TralisLayer.js +0 -177
@@ -1,402 +0,0 @@
1
- /* eslint-disable no-empty-function */
2
- /* eslint-disable no-useless-constructor */
3
- /* eslint-disable no-unused-vars */
4
- /* eslint-disable class-methods-use-this */
5
- /* eslint-disable max-classes-per-file */
6
- import GeoJSON from 'ol/format/GeoJSON';
7
- import Point from 'ol/geom/Point';
8
- import { intersects } from 'ol/extent';
9
- import { fromLonLat } from 'ol/proj';
10
- import { TralisAPI, TralisModes } from '../../api';
11
-
12
- /**
13
- * TralisLayerInterface.
14
- */
15
- export class TralisLayerInterface {
16
- /*
17
- * Constructor
18
-
19
- * @param {Object} options Layer options.
20
- * @param {string} options.url Tralis service url.
21
- * @param {string} options.apiKey Access key for [geOps services](https://developer.geops.io/).
22
- * @param {boolean} [options.debug=false] Display additional debug informations.
23
- * @param {TralisMode} [options.mode=TralisMode.TOPOGRAPHIC] Tralis's Mode.
24
- * @param {number} [options.minZoomInterpolation=8] Minimal zoom when trains positions start to be interpolated.
25
- * @param {number} [options.minZoomNonTrain=9] Minimal zoom when non trains vehicles are allowed to be displayed.
26
- */
27
- constructor(options = {}) {}
28
-
29
- /**
30
- * Initialize the layer subscribing to the Tralis api.
31
- *
32
- * @param {ol/Map~Map} map
33
- */
34
- init(map) {}
35
-
36
- /**
37
- * Terminate the layer unsubscribing to the Tralis api.
38
- */
39
- terminate() {}
40
-
41
- /**
42
- * Set the Tralis api's bbox.
43
- *
44
- * @param {Array<number>} extent Extent to request, [minX, minY, maxX, maxY, zoom].
45
- * @param {number} zoom Zoom level to request. Must be an integer.
46
- */
47
- setBbox(extent, zoom) {}
48
-
49
- /**
50
- * Set the Tralis api's mode.
51
- *
52
- * @param {TralisMode} mode Tralis mode
53
- */
54
- setMode(mode) {}
55
-
56
- /**
57
- * Request the stopSequence and the fullTrajectory informations for a vehicle.
58
- *
59
- * @param {string} id The vehicle identifier (the train_id property).
60
- * @param {TralisMode} mode The mode to request. If not defined, the layer´s mode propetrty will be used.
61
- * @return {Promise<{stopSequence: StopSequence, fullTrajectory: FullTrajectory>} A promise that will be resolved with the trajectory informations.
62
- */
63
- getTrajectoryInfos(id, mode) {}
64
-
65
- /**
66
- * Define the style of the vehicle.
67
- * Draw a blue circle with the id of the props parameter.
68
- *
69
- * @param {TralisTrajectory} trajectory A trajectory
70
- * @param {ViewState} viewState Map's view state (zoom, resolution, center, ...)
71
- */
72
- defaultStyle(trajectory, viewState) {}
73
- }
74
-
75
- /**
76
- * Mixin for TralisLayerInterface.
77
- *
78
- * @param {TrackerLayer} TrackerLayer A {TrackerLayer} class to extend with {TrajservLayerInterface} functionnalities.
79
- * @return {Class} A class that implements {TralisLayerInterface} class and extends Base;
80
- * @private
81
- */
82
- const TralisLayerMixin = (TrackerLayer) =>
83
- class extends TrackerLayer {
84
- constructor(options = {}) {
85
- super({ ...options });
86
- this.debug = options.debug;
87
- this.mode = options.mode || TralisModes.TOPOGRAPHIC;
88
- this.api = options.api || new TralisAPI(options);
89
- this.tenant = options.tenant || ''; // sbb,sbh or sbm
90
- this.minZoomNonTrain = options.minZoomNonTrain || 9; // Min zoom level from which non trains are allowed to be displayed. Min value is 9 (as configured by the server
91
- this.minZoomInterpolation = options.minZoomInterpolation || 8; // Min zoom level from which trains positions are not interpolated.
92
- this.format = new GeoJSON();
93
- this.generalizationLevelByZoom = options.generalizationLevelByZoom || {
94
- 0: 5,
95
- 1: 5,
96
- 2: 5,
97
- 3: 5,
98
- 4: 5,
99
- 5: 5,
100
- 6: 5,
101
- 7: 5,
102
- 8: 10,
103
- 9: 30,
104
- 10: 30,
105
- 11: 100,
106
- 12: 100,
107
- 13: 100,
108
- };
109
-
110
- // This property will call api.setBbox on each movend event
111
- this.isUpdateBboxOnMoveEnd = options.isUpdateBboxOnMoveEnd !== false;
112
-
113
- // Bind callbacks
114
- this.onTrajectoryMessage = this.onTrajectoryMessage.bind(this);
115
- this.onDeleteTrajectoryMessage =
116
- this.onDeleteTrajectoryMessage.bind(this);
117
- this.onDocumentVisibilityChange =
118
- this.onDocumentVisibilityChange.bind(this);
119
- }
120
-
121
- init(map) {
122
- super.init(map);
123
-
124
- // To avoid browser hanging when the tab is not visible for a certain amount of time,
125
- // We stop the rendering and the websocket when hide and start again when show.
126
- document.addEventListener(
127
- 'visibilitychange',
128
- this.onDocumentVisibilityChange,
129
- );
130
- }
131
-
132
- terminate() {
133
- document.removeEventListener(
134
- 'visibilitychange',
135
- this.onDocumentVisibilityChange,
136
- );
137
- super.terminate();
138
- }
139
-
140
- start() {
141
- super.start();
142
- this.api.open();
143
- this.api.subscribeTrajectory(
144
- this.mode,
145
- this.onTrajectoryMessage,
146
- this.isUpdateBboxOnMoveEnd,
147
- );
148
- this.api.subscribeDeletedVehicles(
149
- this.mode,
150
- this.onDeleteTrajectoryMessage,
151
- this.isUpdateBboxOnMoveEnd,
152
- );
153
-
154
- if (this.isUpdateBboxOnMoveEnd) {
155
- // Update the bbox on each move end
156
- this.setBbox();
157
- }
158
- }
159
-
160
- stop() {
161
- super.stop();
162
- this.api.unsubscribeTrajectory(this.onTrajectoryMessage);
163
- this.api.unsubscribeDeletedVehicles(this.onDeleteTrajectoryMessage);
164
- this.api.close();
165
- }
166
-
167
- setBbox(extent, zoom) {
168
- // Clean trajectories before sending the new bbox
169
- // Purge trajectories:
170
- // - which are outside the extent
171
- // - when it's bus and zoom level is too low for them
172
- const keys = Object.keys(this.trajectories);
173
- for (let i = keys.length - 1; i >= 0; i -= 1) {
174
- this.purgeTrajectory(this.trajectories[keys[i]], extent, zoom);
175
- }
176
-
177
- const bbox = [...extent];
178
-
179
- if (this.isUpdateBboxOnMoveEnd) {
180
- bbox.push(zoom);
181
-
182
- if (this.tenant) {
183
- bbox.push(`tenant=${this.tenant}`);
184
- }
185
-
186
- /* @ignore */
187
- this.generalizationLevel = this.generalizationLevelByZoom[zoom];
188
- if (this.generalizationLevel) {
189
- bbox.push(`gen=${this.generalizationLevel}`);
190
- }
191
- }
192
-
193
- this.api.bbox = bbox;
194
- }
195
-
196
- setMode(mode) {
197
- if (this.mode === mode) {
198
- return;
199
- }
200
- this.mode = mode;
201
- this.api.subscribeTrajectory(
202
- this.mode,
203
- this.onTrajectoryMessage,
204
- this.isUpdateBboxOnMoveEnd,
205
- );
206
- this.api.subscribeDeletedVehicles(
207
- this.mode,
208
- this.onDeleteTrajectoryMessage,
209
- this.isUpdateBboxOnMoveEnd,
210
- );
211
- }
212
-
213
- /**
214
- * Request the stopSequence and the fullTrajectory informations for a vehicle.
215
- *
216
- * @param {string} id The vehicle identifier (the train_id property).
217
- * @return {Promise<{stopSequence: StopSequence, fullTrajectory: FullTrajectory>} A promise that will be resolved with the trajectory informations.
218
- */
219
- getTrajectoryInfos(id) {
220
- // When a vehicle is selected, we request the complete stop sequence and the complete full trajectory.
221
- // Then we combine them in one response and send them to inherited layers.
222
- const promises = [
223
- this.api.getStopSequence(id, this.mode),
224
- this.api.getFullTrajectory(id, this.mode, this.generalizationLevel),
225
- ];
226
-
227
- return Promise.all(promises).then(([stopSequence, fullTrajectory]) => {
228
- const response = {
229
- stopSequence,
230
- fullTrajectory,
231
- };
232
- return response;
233
- });
234
- }
235
-
236
- /**
237
- * Determine if the trajectory is useless and should be removed from the list or not.
238
- * By default, this function exclude vehicles:
239
- * - that have their trajectory outside the current extent and
240
- * - that are not a train and zoom level is lower than layer's minZoomNonTrain property.
241
- *
242
- * @param {TralisTrajectory} trajectory
243
- * @param {Array<number>} extent
244
- * @param {number} zoom
245
- * @return {boolean} if the trajectory must be displayed or not.
246
- * @ignore
247
- */
248
- purgeTrajectory(trajectory, extent, zoom) {
249
- const { type, bounds, train_id: id } = trajectory.properties;
250
- if (
251
- !intersects(extent, bounds) ||
252
- (type !== 'rail' && zoom < (this.minZoomNonTrain || 9))
253
- ) {
254
- this.removeTrajectory(id);
255
- return true;
256
- }
257
- return false;
258
- }
259
-
260
- /**
261
- * Add a trajectory to the tracker.
262
- * @param {TralisTrajectory} trajectory The trajectory to add.
263
- * @private
264
- */
265
- addTrajectory(trajectory) {
266
- if (this.filter && !this.filter(trajectory)) {
267
- return;
268
- }
269
- this.trajectories[trajectory.properties.train_id] = trajectory;
270
- this.renderTrajectories();
271
- }
272
-
273
- removeTrajectory(id) {
274
- delete this.trajectories[id];
275
- }
276
-
277
- // getRefreshTimeInMs() {
278
- // return 5000;
279
- // }
280
- onDocumentVisibilityChange() {
281
- if (!this.visible) {
282
- return;
283
- }
284
- if (document.hidden) {
285
- this.stop();
286
- } else {
287
- this.start();
288
- }
289
- }
290
-
291
- /**
292
- * Callback on websocket's trajectory channel events.
293
- * It adds a trajectory to the list.
294
- *
295
- * @private
296
- */
297
- onTrajectoryMessage(data) {
298
- if (!data.content) {
299
- return;
300
- }
301
- const trajectory = data.content;
302
-
303
- const {
304
- geometry,
305
- properties: {
306
- train_id: id,
307
- time_since_update: timeSinceUpdate,
308
- raw_coordinates: rawCoordinates,
309
- },
310
- } = trajectory;
311
-
312
- // ignore old events [SBAHNM-97]
313
- if (timeSinceUpdate < 0) {
314
- return;
315
- }
316
-
317
- // console.time(`onTrajectoryMessage${data.content.properties.train_id}`);
318
- if (this.purgeTrajectory(trajectory)) {
319
- return;
320
- }
321
-
322
- if (
323
- this.debug &&
324
- this.mode === TralisModes.TOPOGRAPHIC &&
325
- rawCoordinates
326
- ) {
327
- trajectory.properties.olGeometry = {
328
- type: 'Point',
329
- coordinates: fromLonLat(
330
- rawCoordinates,
331
- this.map.getView().getProjection(),
332
- ),
333
- };
334
- } else {
335
- trajectory.properties.olGeometry = this.format.readGeometry(geometry);
336
- }
337
-
338
- // TODO Make sure the timeOffset is useful. May be we can remove it.
339
- trajectory.properties.timeOffset = Date.now() - data.timestamp;
340
- this.addTrajectory(trajectory);
341
- }
342
-
343
- /**
344
- * Callback on websocket's deleted_vehicles channel events.
345
- * It removes the trajectory from the list.
346
- *
347
- * @private
348
- * @override
349
- */
350
- onDeleteTrajectoryMessage(data) {
351
- if (!data.content) {
352
- return;
353
- }
354
-
355
- this.removeTrajectory(data.content);
356
- }
357
-
358
- /**
359
- * Callback when user moves the mouse/pointer over the map.
360
- * It sets the layer's hoverVehicleId property with the current hovered vehicle's id.
361
- *
362
- * @private
363
- * @override
364
- */
365
- onFeatureHover(features, layer, coordinate) {
366
- const [feature] = features;
367
- let id = null;
368
- if (feature) {
369
- id = feature.get('train_id');
370
- }
371
- if (this.hoverVehicleId !== id) {
372
- /** @ignore */
373
- this.hoverVehicleId = id;
374
- this.renderTrajectories(true);
375
- }
376
- super.onFeatureHover(features, layer, coordinate);
377
- }
378
-
379
- /**
380
- * Callback when user clicks on the map.
381
- * It sets the layer's selectedVehicleId property with the current selected vehicle's id.
382
- *
383
- * @private
384
- * @override
385
- */
386
- onFeatureClick(features, layer, coordinate) {
387
- const [feature] = features;
388
- let id = null;
389
- if (feature) {
390
- id = feature.get('train_id');
391
- }
392
- if (this.selectedVehicleId !== id) {
393
- /** @ignore */
394
- this.selectedVehicleId = id;
395
- this.selectedVehicle = feature;
396
- this.renderTrajectories(true);
397
- }
398
- super.onFeatureClick(features, layer, coordinate);
399
- }
400
- };
401
-
402
- export default TralisLayerMixin;
@@ -1,18 +0,0 @@
1
- /**
2
- * A very simple tracker style.
3
- * Display blue point for each train.
4
- */
5
- const canvas = document.createElement('canvas');
6
- canvas.width = 15;
7
- canvas.height = 15;
8
- const ctx = canvas.getContext('2d');
9
- ctx.arc(8, 8, 5, 0, 2 * Math.PI, false);
10
- ctx.fillStyle = '#8ED6FF';
11
- ctx.fill();
12
- ctx.lineWidth = 3;
13
- ctx.strokeStyle = 'black';
14
- ctx.stroke();
15
- ctx.lineWidth = 3;
16
-
17
- const style = () => canvas;
18
- export default style;