@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.
- package/.turbo/turbo-build.log +3 -0
- package/.turbo/turbo-dev.log +6 -0
- package/LICENSE +2 -2
- package/dist/FlowmapAggregateAccessors.d.ts +4 -4
- package/dist/FlowmapAggregateAccessors.d.ts.map +1 -1
- package/dist/FlowmapAggregateAccessors.js +16 -9
- package/dist/FlowmapSelectors.d.ts +41 -87
- package/dist/FlowmapSelectors.d.ts.map +1 -1
- package/dist/FlowmapSelectors.js +174 -161
- package/dist/FlowmapState.d.ts +7 -5
- package/dist/FlowmapState.d.ts.map +1 -1
- package/dist/FlowmapState.js +6 -1
- package/dist/cluster/ClusterIndex.d.ts +4 -4
- package/dist/cluster/ClusterIndex.d.ts.map +1 -1
- package/dist/cluster/ClusterIndex.js +5 -17
- package/dist/cluster/cluster.d.ts +25 -5
- package/dist/cluster/cluster.d.ts.map +1 -1
- package/dist/cluster/cluster.js +115 -57
- package/dist/colors.d.ts +3 -3
- package/dist/colors.d.ts.map +1 -1
- package/dist/colors.js +19 -8
- package/dist/getViewStateForLocations.d.ts +3 -3
- package/dist/getViewStateForLocations.d.ts.map +1 -1
- package/dist/getViewStateForLocations.js +33 -12
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -4
- package/dist/provider/FlowmapDataProvider.d.ts +7 -2
- package/dist/provider/FlowmapDataProvider.d.ts.map +1 -1
- package/dist/provider/FlowmapDataProvider.js +11 -6
- package/dist/provider/LocalFlowmapDataProvider.d.ts +15 -4
- package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -1
- package/dist/provider/LocalFlowmapDataProvider.js +98 -81
- package/dist/selector-functions.d.ts +10 -0
- package/dist/selector-functions.d.ts.map +1 -0
- package/dist/selector-functions.js +65 -0
- package/dist/time.d.ts.map +1 -1
- package/dist/time.js +6 -1
- package/dist/types.d.ts +20 -18
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -4
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +6 -1
- package/package.json +22 -27
- package/src/FlowmapAggregateAccessors.ts +21 -10
- package/src/FlowmapSelectors.ts +304 -280
- package/src/FlowmapState.ts +13 -5
- package/src/cluster/ClusterIndex.ts +23 -28
- package/src/cluster/cluster.ts +165 -73
- package/src/colors.ts +13 -9
- package/src/getViewStateForLocations.ts +23 -7
- package/src/index.ts +9 -3
- package/src/provider/FlowmapDataProvider.ts +23 -7
- package/src/provider/LocalFlowmapDataProvider.ts +68 -5
- package/src/selector-functions.ts +93 -0
- package/src/time.ts +6 -0
- package/src/types.ts +23 -15
- package/src/util.ts +6 -0
- package/dist/provider/WorkerFlowmapDataProvider.d.ts +0 -42
- package/dist/provider/WorkerFlowmapDataProvider.d.ts.map +0 -1
- package/dist/provider/WorkerFlowmapDataProvider.js +0 -80
- package/dist/provider/WorkerFlowmapDataProviderWorker.d.ts +0 -2
- package/dist/provider/WorkerFlowmapDataProviderWorker.d.ts.map +0 -1
- package/dist/provider/WorkerFlowmapDataProviderWorker.js +0 -4
- package/dist/provider/createWorkerDataProvider.d.ts +0 -3
- package/dist/provider/createWorkerDataProvider.d.ts.map +0 -1
- package/dist/provider/createWorkerDataProvider.js +0 -21
- package/src/provider/WorkerFlowmapDataProvider.ts +0 -121
- package/src/provider/WorkerFlowmapDataProviderWorker.ts +0 -4
- 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<
|
|
20
|
-
|
|
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
|
-
|
|
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(
|
|
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
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
|
|
3
|
-
flows: F
|
|
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
|
|
63
|
-
bearing
|
|
64
|
-
pitch
|
|
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 +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 +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,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
|
-
}
|