@flowmap.gl/data 8.0.0-alpha.9 → 8.0.1

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 (70) hide show
  1. package/.turbo/turbo-build.log +3 -0
  2. package/.turbo/turbo-dev.log +6 -0
  3. package/LICENSE +2 -2
  4. package/dist/FlowmapAggregateAccessors.d.ts +4 -4
  5. package/dist/FlowmapAggregateAccessors.d.ts.map +1 -1
  6. package/dist/FlowmapAggregateAccessors.js +16 -9
  7. package/dist/FlowmapSelectors.d.ts +41 -87
  8. package/dist/FlowmapSelectors.d.ts.map +1 -1
  9. package/dist/FlowmapSelectors.js +174 -161
  10. package/dist/FlowmapState.d.ts +7 -5
  11. package/dist/FlowmapState.d.ts.map +1 -1
  12. package/dist/FlowmapState.js +6 -1
  13. package/dist/cluster/ClusterIndex.d.ts +4 -4
  14. package/dist/cluster/ClusterIndex.d.ts.map +1 -1
  15. package/dist/cluster/ClusterIndex.js +5 -17
  16. package/dist/cluster/cluster.d.ts +25 -5
  17. package/dist/cluster/cluster.d.ts.map +1 -1
  18. package/dist/cluster/cluster.js +115 -57
  19. package/dist/colors.d.ts +3 -3
  20. package/dist/colors.d.ts.map +1 -1
  21. package/dist/colors.js +19 -8
  22. package/dist/getViewStateForLocations.d.ts +3 -3
  23. package/dist/getViewStateForLocations.d.ts.map +1 -1
  24. package/dist/getViewStateForLocations.js +33 -12
  25. package/dist/index.d.ts +3 -3
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +9 -4
  28. package/dist/provider/FlowmapDataProvider.d.ts +7 -2
  29. package/dist/provider/FlowmapDataProvider.d.ts.map +1 -1
  30. package/dist/provider/FlowmapDataProvider.js +11 -6
  31. package/dist/provider/LocalFlowmapDataProvider.d.ts +15 -4
  32. package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -1
  33. package/dist/provider/LocalFlowmapDataProvider.js +98 -81
  34. package/dist/selector-functions.d.ts +10 -0
  35. package/dist/selector-functions.d.ts.map +1 -0
  36. package/dist/selector-functions.js +65 -0
  37. package/dist/time.d.ts.map +1 -1
  38. package/dist/time.js +6 -1
  39. package/dist/types.d.ts +20 -18
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js +9 -4
  42. package/dist/util.d.ts.map +1 -1
  43. package/dist/util.js +6 -1
  44. package/package.json +22 -27
  45. package/src/FlowmapAggregateAccessors.ts +21 -10
  46. package/src/FlowmapSelectors.ts +304 -280
  47. package/src/FlowmapState.ts +13 -5
  48. package/src/cluster/ClusterIndex.ts +23 -28
  49. package/src/cluster/cluster.ts +165 -73
  50. package/src/colors.ts +13 -9
  51. package/src/getViewStateForLocations.ts +23 -7
  52. package/src/index.ts +9 -3
  53. package/src/provider/FlowmapDataProvider.ts +23 -7
  54. package/src/provider/LocalFlowmapDataProvider.ts +68 -5
  55. package/src/selector-functions.ts +93 -0
  56. package/src/time.ts +6 -0
  57. package/src/types.ts +23 -15
  58. package/src/util.ts +6 -0
  59. package/dist/provider/WorkerFlowmapDataProvider.d.ts +0 -42
  60. package/dist/provider/WorkerFlowmapDataProvider.d.ts.map +0 -1
  61. package/dist/provider/WorkerFlowmapDataProvider.js +0 -80
  62. package/dist/provider/WorkerFlowmapDataProviderWorker.d.ts +0 -2
  63. package/dist/provider/WorkerFlowmapDataProviderWorker.d.ts.map +0 -1
  64. package/dist/provider/WorkerFlowmapDataProviderWorker.js +0 -4
  65. package/dist/provider/createWorkerDataProvider.d.ts +0 -3
  66. package/dist/provider/createWorkerDataProvider.d.ts.map +0 -1
  67. package/dist/provider/createWorkerDataProvider.js +0 -21
  68. package/src/provider/WorkerFlowmapDataProvider.ts +0 -121
  69. package/src/provider/WorkerFlowmapDataProviderWorker.ts +0 -4
  70. package/src/provider/createWorkerDataProvider.ts +0 -18
@@ -1,3 +1,9 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
1
7
  import type FlowmapDataProvider from './FlowmapDataProvider';
