@fscharter/flowmap-data 8.0.2-fsc.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/dist/FlowmapAggregateAccessors.d.ts +16 -0
- package/dist/FlowmapAggregateAccessors.d.ts.map +1 -0
- package/dist/FlowmapAggregateAccessors.js +53 -0
- package/dist/FlowmapSelectors.d.ts +143 -0
- package/dist/FlowmapSelectors.d.ts.map +1 -0
- package/dist/FlowmapSelectors.js +881 -0
- package/dist/FlowmapState.d.ts +31 -0
- package/dist/FlowmapState.d.ts.map +1 -0
- package/dist/FlowmapState.js +7 -0
- package/dist/cluster/ClusterIndex.d.ts +42 -0
- package/dist/cluster/ClusterIndex.d.ts.map +1 -0
- package/dist/cluster/ClusterIndex.js +166 -0
- package/dist/cluster/cluster.d.ts +51 -0
- package/dist/cluster/cluster.d.ts.map +1 -0
- package/dist/cluster/cluster.js +267 -0
- package/dist/colors.d.ts +103 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +487 -0
- package/dist/getViewStateForLocations.d.ts +23 -0
- package/dist/getViewStateForLocations.d.ts.map +1 -0
- package/dist/getViewStateForLocations.js +54 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/provider/FlowmapDataProvider.d.ts +21 -0
- package/dist/provider/FlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/FlowmapDataProvider.js +22 -0
- package/dist/provider/LocalFlowmapDataProvider.d.ts +31 -0
- package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
- package/dist/provider/LocalFlowmapDataProvider.js +115 -0
- 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 +24 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +131 -0
- package/dist/types.d.ts +120 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +28 -0
- package/dist/util.d.ts +5 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +16 -0
- package/package.json +48 -0
- package/src/FlowmapAggregateAccessors.ts +76 -0
- package/src/FlowmapSelectors.ts +1539 -0
- package/src/FlowmapState.ts +40 -0
- package/src/cluster/ClusterIndex.ts +261 -0
- package/src/cluster/cluster.ts +394 -0
- package/src/colors.ts +771 -0
- package/src/getViewStateForLocations.ts +86 -0
- package/src/index.ts +19 -0
- package/src/provider/FlowmapDataProvider.ts +81 -0
- package/src/provider/LocalFlowmapDataProvider.ts +185 -0
- package/src/selector-functions.ts +93 -0
- package/src/time.ts +166 -0
- package/src/types.ts +172 -0
- package/src/util.ts +17 -0
- package/tsconfig.json +11 -0
- package/typings.d.ts +1 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export type FlowmapData<L, F> = {
|
|
2
|
+
locations: Iterable<L> | undefined;
|
|
3
|
+
flows: Iterable<F> | undefined;
|
|
4
|
+
clusterLevels?: ClusterLevels;
|
|
5
|
+
};
|
|
6
|
+
export interface ViewState {
|
|
7
|
+
latitude: number;
|
|
8
|
+
longitude: number;
|
|
9
|
+
zoom: number;
|
|
10
|
+
bearing?: number;
|
|
11
|
+
pitch?: number;
|
|
12
|
+
altitude?: number;
|
|
13
|
+
}
|
|
14
|
+
export type FlowAccessor<F, T> = (flow: F) => T;
|
|
15
|
+
export type LocationAccessor<L, T> = (location: L) => T;
|
|
16
|
+
export interface FlowAccessors<F> {
|
|
17
|
+
getFlowOriginId: FlowAccessor<F, string | number>;
|
|
18
|
+
getFlowDestId: FlowAccessor<F, string | number>;
|
|
19
|
+
getFlowMagnitude: FlowAccessor<F, number>;
|
|
20
|
+
getFlowTime?: FlowAccessor<F, Date>;
|
|
21
|
+
}
|
|
22
|
+
export interface LocationAccessors<L> {
|
|
23
|
+
getLocationId: LocationAccessor<L, string | number>;
|
|
24
|
+
getLocationName?: LocationAccessor<L, string>;
|
|
25
|
+
getLocationLat: LocationAccessor<L, number>;
|
|
26
|
+
getLocationLon: LocationAccessor<L, number>;
|
|
27
|
+
getLocationClusterName?: (locationIds: (string | number)[]) => string;
|
|
28
|
+
}
|
|
29
|
+
export type FlowmapDataAccessors<L, F> = LocationAccessors<L> & FlowAccessors<F>;
|
|
30
|
+
export interface LocationTotals {
|
|
31
|
+
incomingCount: number;
|
|
32
|
+
outgoingCount: number;
|
|
33
|
+
internalCount: number;
|
|
34
|
+
}
|
|
35
|
+
export interface CountByTime {
|
|
36
|
+
time: Date;
|
|
37
|
+
count: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ViewportProps {
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
latitude: number;
|
|
43
|
+
longitude: number;
|
|
44
|
+
zoom?: number;
|
|
45
|
+
bearing?: number;
|
|
46
|
+
pitch?: number;
|
|
47
|
+
altitude?: number;
|
|
48
|
+
maxZoom?: number;
|
|
49
|
+
minZoom?: number;
|
|
50
|
+
maxPitch?: number;
|
|
51
|
+
minPitch?: number;
|
|
52
|
+
transitionDuration?: number | 'auto';
|
|
53
|
+
transitionInterpolator?: any;
|
|
54
|
+
transitionInterruption?: any;
|
|
55
|
+
transitionEasing?: any;
|
|
56
|
+
}
|
|
57
|
+
export interface ClusterNode {
|
|
58
|
+
id: string | number;
|
|
59
|
+
zoom: number;
|
|
60
|
+
lat: number;
|
|
61
|
+
lon: number;
|
|
62
|
+
}
|
|
63
|
+
export interface ClusterLevel {
|
|
64
|
+
zoom: number;
|
|
65
|
+
nodes: ClusterNode[];
|
|
66
|
+
}
|
|
67
|
+
export type ClusterLevels = ClusterLevel[];
|
|
68
|
+
export interface Cluster extends ClusterNode {
|
|
69
|
+
name?: string;
|
|
70
|
+
children: string[];
|
|
71
|
+
}
|
|
72
|
+
export declare function isCluster(c: ClusterNode): c is Cluster;
|
|
73
|
+
export declare function isLocationClusterNode<L>(l: L | ClusterNode): l is ClusterNode;
|
|
74
|
+
export interface AggregateFlow {
|
|
75
|
+
origin: string | number;
|
|
76
|
+
dest: string | number;
|
|
77
|
+
count: number;
|
|
78
|
+
aggregate: true;
|
|
79
|
+
}
|
|
80
|
+
export declare function isAggregateFlow(flow: Record<string, any>): flow is AggregateFlow;
|
|
81
|
+
export interface FlowCountsMapReduce<F, T = any> {
|
|
82
|
+
map: (flow: F) => T;
|
|
83
|
+
reduce: (accumulated: T, val: T) => T;
|
|
84
|
+
}
|
|
85
|
+
export declare enum LocationFilterMode {
|
|
86
|
+
ALL = "ALL",
|
|
87
|
+
INCOMING = "INCOMING",
|
|
88
|
+
OUTGOING = "OUTGOING",
|
|
89
|
+
BETWEEN = "BETWEEN"
|
|
90
|
+
}
|
|
91
|
+
export interface FlowCirclesLayerAttributes {
|
|
92
|
+
length: number;
|
|
93
|
+
attributes: {
|
|
94
|
+
getPosition: LayersDataAttrValues<Float32Array>;
|
|
95
|
+
getColor: LayersDataAttrValues<Uint8Array>;
|
|
96
|
+
getInRadius: LayersDataAttrValues<Float32Array>;
|
|
97
|
+
getOutRadius: LayersDataAttrValues<Float32Array>;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export interface FlowLinesLayerAttributes {
|
|
101
|
+
length: number;
|
|
102
|
+
attributes: {
|
|
103
|
+
getSourcePosition: LayersDataAttrValues<Float32Array>;
|
|
104
|
+
getTargetPosition: LayersDataAttrValues<Float32Array>;
|
|
105
|
+
getThickness: LayersDataAttrValues<Float32Array>;
|
|
106
|
+
getColor: LayersDataAttrValues<Uint8Array>;
|
|
107
|
+
getEndpointOffsets: LayersDataAttrValues<Float32Array>;
|
|
108
|
+
getStaggering?: LayersDataAttrValues<Float32Array>;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export interface LayersData {
|
|
112
|
+
circleAttributes: FlowCirclesLayerAttributes;
|
|
113
|
+
lineAttributes: FlowLinesLayerAttributes;
|
|
114
|
+
locationLabels?: string[];
|
|
115
|
+
}
|
|
116
|
+
export type LayersDataAttrValues<T> = {
|
|
117
|
+
value: T;
|
|
118
|
+
size: number;
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Flowmap.gl contributors
|
|
3
|
+
* Copyright (c) 2018-2020 Teralytics
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export function isCluster(c) {
|
|
7
|
+
const { children } = c;
|
|
8
|
+
return children && children.length > 0;
|
|
9
|
+
}
|
|
10
|
+
export function isLocationClusterNode(l) {
|
|
11
|
+
const { zoom } = l;
|
|
12
|
+
return zoom !== undefined;
|
|
13
|
+
}
|
|
14
|
+
export function isAggregateFlow(flow) {
|
|
15
|
+
return (flow &&
|
|
16
|
+
// flow.origin !== undefined &&
|
|
17
|
+
// flow.dest !== undefined &&
|
|
18
|
+
// flow.count !== undefined &&
|
|
19
|
+
(flow.aggregate ? true : false));
|
|
20
|
+
}
|
|
21
|
+
export var LocationFilterMode;
|
|
22
|
+
(function (LocationFilterMode) {
|
|
23
|
+
LocationFilterMode["ALL"] = "ALL";
|
|
24
|
+
LocationFilterMode["INCOMING"] = "INCOMING";
|
|
25
|
+
LocationFilterMode["OUTGOING"] = "OUTGOING";
|
|
26
|
+
LocationFilterMode["BETWEEN"] = "BETWEEN";
|
|
27
|
+
})(LocationFilterMode || (LocationFilterMode = {}));
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQWtHSCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQWM7SUFDdEMsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLENBQVksQ0FBQztJQUNoQyxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFJLENBQWtCO0lBQ3pELE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxDQUFnQixDQUFDO0lBQ2hDLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUM1QixDQUFDO0FBU0QsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsSUFBeUI7SUFFekIsT0FBTyxDQUNMLElBQUk7UUFDSiwrQkFBK0I7UUFDL0IsNkJBQTZCO1FBQzdCLDhCQUE4QjtRQUM5QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQ2hDLENBQUM7QUFDSixDQUFDO0FBT0QsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUM1QixpQ0FBVyxDQUFBO0lBQ1gsMkNBQXFCLENBQUE7SUFDckIsMkNBQXFCLENBQUE7SUFDckIseUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSBGbG93bWFwLmdsIGNvbnRyaWJ1dG9yc1xuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAgVGVyYWx5dGljc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5leHBvcnQgdHlwZSBGbG93bWFwRGF0YTxMLCBGPiA9IHtcbiAgbG9jYXRpb25zOiBJdGVyYWJsZTxMPiB8IHVuZGVmaW5lZDtcbiAgZmxvd3M6IEl0ZXJhYmxlPEY+IHwgdW5kZWZpbmVkO1xuICBjbHVzdGVyTGV2ZWxzPzogQ2x1c3RlckxldmVscztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld1N0YXRlIHtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gIHpvb206IG51bWJlcjtcbiAgYmVhcmluZz86IG51bWJlcjtcbiAgcGl0Y2g/OiBudW1iZXI7XG4gIGFsdGl0dWRlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBGbG93QWNjZXNzb3I8RiwgVD4gPSAoZmxvdzogRikgPT4gVDsgLy8gb2JqZWN0SW5mbz86IEFjY2Vzc29yT2JqZWN0SW5mbyxcbmV4cG9ydCB0eXBlIExvY2F0aW9uQWNjZXNzb3I8TCwgVD4gPSAobG9jYXRpb246IEwpID0+IFQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0FjY2Vzc29yczxGPiB7XG4gIGdldEZsb3dPcmlnaW5JZDogRmxvd0FjY2Vzc29yPEYsIHN0cmluZyB8IG51bWJlcj47XG4gIGdldEZsb3dEZXN0SWQ6IEZsb3dBY2Nlc3NvcjxGLCBzdHJpbmcgfCBudW1iZXI+O1xuICBnZXRGbG93TWFnbml0dWRlOiBGbG93QWNjZXNzb3I8RiwgbnVtYmVyPjtcbiAgZ2V0Rmxvd1RpbWU/OiBGbG93QWNjZXNzb3I8RiwgRGF0ZT47IC8vIFRPRE86IHVzZSBudW1iZXIgaW5zdGVhZCBvZiBEYXRlXG4gIC8vIGdldEZsb3dDb2xvcj86IEZsb3dBY2Nlc3NvcjxzdHJpbmcgfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uQWNjZXNzb3JzPEw+IHtcbiAgZ2V0TG9jYXRpb25JZDogTG9jYXRpb25BY2Nlc3NvcjxMLCBzdHJpbmcgfCBudW1iZXI+O1xuICBnZXRMb2NhdGlvbk5hbWU/OiBMb2NhdGlvbkFjY2Vzc29yPEwsIHN0cmluZz47XG4gIGdldExvY2F0aW9uTGF0OiBMb2NhdGlvbkFjY2Vzc29yPEwsIG51bWJlcj47XG4gIGdldExvY2F0aW9uTG9uOiBMb2NhdGlvbkFjY2Vzc29yPEwsIG51bWJlcj47XG4gIGdldExvY2F0aW9uQ2x1c3Rlck5hbWU/OiAobG9jYXRpb25JZHM6IChzdHJpbmcgfCBudW1iZXIpW10pID0+IHN0cmluZztcbiAgLy8gZ2V0TG9jYXRpb25Ub3RhbEluPzogTG9jYXRpb25BY2Nlc3NvcjxudW1iZXI+O1xuICAvLyBnZXRMb2NhdGlvblRvdGFsT3V0PzogTG9jYXRpb25BY2Nlc3NvcjxudW1iZXI+O1xuICAvLyBnZXRMb2NhdGlvblRvdGFsSW50ZXJuYWw/OiBMb2NhdGlvbkFjY2Vzc29yPG51bWJlcj47XG59XG5cbmV4cG9ydCB0eXBlIEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+ID0gTG9jYXRpb25BY2Nlc3NvcnM8TD4gJlxuICBGbG93QWNjZXNzb3JzPEY+O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uVG90YWxzIHtcbiAgaW5jb21pbmdDb3VudDogbnVtYmVyO1xuICBvdXRnb2luZ0NvdW50OiBudW1iZXI7XG4gIGludGVybmFsQ291bnQ6IG51bWJlcjtcbn1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBMb2NhdGlvbnNUb3RhbHMge1xuLy8gICBpbmNvbWluZzoge1tpZDogc3RyaW5nXTogbnVtYmVyfTtcbi8vICAgb3V0Z29pbmc6IHtbaWQ6IHN0cmluZ106IG51bWJlcn07XG4vLyAgIGludGVybmFsOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9O1xuLy8gfVxuXG5leHBvcnQgaW50ZXJmYWNlIENvdW50QnlUaW1lIHtcbiAgdGltZTogRGF0ZTtcbiAgY291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydFByb3BzIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xuICB6b29tPzogbnVtYmVyO1xuICBiZWFyaW5nPzogbnVtYmVyO1xuICBwaXRjaD86IG51bWJlcjtcbiAgYWx0aXR1ZGU/OiBudW1iZXI7XG4gIG1heFpvb20/OiBudW1iZXI7XG4gIG1pblpvb20/OiBudW1iZXI7XG4gIG1heFBpdGNoPzogbnVtYmVyO1xuICBtaW5QaXRjaD86IG51bWJlcjtcbiAgdHJhbnNpdGlvbkR1cmF0aW9uPzogbnVtYmVyIHwgJ2F1dG8nO1xuICB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yPzogYW55O1xuICB0cmFuc2l0aW9uSW50ZXJydXB0aW9uPzogYW55O1xuICB0cmFuc2l0aW9uRWFzaW5nPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJOb2RlIHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgem9vbTogbnVtYmVyO1xuICBsYXQ6IG51bWJlcjtcbiAgbG9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlckxldmVsIHtcbiAgem9vbTogbnVtYmVyO1xuICBub2RlczogQ2x1c3Rlck5vZGVbXTtcbn1cblxuZXhwb3J0IHR5cGUgQ2x1c3RlckxldmVscyA9IENsdXN0ZXJMZXZlbFtdO1xuXG4vLyBub24tbGVhZiBjbHVzdGVyIG5vZGVcbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlciBleHRlbmRzIENsdXN0ZXJOb2RlIHtcbiAgbmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW46IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDbHVzdGVyKGM6IENsdXN0ZXJOb2RlKTogYyBpcyBDbHVzdGVyIHtcbiAgY29uc3Qge2NoaWxkcmVufSA9IGMgYXMgQ2x1c3RlcjtcbiAgcmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xvY2F0aW9uQ2x1c3Rlck5vZGU8TD4obDogTCB8IENsdXN0ZXJOb2RlKTogbCBpcyBDbHVzdGVyTm9kZSB7XG4gIGNvbnN0IHt6b29tfSA9IGwgYXMgQ2x1c3Rlck5vZGU7XG4gIHJldHVybiB6b29tICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdncmVnYXRlRmxvdyB7XG4gIG9yaWdpbjogc3RyaW5nIHwgbnVtYmVyO1xuICBkZXN0OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG4gIGFnZ3JlZ2F0ZTogdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWdncmVnYXRlRmxvdyhcbiAgZmxvdzogUmVjb3JkPHN0cmluZywgYW55Pixcbik6IGZsb3cgaXMgQWdncmVnYXRlRmxvdyB7XG4gIHJldHVybiAoXG4gICAgZmxvdyAmJlxuICAgIC8vIGZsb3cub3JpZ2luICE9PSB1bmRlZmluZWQgJiZcbiAgICAvLyBmbG93LmRlc3QgIT09IHVuZGVmaW5lZCAmJlxuICAgIC8vIGZsb3cuY291bnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIChmbG93LmFnZ3JlZ2F0ZSA/IHRydWUgOiBmYWxzZSlcbiAgKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q291bnRzTWFwUmVkdWNlPEYsIFQgPSBhbnk+IHtcbiAgbWFwOiAoZmxvdzogRikgPT4gVDtcbiAgcmVkdWNlOiAoYWNjdW11bGF0ZWQ6IFQsIHZhbDogVCkgPT4gVDtcbn1cblxuZXhwb3J0IGVudW0gTG9jYXRpb25GaWx0ZXJNb2RlIHtcbiAgQUxMID0gJ0FMTCcsXG4gIElOQ09NSU5HID0gJ0lOQ09NSU5HJyxcbiAgT1VUR09JTkcgPSAnT1VUR09JTkcnLFxuICBCRVRXRUVOID0gJ0JFVFdFRU4nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIGF0dHJpYnV0ZXM6IHtcbiAgICBnZXRQb3NpdGlvbjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8RmxvYXQzMkFycmF5PjtcbiAgICBnZXRDb2xvcjogTGF5ZXJzRGF0YUF0dHJWYWx1ZXM8VWludDhBcnJheT47XG4gICAgZ2V0SW5SYWRpdXM6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0T3V0UmFkaXVzOiBMYXllcnNEYXRhQXR0clZhbHVlczxGbG9hdDMyQXJyYXk+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dMaW5lc0xheWVyQXR0cmlidXRlcyB7XG4gIGxlbmd0aDogbnVtYmVyO1xuICBhdHRyaWJ1dGVzOiB7XG4gICAgZ2V0U291cmNlUG9zaXRpb246IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0VGFyZ2V0UG9zaXRpb246IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0VGhpY2tuZXNzOiBMYXllcnNEYXRhQXR0clZhbHVlczxGbG9hdDMyQXJyYXk+O1xuICAgIGdldENvbG9yOiBMYXllcnNEYXRhQXR0clZhbHVlczxVaW50OEFycmF5PjtcbiAgICBnZXRFbmRwb2ludE9mZnNldHM6IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gICAgZ2V0U3RhZ2dlcmluZz86IExheWVyc0RhdGFBdHRyVmFsdWVzPEZsb2F0MzJBcnJheT47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5ZXJzRGF0YSB7XG4gIGNpcmNsZUF0dHJpYnV0ZXM6IEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzO1xuICBsaW5lQXR0cmlidXRlczogRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzO1xuICBsb2NhdGlvbkxhYmVscz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBMYXllcnNEYXRhQXR0clZhbHVlczxUPiA9IHt2YWx1ZTogVDsgc2l6ZTogbnVtYmVyfTtcbiJdfQ==
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { defaultMemoize } from 'reselect';
|
|
2
|
+
export declare const createDebugSelector: import("reselect").CreateSelectorFunction<(...args: unknown[]) => unknown, typeof defaultMemoize, [equalityCheckOrOptions?: import("reselect").EqualityFn | import("reselect").DefaultMemoizeOptions | undefined], {
|
|
3
|
+
clearCache: () => void;
|
|
4
|
+
}>;
|
|
5
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAMA,OAAO,EAAwB,cAAc,EAAC,MAAM,UAAU,CAAC;AAE/D,eAAO,MAAM,mBAAmB;;EAQ9B,CAAC"}
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Flowmap.gl contributors
|
|
3
|
+
* Copyright (c) 2018-2020 Teralytics
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { createSelectorCreator, defaultMemoize } from 'reselect';
|
|
7
|
+
export const createDebugSelector = createSelectorCreator(defaultMemoize, {
|
|
8
|
+
equalityCheck: (previousVal, currentVal) => {
|
|
9
|
+
const rv = currentVal === previousVal;
|
|
10
|
+
if (!rv) {
|
|
11
|
+
console.log('Selector param value changed', currentVal);
|
|
12
|
+
}
|
|
13
|
+
return rv;
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUMscUJBQXFCLEVBQUUsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDLGNBQWMsRUFBRTtJQUN2RSxhQUFhLEVBQUUsQ0FBQyxXQUFnQixFQUFFLFVBQWUsRUFBRSxFQUFFO1FBQ25ELE1BQU0sRUFBRSxHQUFHLFVBQVUsS0FBSyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgRmxvd21hcC5nbCBjb250cmlidXRvcnNcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFRlcmFseXRpY3NcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHtjcmVhdGVTZWxlY3RvckNyZWF0b3IsIGRlZmF1bHRNZW1vaXplfSBmcm9tICdyZXNlbGVjdCc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWJ1Z1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3JDcmVhdG9yKGRlZmF1bHRNZW1vaXplLCB7XG4gIGVxdWFsaXR5Q2hlY2s6IChwcmV2aW91c1ZhbDogYW55LCBjdXJyZW50VmFsOiBhbnkpID0+IHtcbiAgICBjb25zdCBydiA9IGN1cnJlbnRWYWwgPT09IHByZXZpb3VzVmFsO1xuICAgIGlmICghcnYpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZWxlY3RvciBwYXJhbSB2YWx1ZSBjaGFuZ2VkJywgY3VycmVudFZhbCk7XG4gICAgfVxuICAgIHJldHVybiBydjtcbiAgfSxcbn0pO1xuIl19
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fscharter/flowmap-data",
|
|
3
|
+
"version": "8.0.2-fsc.1",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"module": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"repository": "git@github.com:visgl/flowmap.gl.git",
|
|
8
|
+
"author": "Ilya Boyandin <ilya@boyandin.me>",
|
|
9
|
+
"license": "Apache-2.0",
|
|
10
|
+
"type": "module",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"build": "rm -rf dist && tsc",
|
|
14
|
+
"prepare": "yarn build"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"d3-array": "^3.2.4",
|
|
18
|
+
"d3-color": "2 - 3",
|
|
19
|
+
"d3-geo": "^3.1.0",
|
|
20
|
+
"d3-interpolate": "2 - 3",
|
|
21
|
+
"d3-scale": "3 - 4",
|
|
22
|
+
"d3-scale-chromatic": "2 - 3",
|
|
23
|
+
"d3-time": "^3.1.0",
|
|
24
|
+
"d3-time-format": "3 - 4",
|
|
25
|
+
"kdbush": "^4.0.2",
|
|
26
|
+
"reselect": "^4.1.6",
|
|
27
|
+
"seedrandom": "^3.0.5"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/d3-array": "^3.0.7",
|
|
31
|
+
"@types/d3-collection": "^1.0.10",
|
|
32
|
+
"@types/d3-color": "^3.1.0",
|
|
33
|
+
"@types/d3-geo": "^3.0.4",
|
|
34
|
+
"@types/d3-interpolate": "^3.0.1",
|
|
35
|
+
"@types/d3-scale": "^4.0.4",
|
|
36
|
+
"@types/d3-scale-chromatic": "^3.0.0",
|
|
37
|
+
"@types/d3-time": "^3.0.0",
|
|
38
|
+
"@types/d3-time-format": "^4.0.0",
|
|
39
|
+
"@types/geojson": "^7946.0.10",
|
|
40
|
+
"@types/kdbush": "^3.0.3",
|
|
41
|
+
"@types/mapbox__geo-viewport": "^0.5.0",
|
|
42
|
+
"@types/seedrandom": "^3.0.5"
|
|
43
|
+
},
|
|
44
|
+
"gitHead": "66e2235c27734094d45099c1746e0d334be4972d",
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Flowmap.gl contributors
|
|
3
|
+
* Copyright (c) 2018-2020 Teralytics
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
AggregateFlow,
|
|
9
|
+
ClusterNode,
|
|
10
|
+
FlowmapDataAccessors,
|
|
11
|
+
isAggregateFlow,
|
|
12
|
+
isCluster,
|
|
13
|
+
isLocationClusterNode,
|
|
14
|
+
} from './types';
|
|
15
|
+
|
|
16
|
+
export default class FlowmapAggregateAccessors<
|
|
17
|
+
L extends Record<string, any>,
|
|
18
|
+
F extends Record<string, any>,
|
|
19
|
+
> {
|
|
20
|
+
private accessors: FlowmapDataAccessors<L, F>;
|
|
21
|
+
constructor(accessors: FlowmapDataAccessors<L, F>) {
|
|
22
|
+
this.accessors = accessors;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setAccessors(accessors: FlowmapDataAccessors<L, F>) {
|
|
26
|
+
this.accessors = accessors;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
getFlowmapDataAccessors() {
|
|
30
|
+
return this.accessors;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getLocationId = (location: L | ClusterNode): string | number =>
|
|
34
|
+
isLocationClusterNode(location)
|
|
35
|
+
? location.id
|
|
36
|
+
: this.accessors.getLocationId(location);
|
|
37
|
+
|
|
38
|
+
getLocationName = (location: L | ClusterNode): string => {
|
|
39
|
+
let name;
|
|
40
|
+
if (isLocationClusterNode(location) && isCluster(location)) {
|
|
41
|
+
name = location.name;
|
|
42
|
+
} else if (this.accessors.getLocationName) {
|
|
43
|
+
name = this.accessors.getLocationName(location as L);
|
|
44
|
+
}
|
|
45
|
+
if (!name) name = `${this.getLocationId(location)}`;
|
|
46
|
+
return name;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
getLocationLat = (location: L | ClusterNode): number =>
|
|
50
|
+
isLocationClusterNode(location)
|
|
51
|
+
? location.lat
|
|
52
|
+
: this.accessors.getLocationLat(location);
|
|
53
|
+
|
|
54
|
+
getLocationLon = (location: L | ClusterNode): number =>
|
|
55
|
+
isLocationClusterNode(location)
|
|
56
|
+
? location.lon
|
|
57
|
+
: this.accessors.getLocationLon(location);
|
|
58
|
+
|
|
59
|
+
getFlowOriginId = (f: F | AggregateFlow) => {
|
|
60
|
+
return isAggregateFlow(f) ? f.origin : this.accessors.getFlowOriginId(f);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
getFlowDestId = (f: F | AggregateFlow) => {
|
|
64
|
+
return isAggregateFlow(f) ? f.dest : this.accessors.getFlowDestId(f);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
getFlowMagnitude = (f: F | AggregateFlow) => {
|
|
68
|
+
return isAggregateFlow(f) ? f.count : this.accessors.getFlowMagnitude(f);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Note: Aggregate flows have no time
|
|
72
|
+
getFlowTime = (f: F) => {
|
|
73
|
+
const {getFlowTime} = this.accessors;
|
|
74
|
+
return getFlowTime ? getFlowTime(f) : undefined;
|
|
75
|
+
};
|
|
76
|
+
}
|