mobility-toolbox-js 3.0.0-beta.7 → 3.0.0-beta.9
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/api/HttpAPI.d.ts +31 -0
- package/api/RealtimeAPI.d.ts +359 -0
- package/api/RealtimeAPI.js +96 -89
- package/api/RoutingAPI.d.ts +37 -0
- package/api/StopsAPI.d.ts +38 -0
- package/api/WebSocketAPI.d.ts +153 -0
- package/api/index.d.ts +3 -0
- package/api/typedefs.d.ts +178 -0
- package/common/controls/StopFinderControlCommon.d.ts +53 -0
- package/common/index.d.ts +2 -0
- package/common/mixins/RealtimeLayerMixin.d.ts +273 -0
- package/common/styles/index.d.ts +4 -0
- package/common/styles/realtimeDefaultStyle.d.ts +36 -0
- package/common/styles/realtimeDelayStyle.d.ts +12 -0
- package/common/styles/realtimeHeadingStyle.d.ts +12 -0
- package/common/styles/realtimeSimpleStyle.d.ts +4 -0
- package/common/typedefs.d.ts +212 -0
- package/common/utils/compareDepartures.d.ts +10 -0
- package/common/utils/constants.d.ts +5 -0
- package/common/utils/createCanvas.d.ts +10 -0
- package/common/utils/createDefaultCopyrightElt.d.ts +5 -0
- package/common/utils/createDefaultStopFinderElt.d.ts +5 -0
- package/common/utils/createRealtimeFilters.d.ts +12 -0
- package/common/utils/debounceDeparturesMessages.d.ts +12 -0
- package/common/utils/debounceWebsocketMessages.d.ts +11 -0
- package/common/utils/getLayersAsFlatArray.d.ts +3 -0
- package/common/utils/getLayersAsFlatArray.js +5 -1
- package/common/utils/getMapGlCopyrights.d.ts +17 -0
- package/common/utils/getRealtimeModeSuffix.d.ts +9 -0
- package/common/utils/getUrlWithParams.d.ts +8 -0
- package/common/utils/getVehiclePosition.d.ts +16 -0
- package/common/utils/index.d.ts +16 -0
- package/common/utils/realtimeConfig.d.ts +64 -0
- package/common/utils/removeDuplicate.d.ts +9 -0
- package/common/utils/renderTrajectories.d.ts +16 -0
- package/common/utils/sortAndFilterDepartures.d.ts +15 -0
- package/common/utils/sortByDelay.d.ts +3 -0
- package/common/utils/timeUtils.d.ts +23 -0
- package/common/utils/toMercatorExtent.d.ts +5 -0
- package/iife.d.ts +2 -0
- package/index.d.ts +9 -0
- package/maplibre/controls/CopyrightControl.d.ts +35 -0
- package/maplibre/controls/index.d.ts +1 -0
- package/maplibre/index.d.ts +5 -0
- package/maplibre/layers/Layer.d.ts +28 -0
- package/maplibre/layers/RealtimeLayer.d.ts +160 -0
- package/maplibre/layers/RealtimeLayer.js +2 -2
- package/maplibre/layers/index.d.ts +2 -0
- package/maplibre/utils/getMercatorResolution.d.ts +7 -0
- package/maplibre/utils/getSourceCoordinates.d.ts +7 -0
- package/maplibre/utils/index.d.ts +2 -0
- package/mbt.js +137 -114
- package/mbt.js.map +3 -3
- package/mbt.min.js +13 -13
- package/mbt.min.js.map +3 -3
- package/ol/controls/CopyrightControl.d.ts +31 -0
- package/ol/controls/CopyrightControl.js +18 -8
- package/ol/controls/RoutingControl.d.ts +209 -0
- package/ol/controls/RoutingControl.js +3 -0
- package/ol/controls/StopFinderControl.d.ts +37 -0
- package/ol/controls/StopFinderControl.js +3 -0
- package/ol/controls/index.d.ts +3 -0
- package/ol/index.d.ts +6 -0
- package/ol/layers/MapGlLayer.d.ts +144 -0
- package/ol/layers/MapGlLayer.js +3 -1
- package/ol/layers/MaplibreLayer.d.ts +63 -0
- package/ol/layers/MaplibreStyleLayer.d.ts +235 -0
- package/ol/layers/MaplibreStyleLayer.js +1 -1
- package/ol/layers/RealtimeLayer.d.ts +285 -0
- package/ol/layers/RealtimeLayer.js +13 -7
- package/ol/layers/index.d.ts +3 -0
- package/ol/mixins/MobilityLayerMixin.d.ts +98 -0
- package/ol/mixins/MobilityLayerMixin.js +1 -4
- package/ol/mixins/PropertiesLayerMixin.d.ts +127 -0
- package/ol/mixins/PropertiesLayerMixin.js +5 -4
- package/ol/renderers/MaplibreLayerRenderer.d.ts +20 -0
- package/ol/renderers/MaplibreStyleLayerRenderer.d.ts +20 -0
- package/ol/renderers/RealtimeLayerRenderer.d.ts +22 -0
- package/ol/renderers/RealtimeLayerRenderer.js +9 -9
- package/ol/styles/fullTrajectoryDelayStyle.d.ts +6 -0
- package/ol/styles/fullTrajectoryStyle.d.ts +5 -0
- package/ol/styles/index.d.ts +3 -0
- package/ol/styles/routingStyle.d.ts +4 -0
- package/ol/utils/getFeatureInfoAtCoordinate.d.ts +8 -0
- package/ol/utils/getFeatureInfoAtCoordinate.js +1 -1
- package/ol/utils/index.d.ts +1 -0
- package/package.json +1 -1
- package/setupTests.d.ts +1 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { Feature, Map } from 'ol';
|
|
2
|
+
import { Coordinate } from 'ol/coordinate';
|
|
3
|
+
import { ObjectEvent } from 'ol/Object';
|
|
4
|
+
import { Layer } from 'ol/layer';
|
|
5
|
+
import { Source } from 'ol/source';
|
|
6
|
+
import { LayerGetFeatureInfoResponse } from '../../types';
|
|
7
|
+
import { FilterFunction } from '../../common/typedefs';
|
|
8
|
+
import MaplibreLayer, { MaplibreLayerOptions } from './MaplibreLayer';
|
|
9
|
+
import MaplibreStyleLayerRenderer from '../renderers/MaplibreStyleLayerRenderer';
|
|
10
|
+
export type MaplibreStyleLayerOptions = MaplibreLayerOptions & {
|
|
11
|
+
beforeId?: string;
|
|
12
|
+
maplibreLayer?: MaplibreLayer;
|
|
13
|
+
layers?: maplibregl.AddLayerObject[];
|
|
14
|
+
layersFilter?: FilterFunction;
|
|
15
|
+
queryRenderedLayersFilter?: FilterFunction;
|
|
16
|
+
};
|
|
17
|
+
declare const MaplibreStyleLayer_base: {
|
|
18
|
+
new (...args: any[]): {
|
|
19
|
+
options?: import("../mixins/PropertiesLayerMixin").PropertiesLayerMixinOptions | undefined;
|
|
20
|
+
olListenersKeys: import("ol/events").EventsKey[];
|
|
21
|
+
children: Layer<Source, import("ol/renderer/Layer").default<any>>[];
|
|
22
|
+
get copyrights(): string;
|
|
23
|
+
set copyrights(newCopyrights: string | string[]);
|
|
24
|
+
disabled: boolean;
|
|
25
|
+
readonly group: string;
|
|
26
|
+
readonly hitTolerance: boolean;
|
|
27
|
+
readonly key: string;
|
|
28
|
+
readonly map: Map;
|
|
29
|
+
readonly name: string;
|
|
30
|
+
olLayer: Layer<Source, import("ol/renderer/Layer").default<any>>;
|
|
31
|
+
parent: Layer<Source, import("ol/renderer/Layer").default<any>>;
|
|
32
|
+
visible: boolean;
|
|
33
|
+
setMapInternal: ((map: Map) => void) & ((map: Map | null) => void);
|
|
34
|
+
onChildrenChange(oldValue: Layer<Source, import("ol/renderer/Layer").default<any>>[]): void;
|
|
35
|
+
attachToMap(map: Map): void;
|
|
36
|
+
detachFromMap(): void;
|
|
37
|
+
flat(): any[];
|
|
38
|
+
addEventListener: (type: string, listener: import("ol/events").Listener) => void;
|
|
39
|
+
removeEventListener: (type: string, listener: import("ol/events").Listener) => void;
|
|
40
|
+
on: import("ol/layer/Layer").LayerOnSignature<import("ol/events").EventsKey>;
|
|
41
|
+
render: (frameState: import("ol/Map").FrameState | null, target: HTMLElement) => HTMLElement | null;
|
|
42
|
+
once: import("ol/layer/Layer").LayerOnSignature<import("ol/events").EventsKey>;
|
|
43
|
+
un: import("ol/layer/Layer").LayerOnSignature<void>;
|
|
44
|
+
getSource: () => Source | null;
|
|
45
|
+
getRenderSource: () => Source | null;
|
|
46
|
+
getFeatures: (pixel: import("ol/pixel").Pixel) => Promise<import("ol/Feature").FeatureLike[]>;
|
|
47
|
+
getData: (pixel: import("ol/pixel").Pixel) => Float32Array | Uint8ClampedArray | Uint8Array | DataView | null;
|
|
48
|
+
isVisible: (view?: import("ol/View").default | import("ol/View").ViewStateLayerStateExtent | undefined) => boolean;
|
|
49
|
+
getAttributions: (view?: import("ol/View").default | import("ol/View").ViewStateLayerStateExtent | undefined) => string[];
|
|
50
|
+
unrender: () => void;
|
|
51
|
+
getDeclutter: () => string;
|
|
52
|
+
renderDeclutter: (frameState: import("ol/Map").FrameState, layerState: import("ol/layer/Layer").State) => void;
|
|
53
|
+
renderDeferred: (frameState: import("ol/Map").FrameState) => void;
|
|
54
|
+
getMapInternal: () => Map | null;
|
|
55
|
+
setMap: (map: Map | null) => void;
|
|
56
|
+
setSource: (source: Source | null) => void;
|
|
57
|
+
getRenderer: () => import("ol/renderer/Layer").default<any> | null;
|
|
58
|
+
hasRenderer: () => boolean;
|
|
59
|
+
getBackground: () => false | import("ol/layer/Base").BackgroundColor;
|
|
60
|
+
getClassName: () => string;
|
|
61
|
+
getLayerState: (managed?: boolean | undefined) => import("ol/layer/Layer").State;
|
|
62
|
+
getLayersArray: (array?: Layer<Source, import("ol/renderer/Layer").default<any>>[] | undefined) => Layer<Source, import("ol/renderer/Layer").default<any>>[];
|
|
63
|
+
getLayerStatesArray: (states?: import("ol/layer/Layer").State[] | undefined) => import("ol/layer/Layer").State[];
|
|
64
|
+
getExtent: () => import("ol/extent").Extent | undefined;
|
|
65
|
+
getMaxResolution: () => number;
|
|
66
|
+
getMinResolution: () => number;
|
|
67
|
+
getMinZoom: () => number;
|
|
68
|
+
getMaxZoom: () => number;
|
|
69
|
+
getOpacity: () => number;
|
|
70
|
+
getSourceState: () => import("ol/source/Source").State;
|
|
71
|
+
getVisible: () => boolean;
|
|
72
|
+
getZIndex: () => number | undefined;
|
|
73
|
+
setBackground: (background?: import("ol/layer/Base").BackgroundColor | undefined) => void;
|
|
74
|
+
setExtent: (extent: import("ol/extent").Extent | undefined) => void;
|
|
75
|
+
setMaxResolution: (maxResolution: number) => void;
|
|
76
|
+
setMinResolution: (minResolution: number) => void;
|
|
77
|
+
setMaxZoom: (maxZoom: number) => void;
|
|
78
|
+
setMinZoom: (minZoom: number) => void;
|
|
79
|
+
setOpacity: (opacity: number) => void;
|
|
80
|
+
setVisible: (visible: boolean) => void;
|
|
81
|
+
setZIndex: (zindex: number) => void;
|
|
82
|
+
get: (key: string) => any;
|
|
83
|
+
getKeys: () => string[];
|
|
84
|
+
getProperties: () => {
|
|
85
|
+
[x: string]: any;
|
|
86
|
+
};
|
|
87
|
+
getPropertiesInternal: () => {
|
|
88
|
+
[x: string]: any;
|
|
89
|
+
} | null;
|
|
90
|
+
hasProperties: () => boolean;
|
|
91
|
+
notify: (key: string, oldValue: any) => void;
|
|
92
|
+
addChangeListener: (key: string, listener: import("ol/events").Listener) => void;
|
|
93
|
+
removeChangeListener: (key: string, listener: import("ol/events").Listener) => void;
|
|
94
|
+
set: (key: string, value: any, silent?: boolean | undefined) => void;
|
|
95
|
+
setProperties: (values: {
|
|
96
|
+
[x: string]: any;
|
|
97
|
+
}, silent?: boolean | undefined) => void;
|
|
98
|
+
unset: (key: string, silent?: boolean | undefined) => void;
|
|
99
|
+
changed: () => void;
|
|
100
|
+
getRevision: () => number;
|
|
101
|
+
dispatchEvent: (event: string | import("ol/events/Event").default) => boolean | undefined;
|
|
102
|
+
getListeners: (type: string) => import("ol/events").Listener[] | undefined;
|
|
103
|
+
hasListener: (type?: string | undefined) => boolean;
|
|
104
|
+
dispose: () => void;
|
|
105
|
+
};
|
|
106
|
+
} & typeof Layer;
|
|
107
|
+
/**
|
|
108
|
+
* Layer for visualizing a specific set of layer from a MapboxLayer.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* import { MapboxLayer, MapboxStyleLayer } from 'mobility-toolbox-js/ol';
|
|
112
|
+
*
|
|
113
|
+
* const maplibreLayer = new MapboxLayer({
|
|
114
|
+
* url: 'https://maps.geops.io/styles/travic_v2/style.json?key=[yourApiKey]',
|
|
115
|
+
* });
|
|
116
|
+
*
|
|
117
|
+
* const layer = new MapboxStyleLayer({
|
|
118
|
+
* maplibreLayer: maplibreLayer,
|
|
119
|
+
* styleLayersFilter: () => {},
|
|
120
|
+
* });
|
|
121
|
+
*
|
|
122
|
+
* @classproperty {ol/Map~Map} map - The map where the layer is displayed.
|
|
123
|
+
* @extends {ol/layer/Layer~Layer}
|
|
124
|
+
*/
|
|
125
|
+
declare class MaplibreStyleLayer extends MaplibreStyleLayer_base {
|
|
126
|
+
highlightedFeatures: Feature[];
|
|
127
|
+
selectedFeatures: Feature[];
|
|
128
|
+
get beforeId(): string;
|
|
129
|
+
set beforeId(newValue: string[]);
|
|
130
|
+
get layers(): maplibregl.AddLayerObject[];
|
|
131
|
+
set layers(newValue: maplibregl.AddLayerObject[]);
|
|
132
|
+
get layersFilter(): (layer: maplibregl.LayerSpecification) => boolean;
|
|
133
|
+
set layersFilter(newValue: (layer: maplibregl.LayerSpecification) => boolean);
|
|
134
|
+
get mapboxLayer(): MaplibreLayer | undefined;
|
|
135
|
+
get maplibreLayer(): MaplibreLayer;
|
|
136
|
+
set maplibreLayer(newValue: MaplibreLayer);
|
|
137
|
+
get queryRenderedLayersFilter(): (layer: maplibregl.LayerSpecification) => boolean;
|
|
138
|
+
set queryRenderedLayersFilter(newValue: (layer: maplibregl.LayerSpecification) => boolean);
|
|
139
|
+
get sources(): {
|
|
140
|
+
[key: string]: maplibregl.SourceSpecification;
|
|
141
|
+
};
|
|
142
|
+
set sources(newValue: {
|
|
143
|
+
[key: string]: maplibregl.SourceSpecification;
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* @deprecated
|
|
147
|
+
*/
|
|
148
|
+
get styleLayer(): maplibregl.AddLayerObject;
|
|
149
|
+
/**
|
|
150
|
+
* @deprecated
|
|
151
|
+
*/
|
|
152
|
+
set styleLayer(newValue: maplibregl.AddLayerObject);
|
|
153
|
+
/**
|
|
154
|
+
* @deprecated
|
|
155
|
+
*/
|
|
156
|
+
get styleLayers(): maplibregl.AddLayerObject[];
|
|
157
|
+
/**
|
|
158
|
+
* @deprecated
|
|
159
|
+
*/
|
|
160
|
+
set styleLayers(newValue: maplibregl.AddLayerObject[]);
|
|
161
|
+
/**
|
|
162
|
+
* Constructor.
|
|
163
|
+
*
|
|
164
|
+
* @param {Object} options
|
|
165
|
+
* @param {MapboxLayer} [options.maplibreLayer] The MaplibreLayer to use.
|
|
166
|
+
* @param {maplibregl.SourceSpecification[]} [options.sources] The source to add to the style on load.
|
|
167
|
+
* @param {maplibregl.AddLayerObject[]} [options.layers] The layers to add to the style on load.
|
|
168
|
+
* @param {FilterFunction} [options.layersFilter] Filter function to decide which style layer to apply visiblity on. If not provided, the 'layers' property is used.
|
|
169
|
+
* @param {FilterFunction} [options.queryRenderedLayersFilter] Filter function to decide which style layer are available for query.
|
|
170
|
+
*/
|
|
171
|
+
constructor(options: MaplibreStyleLayerOptions);
|
|
172
|
+
createRenderer(): MaplibreStyleLayerRenderer;
|
|
173
|
+
/**
|
|
174
|
+
* Initialize the layer.
|
|
175
|
+
* @param {ol/Map~Map} map the Maplibre map.
|
|
176
|
+
* @override
|
|
177
|
+
*/
|
|
178
|
+
attachToMap(map: Map): void;
|
|
179
|
+
/**
|
|
180
|
+
* Terminate the layer.
|
|
181
|
+
* @override
|
|
182
|
+
*/
|
|
183
|
+
detachFromMap(): void;
|
|
184
|
+
/** @private */
|
|
185
|
+
addSources(): void;
|
|
186
|
+
/** @private */
|
|
187
|
+
removeSources(): void;
|
|
188
|
+
/** @private */
|
|
189
|
+
addLayers(): void;
|
|
190
|
+
/** @private */
|
|
191
|
+
removeLayers(): void;
|
|
192
|
+
/**
|
|
193
|
+
* On Maplibre map load callback function. Add style layers and dynaimc filters.
|
|
194
|
+
* @private
|
|
195
|
+
*/
|
|
196
|
+
onLoad(): void;
|
|
197
|
+
/**
|
|
198
|
+
* Request feature information for a given coordinate.
|
|
199
|
+
* @param {ol/coordinate~Coordinate} coordinate Coordinate to request the information at.
|
|
200
|
+
* @return {Promise<FeatureInfo>} Promise with features, layer and coordinate.
|
|
201
|
+
*/
|
|
202
|
+
getFeatureInfoAtCoordinate(coordinate: Coordinate): Promise<LayerGetFeatureInfoResponse>;
|
|
203
|
+
/**
|
|
204
|
+
* Set if features are hovered or not.
|
|
205
|
+
* @param {Array<ol/Feature~Feature>} features
|
|
206
|
+
* @param {boolean} state Is the feature hovered
|
|
207
|
+
* @private
|
|
208
|
+
*/
|
|
209
|
+
setHoverState(features: Feature[], state: boolean): void;
|
|
210
|
+
/**
|
|
211
|
+
* Select a list of features.
|
|
212
|
+
* @param {Array<ol/Feature~Feature>} [features=[]] Features to select.
|
|
213
|
+
* @private
|
|
214
|
+
*/
|
|
215
|
+
select(features?: Feature[]): void;
|
|
216
|
+
/**
|
|
217
|
+
* Highlight a list of features.
|
|
218
|
+
* @param {Array<ol/Feature~Feature>} [features=[]] Features to highlight.
|
|
219
|
+
* @private
|
|
220
|
+
*/
|
|
221
|
+
highlight(features?: Feature[]): void;
|
|
222
|
+
/**
|
|
223
|
+
* Apply visibility to style layers that fits the styleLayersFilter function.
|
|
224
|
+
*
|
|
225
|
+
* @private
|
|
226
|
+
*/
|
|
227
|
+
applyLayoutVisibility(evt?: ObjectEvent): void;
|
|
228
|
+
/**
|
|
229
|
+
* Create a copy of the MapboxStyleLayer.
|
|
230
|
+
* @param {Object} newOptions Options to override.
|
|
231
|
+
* @return {MapboxStyleLayer} A MapboxStyleLayer.
|
|
232
|
+
*/
|
|
233
|
+
clone(newOptions: MaplibreStyleLayerOptions): MaplibreStyleLayer;
|
|
234
|
+
}
|
|
235
|
+
export default MaplibreStyleLayer;
|
|
@@ -159,7 +159,7 @@ class MaplibreStyleLayer extends MobilityLayerMixin(Layer) {
|
|
|
159
159
|
}
|
|
160
160
|
// Apply the visibiltity when layer's visibility change.
|
|
161
161
|
this.olListenersKeys.push(
|
|
162
|
-
// @ts-expect-error 'load' is a custom event
|
|
162
|
+
// @ts-expect-error 'load' is a custom event
|
|
163
163
|
this.maplibreLayer.on('load', this.onLoad.bind(this)), this.on('change:visible', (evt) => {
|
|
164
164
|
// Once the map is loaded we can apply visiblity without waiting
|
|
165
165
|
// the style. Maplibre take care of the application of style changes.
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import GeoJSON from 'ol/format/GeoJSON';
|
|
2
|
+
import Source from 'ol/source/Source';
|
|
3
|
+
import Feature, { FeatureLike } from 'ol/Feature';
|
|
4
|
+
import { Map, MapEvent } from 'ol';
|
|
5
|
+
import { ObjectEvent } from 'ol/Object';
|
|
6
|
+
import Layer from 'ol/layer/Layer';
|
|
7
|
+
import { RealtimeLayerMixinOptions } from '../../common/mixins/RealtimeLayerMixin';
|
|
8
|
+
import { RealtimeFullTrajectory, RealtimeTrainId, ViewState } from '../../types';
|
|
9
|
+
import { RealtimeTrajectory } from '../../api/typedefs';
|
|
10
|
+
import { WebSocketAPIMessageEventData } from '../../api/WebSocketAPI';
|
|
11
|
+
import RealtimeLayerRenderer from '../renderers/RealtimeLayerRenderer';
|
|
12
|
+
export type RealtimeLayerOptions = RealtimeLayerMixinOptions & {
|
|
13
|
+
fullTrajectoryStyle?: (feature: FeatureLike, resolution: number, options: any) => void;
|
|
14
|
+
allowRenderWhenAnimating?: boolean;
|
|
15
|
+
};
|
|
16
|
+
declare const RealtimeLayer_base: {
|
|
17
|
+
new (options: RealtimeLayerMixinOptions): {
|
|
18
|
+
[x: string]: any;
|
|
19
|
+
debug: boolean;
|
|
20
|
+
trajectories?: {
|
|
21
|
+
[key: string]: GeoJSONFeature;
|
|
22
|
+
} | undefined;
|
|
23
|
+
canvas?: import("../../types").AnyCanvas | undefined;
|
|
24
|
+
mode: import("../../types").RealtimeMode;
|
|
25
|
+
api: import("../../api/RealtimeAPI").default;
|
|
26
|
+
tenant: string;
|
|
27
|
+
bboxParameters?: {
|
|
28
|
+
[index: string]: string | number | boolean | string[] | number[] | boolean[];
|
|
29
|
+
} | undefined;
|
|
30
|
+
time?: Date | undefined;
|
|
31
|
+
live?: boolean | undefined;
|
|
32
|
+
speed?: number | undefined;
|
|
33
|
+
filter?: Function | undefined;
|
|
34
|
+
sort?: Function | undefined;
|
|
35
|
+
style?: import("../../types").RealtimeStyleFunction | undefined;
|
|
36
|
+
styleOptions?: import("../../types").RealtimeStyleOptions | undefined;
|
|
37
|
+
pixelRatio?: number | undefined;
|
|
38
|
+
minZoomInterpolation: number;
|
|
39
|
+
isUpdateBboxOnMoveEnd: boolean;
|
|
40
|
+
hoverVehicleId?: string | undefined;
|
|
41
|
+
selectedVehicleId?: string | undefined;
|
|
42
|
+
renderState?: import("../../types").RealtimeRenderState | undefined;
|
|
43
|
+
useRequestAnimationFrame?: boolean | undefined;
|
|
44
|
+
useDebounce?: boolean | undefined;
|
|
45
|
+
useThrottle?: boolean | undefined;
|
|
46
|
+
mots?: import("../../types").RealtimeMot[] | undefined;
|
|
47
|
+
motsByZoom: import("../../types").RealtimeMot[][];
|
|
48
|
+
generalizationLevel?: import("../../types").RealtimeGeneralizationLevel | undefined;
|
|
49
|
+
generalizationLevelByZoom: import("../../types").RealtimeGeneralizationLevel[];
|
|
50
|
+
renderTimeIntervalByZoom: number[];
|
|
51
|
+
format: GeoJSON<typeof Feature>;
|
|
52
|
+
requestId?: number | undefined;
|
|
53
|
+
updateTimeInterval?: number | undefined;
|
|
54
|
+
updateTimeDelay?: number | undefined;
|
|
55
|
+
visibilityRef: import("ol/events").EventsKey;
|
|
56
|
+
selectedVehicle: GeoJSONFeature;
|
|
57
|
+
getMotsByZoom: (zoom: number) => import("../../types").RealtimeMot[];
|
|
58
|
+
getGeneralizationLevelByZoom: (zoom: number) => import("../../types").RealtimeGeneralizationLevel;
|
|
59
|
+
getRenderTimeIntervalByZoom: (zoom: number) => number;
|
|
60
|
+
throttleRenderTrajectories: (viewState: ViewState, noInterpolate?: boolean | undefined) => void;
|
|
61
|
+
debounceRenderTrajectories: (viewState: ViewState, noInterpolate?: boolean | undefined) => void;
|
|
62
|
+
onStart?: ((realtimeLayer: any) => void) | undefined;
|
|
63
|
+
onStop?: ((realtimeLayer: any) => void) | undefined;
|
|
64
|
+
defineProperties(options: RealtimeLayerMixinOptions): void;
|
|
65
|
+
attachToMap(map: any): void;
|
|
66
|
+
detachFromMap(): void;
|
|
67
|
+
start(): void;
|
|
68
|
+
startUpdateTime(): void;
|
|
69
|
+
stop(): void;
|
|
70
|
+
stopUpdateTime(): void;
|
|
71
|
+
renderTrajectoriesInternal(viewState: ViewState, noInterpolate?: boolean): boolean;
|
|
72
|
+
renderTrajectories(viewState: ViewState | undefined, noInterpolate: boolean | undefined): void;
|
|
73
|
+
setBbox(extent: [number, number, number, number], zoom: number): void;
|
|
74
|
+
getRefreshTimeInMs(zoom?: number | undefined): number;
|
|
75
|
+
getVehicle(filterFc: Function): GeoJSONFeature[];
|
|
76
|
+
getFeatureInfoAtCoordinate(coordinate: import("ol/coordinate").Coordinate, options: import("../../types").LayerGetFeatureInfoOptions): Promise<import("../../types").LayerGetFeatureInfoResponse>;
|
|
77
|
+
getTrajectoryInfos(id: string): Promise<{
|
|
78
|
+
stopSequence: WebSocketAPIMessageEventData<RealtimeFullTrajectory> | WebSocketAPIMessageEventData<GeoJSONFeature[]>;
|
|
79
|
+
fullTrajectory: WebSocketAPIMessageEventData<RealtimeFullTrajectory> | WebSocketAPIMessageEventData<GeoJSONFeature[]>;
|
|
80
|
+
}>;
|
|
81
|
+
purgeOutOfDateTrajectories(): void;
|
|
82
|
+
purgeTrajectory(trajectory: GeoJSONFeature, extent: [number, number, number, number], zoom: number): boolean;
|
|
83
|
+
addTrajectory(trajectory: GeoJSONFeature): void;
|
|
84
|
+
removeTrajectory(trajectoryOrId: any): void;
|
|
85
|
+
onZoomEnd(): void;
|
|
86
|
+
onDocumentVisibilityChange(): void;
|
|
87
|
+
onTrajectoryMessage(data: WebSocketAPIMessageEventData<GeoJSONFeature>): void;
|
|
88
|
+
onDeleteTrajectoryMessage(data: WebSocketAPIMessageEventData<string>): void;
|
|
89
|
+
highlightVehicle(id: string): void;
|
|
90
|
+
selectVehicle(id: string): void;
|
|
91
|
+
};
|
|
92
|
+
} & {
|
|
93
|
+
new (...args: any[]): {
|
|
94
|
+
options?: import("../mixins/PropertiesLayerMixin").PropertiesLayerMixinOptions | undefined;
|
|
95
|
+
olListenersKeys: import("ol/events").EventsKey[];
|
|
96
|
+
children: Layer<Source, import("ol/renderer/Layer").default<any>>[];
|
|
97
|
+
get copyrights(): string;
|
|
98
|
+
set copyrights(newCopyrights: string | string[]);
|
|
99
|
+
disabled: boolean;
|
|
100
|
+
readonly group: string;
|
|
101
|
+
readonly hitTolerance: boolean;
|
|
102
|
+
readonly key: string;
|
|
103
|
+
readonly map: Map;
|
|
104
|
+
readonly name: string;
|
|
105
|
+
olLayer: Layer<Source, import("ol/renderer/Layer").default<any>>;
|
|
106
|
+
parent: Layer<Source, import("ol/renderer/Layer").default<any>>;
|
|
107
|
+
visible: boolean;
|
|
108
|
+
setMapInternal: ((map: Map) => void) & ((map: Map | null) => void);
|
|
109
|
+
onChildrenChange(oldValue: Layer<Source, import("ol/renderer/Layer").default<any>>[]): void;
|
|
110
|
+
attachToMap(map: Map): void;
|
|
111
|
+
detachFromMap(): void;
|
|
112
|
+
flat(): any[];
|
|
113
|
+
addEventListener: (type: string, listener: import("ol/events").Listener) => void;
|
|
114
|
+
removeEventListener: (type: string, listener: import("ol/events").Listener) => void;
|
|
115
|
+
on: import("ol/layer/Layer").LayerOnSignature<import("ol/events").EventsKey>;
|
|
116
|
+
render: (frameState: import("ol/Map").FrameState | null, target: HTMLElement) => HTMLElement | null;
|
|
117
|
+
once: import("ol/layer/Layer").LayerOnSignature<import("ol/events").EventsKey>;
|
|
118
|
+
un: import("ol/layer/Layer").LayerOnSignature<void>;
|
|
119
|
+
getSource: () => Source | null;
|
|
120
|
+
getRenderSource: () => Source | null;
|
|
121
|
+
getFeatures: (pixel: import("ol/pixel").Pixel) => Promise<FeatureLike[]>;
|
|
122
|
+
getData: (pixel: import("ol/pixel").Pixel) => Float32Array | Uint8ClampedArray | Uint8Array | DataView | null;
|
|
123
|
+
isVisible: (view?: import("ol/View").default | import("ol/View").ViewStateLayerStateExtent | undefined) => boolean;
|
|
124
|
+
getAttributions: (view?: import("ol/View").default | import("ol/View").ViewStateLayerStateExtent | undefined) => string[];
|
|
125
|
+
unrender: () => void;
|
|
126
|
+
getDeclutter: () => string;
|
|
127
|
+
renderDeclutter: (frameState: import("ol/Map").FrameState, layerState: import("ol/layer/Layer").State) => void;
|
|
128
|
+
renderDeferred: (frameState: import("ol/Map").FrameState) => void;
|
|
129
|
+
getMapInternal: () => Map | null;
|
|
130
|
+
setMap: (map: Map | null) => void;
|
|
131
|
+
setSource: (source: Source | null) => void;
|
|
132
|
+
getRenderer: () => import("ol/renderer/Layer").default<any> | null;
|
|
133
|
+
hasRenderer: () => boolean;
|
|
134
|
+
getBackground: () => false | import("ol/layer/Base").BackgroundColor;
|
|
135
|
+
getClassName: () => string;
|
|
136
|
+
getLayerState: (managed?: boolean | undefined) => import("ol/layer/Layer").State;
|
|
137
|
+
getLayersArray: (array?: Layer<Source, import("ol/renderer/Layer").default<any>>[] | undefined) => Layer<Source, import("ol/renderer/Layer").default<any>>[];
|
|
138
|
+
getLayerStatesArray: (states?: import("ol/layer/Layer").State[] | undefined) => import("ol/layer/Layer").State[];
|
|
139
|
+
getExtent: () => import("ol/extent").Extent | undefined;
|
|
140
|
+
getMaxResolution: () => number;
|
|
141
|
+
getMinResolution: () => number;
|
|
142
|
+
getMinZoom: () => number;
|
|
143
|
+
getMaxZoom: () => number;
|
|
144
|
+
getOpacity: () => number;
|
|
145
|
+
getSourceState: () => import("ol/source/Source").State;
|
|
146
|
+
getVisible: () => boolean;
|
|
147
|
+
getZIndex: () => number | undefined;
|
|
148
|
+
setBackground: (background?: import("ol/layer/Base").BackgroundColor | undefined) => void;
|
|
149
|
+
setExtent: (extent: import("ol/extent").Extent | undefined) => void;
|
|
150
|
+
setMaxResolution: (maxResolution: number) => void;
|
|
151
|
+
setMinResolution: (minResolution: number) => void;
|
|
152
|
+
setMaxZoom: (maxZoom: number) => void;
|
|
153
|
+
setMinZoom: (minZoom: number) => void;
|
|
154
|
+
setOpacity: (opacity: number) => void;
|
|
155
|
+
setVisible: (visible: boolean) => void;
|
|
156
|
+
setZIndex: (zindex: number) => void;
|
|
157
|
+
get: (key: string) => any;
|
|
158
|
+
getKeys: () => string[];
|
|
159
|
+
getProperties: () => {
|
|
160
|
+
[x: string]: any;
|
|
161
|
+
};
|
|
162
|
+
getPropertiesInternal: () => {
|
|
163
|
+
[x: string]: any;
|
|
164
|
+
} | null;
|
|
165
|
+
hasProperties: () => boolean;
|
|
166
|
+
notify: (key: string, oldValue: any) => void;
|
|
167
|
+
addChangeListener: (key: string, listener: import("ol/events").Listener) => void;
|
|
168
|
+
removeChangeListener: (key: string, listener: import("ol/events").Listener) => void;
|
|
169
|
+
set: (key: string, value: any, silent?: boolean | undefined) => void;
|
|
170
|
+
setProperties: (values: {
|
|
171
|
+
[x: string]: any;
|
|
172
|
+
}, silent?: boolean | undefined) => void;
|
|
173
|
+
unset: (key: string, silent?: boolean | undefined) => void;
|
|
174
|
+
changed: () => void;
|
|
175
|
+
getRevision: () => number;
|
|
176
|
+
dispatchEvent: (event: string | import("ol/events/Event").default) => boolean | undefined;
|
|
177
|
+
getListeners: (type: string) => import("ol/events").Listener[] | undefined;
|
|
178
|
+
hasListener: (type?: string | undefined) => boolean;
|
|
179
|
+
dispose: () => void;
|
|
180
|
+
};
|
|
181
|
+
} & typeof Layer;
|
|
182
|
+
/**
|
|
183
|
+
* Responsible for loading and display data from the geOps realtime API.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* import { RealtimeLayer } from 'mobility-toolbox-js/ol';
|
|
187
|
+
*
|
|
188
|
+
* const layer = new RealtimeLayer({
|
|
189
|
+
* apiKey: "yourApiKey"
|
|
190
|
+
* // allowRenderWhenAnimating: false,
|
|
191
|
+
* // url: "wss://api.geops.io/tracker-ws/v1/",
|
|
192
|
+
* });
|
|
193
|
+
*
|
|
194
|
+
*
|
|
195
|
+
* @see <a href="/api/class/src/api/RealtimeAPI%20js~RealtimeAPI%20html">RealtimeAPI</a>
|
|
196
|
+
*
|
|
197
|
+
* @extends {ol/layer/Layer~Layer}
|
|
198
|
+
*
|
|
199
|
+
* @classproperty {boolean} allowRenderWhenAnimating - Allow rendering of the layer when the map is animating.
|
|
200
|
+
* @public
|
|
201
|
+
*/
|
|
202
|
+
declare class RealtimeLayer extends RealtimeLayer_base {
|
|
203
|
+
/** @private */
|
|
204
|
+
allowRenderWhenAnimating?: boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Constructor.
|
|
207
|
+
*
|
|
208
|
+
* @param {RealtimeLayerOptions} options
|
|
209
|
+
* @param {boolean} [options.allowRenderWhenAnimating=false] Allow rendering of the layer when the map is animating.
|
|
210
|
+
* @param {string} options.apiKey Access key for [geOps apis](https://developer.geops.io/).
|
|
211
|
+
* @param {string} [options.url="wss://api.geops.io/tracker-ws/v1/"] The geOps realtime API url.
|
|
212
|
+
*
|
|
213
|
+
*/
|
|
214
|
+
constructor(options: RealtimeLayerOptions);
|
|
215
|
+
/**
|
|
216
|
+
* @private
|
|
217
|
+
*/
|
|
218
|
+
createRenderer(): RealtimeLayerRenderer;
|
|
219
|
+
/** @private */
|
|
220
|
+
attachToMap(map: Map): void;
|
|
221
|
+
/**
|
|
222
|
+
* Destroy the container of the tracker.
|
|
223
|
+
* @private
|
|
224
|
+
*/
|
|
225
|
+
detachFromMap(): void;
|
|
226
|
+
/**
|
|
227
|
+
* Render the trajectories using current map's size, resolution and rotation.
|
|
228
|
+
* @param {boolean} noInterpolate if true, renders the vehicles without interpolating theirs positions.
|
|
229
|
+
* @overrides
|
|
230
|
+
* @private
|
|
231
|
+
*/
|
|
232
|
+
renderTrajectories(noInterpolate: boolean): void;
|
|
233
|
+
/**
|
|
234
|
+
* Launch renderTrajectories. it avoids duplicating code in renderTrajectories methhod.
|
|
235
|
+
* @private
|
|
236
|
+
* @override
|
|
237
|
+
*/
|
|
238
|
+
renderTrajectoriesInternal(viewState: ViewState, noInterpolate: boolean): boolean;
|
|
239
|
+
/**
|
|
240
|
+
* Return the delay in ms before the next rendering.
|
|
241
|
+
* @private
|
|
242
|
+
*/
|
|
243
|
+
getRefreshTimeInMs(): number;
|
|
244
|
+
/**
|
|
245
|
+
* On move end we update the websocket with the new bbox.
|
|
246
|
+
*
|
|
247
|
+
* @private
|
|
248
|
+
* @override
|
|
249
|
+
*/
|
|
250
|
+
onMoveEnd(evt: MapEvent | ObjectEvent): void;
|
|
251
|
+
/**
|
|
252
|
+
* Function called on moveend event only when the zoom has changed.
|
|
253
|
+
*
|
|
254
|
+
* @param {ol/MapEvent~MapEvent} evt Moveend event.
|
|
255
|
+
* @private
|
|
256
|
+
* @override
|
|
257
|
+
*/
|
|
258
|
+
onZoomEnd(): void;
|
|
259
|
+
highlight(feature: Feature): void;
|
|
260
|
+
select(feature: Feature): void;
|
|
261
|
+
/**
|
|
262
|
+
* Remove the trajectory form the list if necessary.
|
|
263
|
+
*
|
|
264
|
+
* @private
|
|
265
|
+
*/
|
|
266
|
+
purgeTrajectory(trajectory: RealtimeTrajectory, extent: [number, number, number, number], zoom: number): boolean;
|
|
267
|
+
/**
|
|
268
|
+
* Send the current bbox to the websocket
|
|
269
|
+
*
|
|
270
|
+
* @private
|
|
271
|
+
*/
|
|
272
|
+
setBbox(extent?: [number, number, number, number], zoom?: number): void;
|
|
273
|
+
/**
|
|
274
|
+
* Highlight the trajectory of journey.
|
|
275
|
+
* @private
|
|
276
|
+
*/
|
|
277
|
+
highlightTrajectory(id: RealtimeTrainId): Promise<Feature[] | undefined>;
|
|
278
|
+
/**
|
|
279
|
+
* Create a copy of the RealtimeLayer.
|
|
280
|
+
* @param {Object} newOptions Options to override
|
|
281
|
+
* @return {RealtimeLayer} A RealtimeLayer
|
|
282
|
+
*/
|
|
283
|
+
clone(newOptions: RealtimeLayerOptions): RealtimeLayer;
|
|
284
|
+
}
|
|
285
|
+
export default RealtimeLayer;
|
|
@@ -11,7 +11,7 @@ import RealtimeLayerRenderer from '../renderers/RealtimeLayerRenderer';
|
|
|
11
11
|
/** @private */
|
|
12
12
|
const format = new GeoJSON();
|
|
13
13
|
/**
|
|
14
|
-
* Responsible for loading and display data from the geOps
|
|
14
|
+
* Responsible for loading and display data from the geOps realtime API.
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* import { RealtimeLayer } from 'mobility-toolbox-js/ol';
|
|
@@ -38,7 +38,7 @@ class RealtimeLayer extends RealtimeLayerMixin(MobilityLayerMixin(Layer)) {
|
|
|
38
38
|
* @param {RealtimeLayerOptions} options
|
|
39
39
|
* @param {boolean} [options.allowRenderWhenAnimating=false] Allow rendering of the layer when the map is animating.
|
|
40
40
|
* @param {string} options.apiKey Access key for [geOps apis](https://developer.geops.io/).
|
|
41
|
-
* @param {string} [options.url="wss://api.geops.io/tracker-ws/v1/"] The geOps
|
|
41
|
+
* @param {string} [options.url="wss://api.geops.io/tracker-ws/v1/"] The geOps realtime API url.
|
|
42
42
|
*
|
|
43
43
|
*/
|
|
44
44
|
constructor(options) {
|
|
@@ -86,9 +86,12 @@ class RealtimeLayer extends RealtimeLayerMixin(MobilityLayerMixin(Layer)) {
|
|
|
86
86
|
if (this.visible) {
|
|
87
87
|
this.start();
|
|
88
88
|
}
|
|
89
|
+
// @ts-expect-error - bad ts check RealtimeLayer is a BaseLayer
|
|
89
90
|
const index = this.map.getLayers().getArray().indexOf(this);
|
|
90
91
|
this.map.getLayers().insertAt(index, this.vectorLayer);
|
|
91
|
-
this.olListenersKeys.push(...this.map.on(['moveend', 'change:target'],
|
|
92
|
+
this.olListenersKeys.push(...this.map.on(['moveend', 'change:target'],
|
|
93
|
+
// @ts-expect-error - bad ol definitions
|
|
94
|
+
(evt) => {
|
|
92
95
|
const view = (evt.map || evt.target).getView();
|
|
93
96
|
if (view.getAnimating() || view.getInteracting()) {
|
|
94
97
|
return;
|
|
@@ -174,8 +177,10 @@ class RealtimeLayer extends RealtimeLayerMixin(MobilityLayerMixin(Layer)) {
|
|
|
174
177
|
if (isRendered) {
|
|
175
178
|
/** @private */
|
|
176
179
|
this.renderedViewState = Object.assign({}, viewState);
|
|
177
|
-
|
|
178
|
-
|
|
180
|
+
// @ts-expect-error - we are in the same class
|
|
181
|
+
const { container } = this.getRenderer();
|
|
182
|
+
if (container) {
|
|
183
|
+
container.style.transform = '';
|
|
179
184
|
}
|
|
180
185
|
}
|
|
181
186
|
return isRendered;
|
|
@@ -266,7 +271,7 @@ class RealtimeLayer extends RealtimeLayerMixin(MobilityLayerMixin(Layer)) {
|
|
|
266
271
|
// it will trigger a js error on calculateExtent function.
|
|
267
272
|
return false;
|
|
268
273
|
}
|
|
269
|
-
return super.purgeTrajectory(trajectory, extent || this.map.getView().calculateExtent(), zoom || this.map.getView().getZoom());
|
|
274
|
+
return super.purgeTrajectory(trajectory, extent || this.map.getView().calculateExtent(), zoom || this.map.getView().getZoom() || 0);
|
|
270
275
|
}
|
|
271
276
|
/**
|
|
272
277
|
* Send the current bbox to the websocket
|
|
@@ -274,7 +279,8 @@ class RealtimeLayer extends RealtimeLayerMixin(MobilityLayerMixin(Layer)) {
|
|
|
274
279
|
* @private
|
|
275
280
|
*/
|
|
276
281
|
setBbox(extent, zoom) {
|
|
277
|
-
super.setBbox(extent ||
|
|
282
|
+
super.setBbox(extent ||
|
|
283
|
+
this.map.getView().calculateExtent(), zoom || this.map.getView().getZoom() || 0);
|
|
278
284
|
}
|
|
279
285
|
/**
|
|
280
286
|
* Highlight the trajectory of journey.
|