2
8
  import type {
3
9
  Cluster,
@@ -15,9 +21,12 @@ import {
15
21
  GetViewStateOptions,
16
22
  getViewStateForLocations,
17
23
  } from '../getViewStateForLocations';
24
+ import {ClusterIndex} from '../cluster/ClusterIndex';
18
25
 
19
- export default class LocalFlowmapDataProvider<L, F>
20
- implements FlowmapDataProvider<L, F>
26
+ export default class LocalFlowmapDataProvider<
27
+ L extends Record<string, any>,
28
+ F extends Record<string, any>,
29
+ > implements FlowmapDataProvider<L, F>
21
30
  {
22
31
  private selectors: FlowmapSelectors<L, F>;
23
32
  private flowmapData: FlowmapData<L, F> | undefined;
@@ -34,14 +43,26 @@ export default class LocalFlowmapDataProvider<L, F>
34
43
  this.selectors.setAccessors(accessors);
35
44
  }
36
45
 
37
- async setFlowmapData(flowmapData: FlowmapData<L, F>): Promise<void> {
46
+ setFlowmapData(flowmapData: FlowmapData<L, F>): void {
38
47
  this.flowmapData = flowmapData;
39
48
  }
40
49
 
50
+ getSelectors(): FlowmapSelectors<L, F> {
51
+ return this.selectors;
52
+ }
53
+
54
+ getFlowmapData(): FlowmapData<L, F> | undefined {
55
+ return this.flowmapData;
56
+ }
57
+
41
58
  async setFlowmapState(flowmapState: FlowmapState): Promise<void> {
42
59
  this.flowmapState = flowmapState;
43
60
  }
44
61
 
62
+ getFlowmapState(): FlowmapState | undefined {
63
+ return this.flowmapState;
64
+ }
65
+
45
66
  async getFlowByIndex(idx: number): Promise<F | AggregateFlow | undefined> {
46
67
  if (!this.flowmapState || !this.flowmapData) {
47
68
  return undefined;
@@ -53,6 +74,7 @@ export default class LocalFlowmapDataProvider<L, F>
53
74
  return flows?.[idx];
54
75
  }
55
76
 
77
+ // TODO: this is unreliable, should replace by unqiue ID
56
78
  async getLocationByIndex(idx: number): Promise<L | ClusterNode | undefined> {
57
79
  if (!this.flowmapState || !this.flowmapData) {
58
80
  return undefined;
@@ -71,7 +93,7 @@ export default class LocalFlowmapDataProvider<L, F>
71
93
  return this.selectors.getLayersData(this.flowmapState, this.flowmapData);
72
94
  }
73
95
 
74
- async getLocationById(id: string): Promise<L | Cluster | undefined> {
96
+ async getLocationById(id: string | number): Promise<L | Cluster | undefined> {
75
97
  if (!this.flowmapState || !this.flowmapData) {
76
98
  return undefined;
77
99
  }
@@ -92,7 +114,9 @@ export default class LocalFlowmapDataProvider<L, F>
92
114
  return locationsById?.get(id);
93
115
  }
94
116
 
95
- async getTotalsForLocation(id: string): Promise<LocationTotals | undefined> {
117
+ async getTotalsForLocation(
118
+ id: string | number,
119
+ ): Promise<LocationTotals | undefined> {
96
120
  if (!this.flowmapState || !this.flowmapData) {
97
121
  return undefined;
98
122
  }
@@ -119,4 +143,43 @@ export default class LocalFlowmapDataProvider<L, F>
119
143
  opts,
120
144
  );
121
145
  }
146
+
147
+ async updateLayersData(
148
+ setLayersData: (layersData: LayersData | undefined) => void,
149
+ ) {
150
+ setLayersData(await this.getLayersData());
151
+ }
152
+
153
+ getClusterZoom(): number | undefined {
154
+ return this.flowmapState && this.flowmapData
155
+ ? this.selectors.getClusterZoom(this.flowmapState, this.flowmapData)
156
+ : undefined;
157
+ }
158
+
159
+ getClusterIndex(): ClusterIndex<F> | undefined {
160
+ return this.flowmapState && this.flowmapData
161
+ ? this.selectors.getClusterIndex(this.flowmapState, this.flowmapData)
162
+ : undefined;
163
+ }
164
+
165
+ getLocationsById(): Map<string | number, L> | undefined {
166
+ return this.flowmapState && this.flowmapData
167
+ ? this.selectors.getLocationsById(this.flowmapState, this.flowmapData)
168
+ : undefined;
169
+ }
170
+
171
+ getLocationTotals(): Map<string | number, LocationTotals> | undefined {
172
+ return this.flowmapState && this.flowmapData
173
+ ? this.selectors.getLocationTotals(this.flowmapState, this.flowmapData)
174
+ : undefined;
175
+ }
176
+
177
+ getFlowsForFlowmapLayer(): Array<F | AggregateFlow> | undefined {
178
+ return this.flowmapState && this.flowmapData
179
+ ? this.selectors.getFlowsForFlowmapLayer(
180
+ this.flowmapState,
181
+ this.flowmapData,
182
+ )
183
+ : undefined;
184
+ }
122
185
  }
@@ -0,0 +1,93 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import {WebMercatorViewport} from '@math.gl/web-mercator';
8
+ import {
9
+ ClusterLevel,
10
+ isCluster,
11
+ LocationAccessors,
12
+ ViewportProps,
13
+ } from './types';
14
+ import {scaleLinear} from 'd3-scale';
15
+ import {ClusterIndex, LocationWeightGetter} from './cluster/ClusterIndex';
16
+ import {descending} from 'd3-array';
17
+
18
+ // TODO: use re-reselect
19
+
20
+ export const getViewportBoundingBox = (
21
+ viewport: ViewportProps,
22
+ maxLocationCircleSize = 0,
23
+ ): [number, number, number, number] => {
24
+ const pad = maxLocationCircleSize;
25
+ const bounds = new WebMercatorViewport({
26
+ ...viewport,
27
+ width: viewport.width + pad * 2,
28
+ height: viewport.height + pad * 2,
29
+ }).getBounds();
30
+ return [bounds[0][0], bounds[0][1], bounds[1][0], bounds[1][1]];
31
+ };
32
+
33
+ export const getFlowThicknessScale = (
34
+ magnitudeExtent: [number, number] | undefined,
35
+ ) => {
36
+ if (!magnitudeExtent) return undefined;
37
+ return scaleLinear()
38
+ .range([0.025, 0.5])
39
+ .domain([
40
+ 0,
41
+ // should support diff mode too
42
+ Math.max.apply(
43
+ null,
44
+ magnitudeExtent.map((x: number | undefined) => Math.abs(x || 0)),
45
+ ),
46
+ ]);
47
+ };
48
+
49
+ /**
50
+ * Adding meaningful cluster names.
51
+ * NOTE: this will mutate the nodes in clusterIndex
52
+ */
53
+ export function addClusterNames<L, F>(
54
+ clusterIndex: ClusterIndex<F>,
55
+ clusterLevels: ClusterLevel[],
56
+ locationsById: Map<string | number, L>,
57
+ locationAccessors: LocationAccessors<L>,
58
+ getLocationWeight: LocationWeightGetter,
59
+ ): void {
60
+ const {getLocationId, getLocationName, getLocationClusterName} =
61
+ locationAccessors;
62
+ const getName = (id: string | number) => {
63
+ const loc = locationsById.get(id);
64
+ if (loc) {
65
+ return getLocationName ? getLocationName(loc) : getLocationId(loc) || id;
66
+ }
67
+ return `"${id}"`;
68
+ };
69
+ for (const level of clusterLevels) {
70
+ for (const node of level.nodes) {
71
+ // Here mutating the nodes (adding names)
72
+ if (isCluster(node)) {
73
+ const leaves = clusterIndex.expandCluster(node);
74
+
75
+ leaves.sort((a, b) =>
76
+ descending(getLocationWeight(a), getLocationWeight(b)),
77
+ );
78
+
79
+ if (getLocationClusterName) {
80
+ node.name = getLocationClusterName(leaves);
81
+ } else {
82
+ const topId = leaves[0];
83
+ const otherId = leaves.length === 2 ? leaves[1] : undefined;
84
+ node.name = `"${getName(topId)}" and ${
85
+ otherId ? `"${getName(otherId)}"` : `${leaves.length - 1} others`
86
+ }`;
87
+ }
88
+ } else {
89
+ (node as any).name = getName(node.id);
90
+ }
91
+ }
92
+ }
93
+ }
package/src/time.ts CHANGED
@@ -1,3 +1,9 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
1
7
  import {timeFormat, timeParse} from 'd3-time-format';
2
8
  import {
3
9
  timeDay,
package/src/types.ts CHANGED
@@ -1,6 +1,13 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
1
7
  export type FlowmapData<L, F> = {
2
- locations: L[] | undefined;
3
- flows: F[] | undefined;
8
+ locations: Iterable<L> | undefined;
9
+ flows: Iterable<F> | undefined;
10
+ clusterLevels?: ClusterLevels;
4
11
  };
5
12
 
6
13
  export interface ViewState {
@@ -16,19 +23,19 @@ export type FlowAccessor<F, T> = (flow: F) => T; // objectInfo?: AccessorObjectI
16
23
  export type LocationAccessor<L, T> = (location: L) => T;
17
24
 
18
25
  export interface FlowAccessors<F> {
19
- getFlowOriginId: FlowAccessor<F, string>;
20
- getFlowDestId: FlowAccessor<F, string>;
26
+ getFlowOriginId: FlowAccessor<F, string | number>;
27
+ getFlowDestId: FlowAccessor<F, string | number>;
21
28
  getFlowMagnitude: FlowAccessor<F, number>;
22
29
  getFlowTime?: FlowAccessor<F, Date>; // TODO: use number instead of Date
23
30
  // getFlowColor?: FlowAccessor<string | undefined>;
24
31
  }
25
32
 
26
33
  export interface LocationAccessors<L> {
27
- getLocationId: LocationAccessor<L, string>;
34
+ getLocationId: LocationAccessor<L, string | number>;
28
35
  getLocationName?: LocationAccessor<L, string>;
29
36
  getLocationLat: LocationAccessor<L, number>;
30
37
  getLocationLon: LocationAccessor<L, number>;
31
- getLocationClusterName?: (locationIds: string[]) => string;
38
+ getLocationClusterName?: (locationIds: (string | number)[]) => string;
32
39
  // getLocationTotalIn?: LocationAccessor<number>;
33
40
  // getLocationTotalOut?: LocationAccessor<number>;
34
41
  // getLocationTotalInternal?: LocationAccessor<number>;
@@ -59,9 +66,9 @@ export interface ViewportProps {
59
66
  height: number;
60
67
  latitude: number;
61
68
  longitude: number;
62
- zoom: number;
63
- bearing: number;
64
- pitch: number;
69
+ zoom?: number;
70
+ bearing?: number;
71
+ pitch?: number;
65
72
  altitude?: number;
66
73
  maxZoom?: number;
67
74
  minZoom?: number;
@@ -74,7 +81,7 @@ export interface ViewportProps {
74
81
  }
75
82
 
76
83
  export interface ClusterNode {
77
- id: string;
84
+ id: string | number;
78
85
  zoom: number;
79
86
  lat: number;
80
87
  lon: number;
@@ -104,8 +111,8 @@ export function isLocationClusterNode<L>(l: L | ClusterNode): l is ClusterNode {
104
111
  }
105
112
 
106
113
  export interface AggregateFlow {
107
- origin: string;
108
- dest: string;
114
+ origin: string | number;
115
+ dest: string | number;
109
116
  count: number;
110
117
  aggregate: true;
111
118
  }
@@ -115,9 +122,9 @@ export function isAggregateFlow(
115
122
  ): flow is AggregateFlow {
116
123
  return (
117
124
  flow &&
118
- flow.origin !== undefined &&
119
- flow.dest !== undefined &&
120
- flow.count !== undefined &&
125
+ // flow.origin !== undefined &&
126
+ // flow.dest !== undefined &&
127
+ // flow.count !== undefined &&
121
128
  (flow.aggregate ? true : false)
122
129
  );
123
130
  }
@@ -159,6 +166,7 @@ export interface FlowLinesLayerAttributes {
159
166
  export interface LayersData {
160
167
  circleAttributes: FlowCirclesLayerAttributes;
161
168
  lineAttributes: FlowLinesLayerAttributes;
169
+ locationLabels?: string[];
162
170
  }
163
171
 
164
172
  export type LayersDataAttrValues<T> = {value: T; size: number};
package/src/util.ts CHANGED
@@ -1,3 +1,9 @@
1
+ /*
2
+ * Copyright (c) Flowmap.gl contributors
3
+ * Copyright (c) 2018-2020 Teralytics
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
1
7
  import {createSelectorCreator, defaultMemoize} from 'reselect';
2
8
 
3
9
  export const createDebugSelector = createSelectorCreator(defaultMemoize, {
@@ -1,42 +0,0 @@
1
- import FlowmapDataProvider from './FlowmapDataProvider';
2
- import { Cluster, ClusterNode, FlowmapData, FlowmapDataAccessors, LayersData, LocationTotals, ViewportProps } from '../types';
3
- import { FlowmapState } from '../FlowmapState';
4
- import { AggregateFlow } from '..';
5
- export declare type WorkerDataProviderProps = {
6
- flows: {
7
- url: string;
8
- columns: {
9
- originId: string;
10
- destId: string;
11
- count: string;
12
- };
13
- };
14
- locations: {
15
- url: string;
16
- columns: {
17
- id: string;
18
- name: string;
19
- lat: string;
20
- lon: string;
21
- };
22
- };
23
- };
24
- export declare type LocationDatum = Record<string, unknown>;
25
- export declare type FlowDatum = Record<string, unknown>;
26
- export default class WorkerFlowmapDataProvider implements FlowmapDataProvider<LocationDatum, FlowDatum> {
27
- private props;
28
- private localProvider;
29
- private flowmapState;
30
- constructor(props: WorkerDataProviderProps);
31
- loadData(): Promise<void>;
32
- setAccessors(accessors: FlowmapDataAccessors<LocationDatum, FlowDatum>): void;
33
- setFlowmapData(flowmapData: FlowmapData<LocationDatum, FlowDatum>): Promise<void>;
34
- setFlowmapState(flowmapState: FlowmapState): Promise<void>;
35
- getFlowByIndex(idx: number): Promise<FlowDatum | AggregateFlow | undefined>;
36
- getLocationByIndex(idx: number): Promise<LocationDatum | ClusterNode | undefined>;
37
- getLayersData(): Promise<LayersData | undefined>;
38
- getLocationById(id: string): Promise<LocationDatum | Cluster | undefined>;
39
- getTotalsForLocation(id: string): Promise<LocationTotals | undefined>;
40
- getViewportForLocations(dims: [number, number]): Promise<ViewportProps | undefined>;
41
- }
42
- //# sourceMappingURL=WorkerFlowmapDataProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkerFlowmapDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/WorkerFlowmapDataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,OAAO,EACP,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,aAAa,EAAC,MAAM,IAAI,CAAC;AAOjC,oBAAY,uBAAuB,GAAG;IACpC,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,SAAS,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE;YACP,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;CACH,CAAC;AAEF,oBAAY,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpD,oBAAY,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,yBACnB,YAAW,mBAAmB,CAAC,aAAa,EAAE,SAAS,CAAC;IAExD,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,aAAa,CAAqD;IAC1E,OAAO,CAAC,YAAY,CAA2B;gBAEnC,KAAK,EAAE,uBAAuB;IAmBpC,QAAQ;IAQd,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,aAAa,EAAE,SAAS,CAAC;IAIhE,cAAc,CAClB,WAAW,EAAE,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC;IAIV,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,cAAc,CAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;IAI3C,kBAAkB,CACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;IAI7C,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAIhD,eAAe,CACnB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;IAIzC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAI3E,uBAAuB,CACrB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACrB,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAGtC"}
@@ -1,80 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import LocalFlowmapDataProvider from './LocalFlowmapDataProvider';
11
- import { load } from '@loaders.gl/core';
12
- import { CSVLoader } from '@loaders.gl/csv';
13
- const LOADERS = [CSVLoader];
14
- export default class WorkerFlowmapDataProvider {
15
- constructor(props) {
16
- this.props = props;
17
- this.localProvider = new LocalFlowmapDataProvider({
18
- getFlowOriginId: (flow) => flow[props.flows.columns.originId],
19
- getFlowDestId: (flow) => flow[props.flows.columns.destId],
20
- getFlowMagnitude: (flow) => flow[props.flows.columns.count],
21
- // getFlowTime: (flow) => flow.time,
22
- getLocationLat: (location) => location[props.locations.columns.lat],
23
- getLocationLon: (location) => location[props.locations.columns.lon],
24
- getLocationName: (location) => location[props.locations.columns.name],
25
- getLocationId: (location) => location[props.locations.columns.id],
26
- });
27
- this.flowmapState = undefined;
28
- }
29
- loadData() {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- const [locations, flows] = yield Promise.all([
32
- load(this.props.locations.url, LOADERS),
33
- load(this.props.flows.url, LOADERS),
34
- ]);
35
- yield this.localProvider.setFlowmapData({ locations, flows });
36
- });
37
- }
38
- setAccessors(accessors) {
39
- throw new Error('Not supported');
40
- }
41
- setFlowmapData(flowmapData) {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- throw new Error('Not supported');
44
- });
45
- }
46
- setFlowmapState(flowmapState) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- yield this.localProvider.setFlowmapState(flowmapState);
49
- });
50
- }
51
- getFlowByIndex(idx) {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- return this.localProvider.getFlowByIndex(idx);
54
- });
55
- }
56
- getLocationByIndex(idx) {
57
- return __awaiter(this, void 0, void 0, function* () {
58
- return this.localProvider.getLocationByIndex(idx);
59
- });
60
- }
61
- getLayersData() {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- return yield this.localProvider.getLayersData();
64
- });
65
- }
66
- getLocationById(id) {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- return this.localProvider.getLocationById(id);
69
- });
70
- }
71
- getTotalsForLocation(id) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- return this.localProvider.getTotalsForLocation(id);
74
- });
75
- }
76
- getViewportForLocations(dims) {
77
- return this.localProvider.getViewportForLocations(dims);
78
- }
79
- }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ya2VyRmxvd21hcERhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9Xb3JrZXJGbG93bWFwRGF0YVByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBLE9BQU8sd0JBQXdCLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBeUI1QixNQUFNLENBQUMsT0FBTyxPQUFPLHlCQUF5QjtJQU81QyxZQUFZLEtBQThCO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQztZQUNoRCxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQVc7WUFDdkUsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFXO1lBQ25FLGdCQUFnQixFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFXO1lBQ3JFLG9DQUFvQztZQUNwQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUMzQixRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFXO1lBQ2pELGNBQWMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQzNCLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQVc7WUFDakQsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDNUIsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBVztZQUNsRCxhQUFhLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUMxQixRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFXO1NBQ2pELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFSyxRQUFROztZQUNaLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztnQkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7YUFDcEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7S0FBQTtJQUVELFlBQVksQ0FBQyxTQUF5RDtRQUNwRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFSyxjQUFjLENBQ2xCLFdBQWtEOztZQUVsRCxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FBQyxZQUEwQjs7WUFDOUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxDQUFDO0tBQUE7SUFFSyxjQUFjLENBQ2xCLEdBQVc7O1lBRVgsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxDQUFDO0tBQUE7SUFFSyxrQkFBa0IsQ0FDdEIsR0FBVzs7WUFFWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEQsQ0FBQztLQUFBO0lBRUssYUFBYTs7WUFDakIsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEQsQ0FBQztLQUFBO0lBRUssZUFBZSxDQUNuQixFQUFVOztZQUVWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztLQUFBO0lBRUssb0JBQW9CLENBQUMsRUFBVTs7WUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7S0FBQTtJQUVELHVCQUF1QixDQUNyQixJQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEZsb3dtYXBEYXRhUHJvdmlkZXIgZnJvbSAnLi9GbG93bWFwRGF0YVByb3ZpZGVyJztcbmltcG9ydCB7XG4gIENsdXN0ZXIsXG4gIENsdXN0ZXJOb2RlLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIExheWVyc0RhdGEsXG4gIExvY2F0aW9uVG90YWxzLFxuICBWaWV3cG9ydFByb3BzLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0Zsb3dtYXBTdGF0ZX0gZnJvbSAnLi4vRmxvd21hcFN0YXRlJztcbmltcG9ydCB7QWdncmVnYXRlRmxvd30gZnJvbSAnLi4nO1xuaW1wb3J0IExvY2FsRmxvd21hcERhdGFQcm92aWRlciBmcm9tICcuL0xvY2FsRmxvd21hcERhdGFQcm92aWRlcic7XG5pbXBvcnQge2xvYWR9IGZyb20gJ0Bsb2FkZXJzLmdsL2NvcmUnO1xuaW1wb3J0IHtDU1ZMb2FkZXJ9IGZyb20gJ0Bsb2FkZXJzLmdsL2Nzdic7XG5cbmNvbnN0IExPQURFUlMgPSBbQ1NWTG9hZGVyXTtcblxuZXhwb3J0IHR5cGUgV29ya2VyRGF0YVByb3ZpZGVyUHJvcHMgPSB7XG4gIGZsb3dzOiB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgY29sdW1uczoge1xuICAgICAgb3JpZ2luSWQ6IHN0cmluZztcbiAgICAgIGRlc3RJZDogc3RyaW5nO1xuICAgICAgY291bnQ6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBsb2NhdGlvbnM6IHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBjb2x1bW5zOiB7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgbGF0OiBzdHJpbmc7XG4gICAgICBsb246IHN0cmluZztcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgTG9jYXRpb25EYXR1bSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZXhwb3J0IHR5cGUgRmxvd0RhdHVtID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvcmtlckZsb3dtYXBEYXRhUHJvdmlkZXJcbiAgaW1wbGVtZW50cyBGbG93bWFwRGF0YVByb3ZpZGVyPExvY2F0aW9uRGF0dW0sIEZsb3dEYXR1bT5cbntcbiAgcHJpdmF0ZSBwcm9wczogV29ya2VyRGF0YVByb3ZpZGVyUHJvcHM7XG4gIHByaXZhdGUgbG9jYWxQcm92aWRlcjogTG9jYWxGbG93bWFwRGF0YVByb3ZpZGVyPExvY2F0aW9uRGF0dW0sIEZsb3dEYXR1bT47XG4gIHByaXZhdGUgZmxvd21hcFN0YXRlOiBGbG93bWFwU3RhdGUgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFdvcmtlckRhdGFQcm92aWRlclByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMubG9jYWxQcm92aWRlciA9IG5ldyBMb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXIoe1xuICAgICAgZ2V0Rmxvd09yaWdpbklkOiAoZmxvdykgPT4gZmxvd1twcm9wcy5mbG93cy5jb2x1bW5zLm9yaWdpbklkXSBhcyBzdHJpbmcsXG4gICAgICBnZXRGbG93RGVzdElkOiAoZmxvdykgPT4gZmxvd1twcm9wcy5mbG93cy5jb2x1bW5zLmRlc3RJZF0gYXMgc3RyaW5nLFxuICAgICAgZ2V0Rmxvd01hZ25pdHVkZTogKGZsb3cpID0+IGZsb3dbcHJvcHMuZmxvd3MuY29sdW1ucy5jb3VudF0gYXMgbnVtYmVyLFxuICAgICAgLy8gZ2V0Rmxvd1RpbWU6IChmbG93KSA9PiBmbG93LnRpbWUsXG4gICAgICBnZXRMb2NhdGlvbkxhdDogKGxvY2F0aW9uKSA9PlxuICAgICAgICBsb2NhdGlvbltwcm9wcy5sb2NhdGlvbnMuY29sdW1ucy5sYXRdIGFzIG51bWJlcixcbiAgICAgIGdldExvY2F0aW9uTG9uOiAobG9jYXRpb24pID0+XG4gICAgICAgIGxvY2F0aW9uW3Byb3BzLmxvY2F0aW9ucy5jb2x1bW5zLmxvbl0gYXMgbnVtYmVyLFxuICAgICAgZ2V0TG9jYXRpb25OYW1lOiAobG9jYXRpb24pID0+XG4gICAgICAgIGxvY2F0aW9uW3Byb3BzLmxvY2F0aW9ucy5jb2x1bW5zLm5hbWVdIGFzIHN0cmluZyxcbiAgICAgIGdldExvY2F0aW9uSWQ6IChsb2NhdGlvbikgPT5cbiAgICAgICAgbG9jYXRpb25bcHJvcHMubG9jYXRpb25zLmNvbHVtbnMuaWRdIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgICB0aGlzLmZsb3dtYXBTdGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGxvYWREYXRhKCkge1xuICAgIGNvbnN0IFtsb2NhdGlvbnMsIGZsb3dzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGxvYWQodGhpcy5wcm9wcy5sb2NhdGlvbnMudXJsLCBMT0FERVJTKSxcbiAgICAgIGxvYWQodGhpcy5wcm9wcy5mbG93cy51cmwsIExPQURFUlMpLFxuICAgIF0pO1xuICAgIGF3YWl0IHRoaXMubG9jYWxQcm92aWRlci5zZXRGbG93bWFwRGF0YSh7bG9jYXRpb25zLCBmbG93c30pO1xuICB9XG5cbiAgc2V0QWNjZXNzb3JzKGFjY2Vzc29yczogRmxvd21hcERhdGFBY2Nlc3NvcnM8TG9jYXRpb25EYXR1bSwgRmxvd0RhdHVtPikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgYXN5bmMgc2V0Rmxvd21hcERhdGEoXG4gICAgZmxvd21hcERhdGE6IEZsb3dtYXBEYXRhPExvY2F0aW9uRGF0dW0sIEZsb3dEYXR1bT4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgYXN5bmMgc2V0Rmxvd21hcFN0YXRlKGZsb3dtYXBTdGF0ZTogRmxvd21hcFN0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2NhbFByb3ZpZGVyLnNldEZsb3dtYXBTdGF0ZShmbG93bWFwU3RhdGUpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Rmxvd0J5SW5kZXgoXG4gICAgaWR4OiBudW1iZXIsXG4gICk6IFByb21pc2U8Rmxvd0RhdHVtIHwgQWdncmVnYXRlRmxvdyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsUHJvdmlkZXIuZ2V0Rmxvd0J5SW5kZXgoaWR4KTtcbiAgfVxuXG4gIGFzeW5jIGdldExvY2F0aW9uQnlJbmRleChcbiAgICBpZHg6IG51bWJlcixcbiAgKTogUHJvbWlzZTxMb2NhdGlvbkRhdHVtIHwgQ2x1c3Rlck5vZGUgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFByb3ZpZGVyLmdldExvY2F0aW9uQnlJbmRleChpZHgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0TGF5ZXJzRGF0YSgpOiBQcm9taXNlPExheWVyc0RhdGEgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2NhbFByb3ZpZGVyLmdldExheWVyc0RhdGEoKTtcbiAgfVxuXG4gIGFzeW5jIGdldExvY2F0aW9uQnlJZChcbiAgICBpZDogc3RyaW5nLFxuICApOiBQcm9taXNlPExvY2F0aW9uRGF0dW0gfCBDbHVzdGVyIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxQcm92aWRlci5nZXRMb2NhdGlvbkJ5SWQoaWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG90YWxzRm9yTG9jYXRpb24oaWQ6IHN0cmluZyk6IFByb21pc2U8TG9jYXRpb25Ub3RhbHMgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFByb3ZpZGVyLmdldFRvdGFsc0ZvckxvY2F0aW9uKGlkKTtcbiAgfVxuXG4gIGdldFZpZXdwb3J0Rm9yTG9jYXRpb25zKFxuICAgIGRpbXM6IFtudW1iZXIsIG51bWJlcl0sXG4gICk6IFByb21pc2U8Vmlld3BvcnRQcm9wcyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsUHJvdmlkZXIuZ2V0Vmlld3BvcnRGb3JMb2NhdGlvbnMoZGltcyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=WorkerFlowmapDataProviderWorker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkerFlowmapDataProviderWorker.d.ts","sourceRoot":"","sources":["../../src/provider/WorkerFlowmapDataProviderWorker.ts"],"names":[],"mappings":""}
@@ -1,4 +0,0 @@
1
- import { expose } from 'comlink';
2
- import WorkerFlowmapDataProvider from './WorkerFlowmapDataProvider';
3
- expose(WorkerFlowmapDataProvider);
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ya2VyRmxvd21hcERhdGFQcm92aWRlcldvcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92aWRlci9Xb3JrZXJGbG93bWFwRGF0YVByb3ZpZGVyV29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDL0IsT0FBTyx5QkFBeUIsTUFBTSw2QkFBNkIsQ0FBQztBQUVwRSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhwb3NlfSBmcm9tICdjb21saW5rJztcbmltcG9ydCBXb3JrZXJGbG93bWFwRGF0YVByb3ZpZGVyIGZyb20gJy4vV29ya2VyRmxvd21hcERhdGFQcm92aWRlcic7XG5cbmV4cG9zZShXb3JrZXJGbG93bWFwRGF0YVByb3ZpZGVyKTtcbiJdfQ==
@@ -1,3 +0,0 @@
1
- import WorkerFlowmapDataProvider, { WorkerDataProviderProps } from './WorkerFlowmapDataProvider';
2
- export default function createWorkerDataProvider(props: WorkerDataProviderProps): Promise<WorkerFlowmapDataProvider>;
3
- //# sourceMappingURL=createWorkerDataProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createWorkerDataProvider.d.ts","sourceRoot":"","sources":["../../src/provider/createWorkerDataProvider.ts"],"names":[],"mappings":"AACA,OAAO,yBAAyB,EAAE,EAChC,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAErC,wBAA8B,wBAAwB,CACpD,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,yBAAyB,CAAC,CAUpC"}
@@ -1,21 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import * as Comlink from 'comlink';
11
- export default function createWorkerDataProvider(props) {
12
- return __awaiter(this, void 0, void 0, function* () {
13
- const worker = new Worker(new URL('./' + 'WorkerFlowmapDataProviderWorker', import.meta.url));
14
- const WorkerFlowmapDataProvider = Comlink.wrap(worker);
15
- // @ts-ignore
16
- const provider = yield new WorkerFlowmapDataProvider(props);
17
- yield provider.loadData();
18
- return provider;
19
- });
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlV29ya2VyRGF0YVByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVyL2NyZWF0ZVdvcmtlckRhdGFQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUtuQyxNQUFNLENBQUMsT0FBTyxVQUFnQix3QkFBd0IsQ0FDcEQsS0FBOEI7O1FBRTlCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUN2QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsaUNBQWlDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDbkUsQ0FBQztRQUNGLE1BQU0seUJBQXlCLEdBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQTRCLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELGFBQWE7UUFDYixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUkseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQ29tbGluayBmcm9tICdjb21saW5rJztcbmltcG9ydCBXb3JrZXJGbG93bWFwRGF0YVByb3ZpZGVyLCB7XG4gIFdvcmtlckRhdGFQcm92aWRlclByb3BzLFxufSBmcm9tICcuL1dvcmtlckZsb3dtYXBEYXRhUHJvdmlkZXInO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBjcmVhdGVXb3JrZXJEYXRhUHJvdmlkZXIoXG4gIHByb3BzOiBXb3JrZXJEYXRhUHJvdmlkZXJQcm9wcyxcbik6IFByb21pc2U8V29ya2VyRmxvd21hcERhdGFQcm92aWRlcj4ge1xuICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKFxuICAgIG5ldyBVUkwoJy4vJyArICdXb3JrZXJGbG93bWFwRGF0YVByb3ZpZGVyV29ya2VyJywgaW1wb3J0Lm1ldGEudXJsKSxcbiAgKTtcbiAgY29uc3QgV29ya2VyRmxvd21hcERhdGFQcm92aWRlciA9XG4gICAgQ29tbGluay53cmFwPFdvcmtlckZsb3dtYXBEYXRhUHJvdmlkZXI+KHdvcmtlcik7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBuZXcgV29ya2VyRmxvd21hcERhdGFQcm92aWRlcihwcm9wcyk7XG4gIGF3YWl0IHByb3ZpZGVyLmxvYWREYXRhKCk7XG4gIHJldHVybiBwcm92aWRlcjtcbn1cbiJdfQ==
@@ -1,121 +0,0 @@
1
- import FlowmapDataProvider from './FlowmapDataProvider';
2
- import {
3
- Cluster,
4
- ClusterNode,
5
- FlowmapData,
6
- FlowmapDataAccessors,
7
- LayersData,
8
- LocationTotals,
9
- ViewportProps,
10
- } from '../types';
11
- import {FlowmapState} from '../FlowmapState';
12
- import {AggregateFlow} from '..';
13
- import LocalFlowmapDataProvider from './LocalFlowmapDataProvider';
14
- import {load} from '@loaders.gl/core';
15
- import {CSVLoader} from '@loaders.gl/csv';
16
-
17
- const LOADERS = [CSVLoader];
18
-
19
- export type WorkerDataProviderProps = {
20
- flows: {
21
- url: string;
22
- columns: {
23
- originId: string;
24
- destId: string;
25
- count: string;
26
- };
27
- };
28
- locations: {
29
- url: string;
30
- columns: {
31
- id: string;
32
- name: string;
33
- lat: string;
34
- lon: string;
35
- };
36
- };
37
- };
38
-
39
- export type LocationDatum = Record<string, unknown>;
40
- export type FlowDatum = Record<string, unknown>;
41
-
42
- export default class WorkerFlowmapDataProvider
43
- implements FlowmapDataProvider<LocationDatum, FlowDatum>
44
- {
45
- private props: WorkerDataProviderProps;
46
- private localProvider: LocalFlowmapDataProvider<LocationDatum, FlowDatum>;
47
- private flowmapState: FlowmapState | undefined;
48
-
49
- constructor(props: WorkerDataProviderProps) {
50
- this.props = props;
51
- this.localProvider = new LocalFlowmapDataProvider({
52
- getFlowOriginId: (flow) => flow[props.flows.columns.originId] as string,
53
- getFlowDestId: (flow) => flow[props.flows.columns.destId] as string,
54
- getFlowMagnitude: (flow) => flow[props.flows.columns.count] as number,
55
- // getFlowTime: (flow) => flow.time,
56
- getLocationLat: (location) =>
57
- location[props.locations.columns.lat] as number,
58
- getLocationLon: (location) =>
59
- location[props.locations.columns.lon] as number,
60
- getLocationName: (location) =>
61
- location[props.locations.columns.name] as string,
62
- getLocationId: (location) =>
63
- location[props.locations.columns.id] as string,
64
- });
65
- this.flowmapState = undefined;
66
- }
67
-
68
- async loadData() {
69
- const [locations, flows] = await Promise.all([
70
- load(this.props.locations.url, LOADERS),
71
- load(this.props.flows.url, LOADERS),
72
- ]);
73
- await this.localProvider.setFlowmapData({locations, flows});
74
- }
75
-
76
- setAccessors(accessors: FlowmapDataAccessors<LocationDatum, FlowDatum>) {
77
- throw new Error('Not supported');
78
- }
79
-
80
- async setFlowmapData(
81
- flowmapData: FlowmapData<LocationDatum, FlowDatum>,
82
- ): Promise<void> {
83
- throw new Error('Not supported');
84
- }
85
-
86
- async setFlowmapState(flowmapState: FlowmapState): Promise<void> {
87
- await this.localProvider.setFlowmapState(flowmapState);
88
- }
89
-
90
- async getFlowByIndex(
91
- idx: number,
92
- ): Promise<FlowDatum | AggregateFlow | undefined> {
93
- return this.localProvider.getFlowByIndex(idx);
94
- }
95
-
96
- async getLocationByIndex(
97
- idx: number,
98
- ): Promise<LocationDatum | ClusterNode | undefined> {
99
- return this.localProvider.getLocationByIndex(idx);
100
- }
101
-
102
- async getLayersData(): Promise<LayersData | undefined> {
103
- return await this.localProvider.getLayersData();
104
- }
105
-
106
- async getLocationById(
107
- id: string,
108
- ): Promise<LocationDatum | Cluster | undefined> {
109
- return this.localProvider.getLocationById(id);
110
- }
111
-
112
- async getTotalsForLocation(id: string): Promise<LocationTotals | undefined> {
113
- return this.localProvider.getTotalsForLocation(id);
114
- }
115
-
116
- getViewportForLocations(
117
- dims: [number, number],
118
- ): Promise<ViewportProps | undefined> {
119
- return this.localProvider.getViewportForLocations(dims);
120
- }
121
- }
@@ -1,4 +0,0 @@
1
- import {expose} from 'comlink';
2
- import WorkerFlowmapDataProvider from './WorkerFlowmapDataProvider';
3
-
4
- expose(WorkerFlowmapDataProvider);
@@ -1,18 +0,0 @@
1
- import * as Comlink from 'comlink';
2
- import WorkerFlowmapDataProvider, {
3
- WorkerDataProviderProps,
4
- } from './WorkerFlowmapDataProvider';
5
-
6
- export default async function createWorkerDataProvider(
7
- props: WorkerDataProviderProps,
8
- ): Promise<WorkerFlowmapDataProvider> {
9
- const worker = new Worker(
10
- new URL('./' + 'WorkerFlowmapDataProviderWorker', import.meta.url),
11
- );
12
- const WorkerFlowmapDataProvider =
13
- Comlink.wrap<WorkerFlowmapDataProvider>(worker);
14
- // @ts-ignore
15
- const provider = await new WorkerFlowmapDataProvider(props);
16
- await provider.loadData();
17
- return provider;
18
- }