@flowmap.gl/data 8.0.0-alpha.13 → 8.0.0-alpha.17
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/FlowmapSelectors.d.ts +21 -21
- package/dist/FlowmapSelectors.d.ts.map +1 -1
- package/dist/FlowmapSelectors.js +55 -31
- package/dist/cluster/cluster.d.ts +6 -5
- package/dist/cluster/cluster.d.ts.map +1 -1
- package/dist/cluster/cluster.js +11 -9
- package/dist/getViewStateForLocations.d.ts +1 -1
- package/dist/getViewStateForLocations.d.ts.map +1 -1
- package/dist/getViewStateForLocations.js +16 -5
- package/dist/provider/FlowmapDataProvider.d.ts.map +1 -1
- package/dist/provider/FlowmapDataProvider.js +6 -6
- package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -1
- package/dist/provider/LocalFlowmapDataProvider.js +2 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -4
- package/package.json +13 -16
- package/src/FlowmapSelectors.ts +78 -59
- package/src/cluster/cluster.ts +23 -20
- package/src/getViewStateForLocations.ts +17 -7
- package/src/provider/FlowmapDataProvider.ts +4 -5
- package/src/provider/LocalFlowmapDataProvider.ts +1 -0
- package/src/types.ts +5 -5
- package/dist-es5/FlowmapAggregateAccessors.d.ts +0 -16
- package/dist-es5/FlowmapAggregateAccessors.d.ts.map +0 -1
- package/dist-es5/FlowmapAggregateAccessors.js +0 -57
- package/dist-es5/FlowmapSelectors.d.ts +0 -188
- package/dist-es5/FlowmapSelectors.d.ts.map +0 -1
- package/dist-es5/FlowmapSelectors.js +0 -1507
- package/dist-es5/FlowmapState.d.ts +0 -27
- package/dist-es5/FlowmapState.d.ts.map +0 -1
- package/dist-es5/FlowmapState.js +0 -3
- package/dist-es5/cluster/ClusterIndex.d.ts +0 -42
- package/dist-es5/cluster/ClusterIndex.d.ts.map +0 -1
- package/dist-es5/cluster/ClusterIndex.js +0 -297
- package/dist-es5/cluster/cluster.d.ts +0 -31
- package/dist-es5/cluster/cluster.d.ts.map +0 -1
- package/dist-es5/cluster/cluster.js +0 -266
- package/dist-es5/colors.d.ts +0 -103
- package/dist-es5/colors.d.ts.map +0 -1
- package/dist-es5/colors.js +0 -510
- package/dist-es5/getViewStateForLocations.d.ts +0 -23
- package/dist-es5/getViewStateForLocations.d.ts.map +0 -1
- package/dist-es5/getViewStateForLocations.js +0 -64
- package/dist-es5/index.d.ts +0 -11
- package/dist-es5/index.d.ts.map +0 -1
- package/dist-es5/index.js +0 -28
- package/dist-es5/provider/FlowmapDataProvider.d.ts +0 -16
- package/dist-es5/provider/FlowmapDataProvider.d.ts.map +0 -1
- package/dist-es5/provider/FlowmapDataProvider.js +0 -22
- package/dist-es5/provider/LocalFlowmapDataProvider.d.ts +0 -20
- package/dist-es5/provider/LocalFlowmapDataProvider.d.ts.map +0 -1
- package/dist-es5/provider/LocalFlowmapDataProvider.js +0 -154
- package/dist-es5/time.d.ts +0 -24
- package/dist-es5/time.d.ts.map +0 -1
- package/dist-es5/time.js +0 -168
- package/dist-es5/types.d.ts +0 -118
- package/dist-es5/types.d.ts.map +0 -1
- package/dist-es5/types.js +0 -29
- package/dist-es5/util.d.ts +0 -5
- package/dist-es5/util.d.ts.map +0 -1
- package/dist-es5/util.js +0 -14
- package/tsconfig.es5.json +0 -11
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { LocationFilterMode, ViewportProps } from './types';
|
|
2
|
-
export interface FilterState {
|
|
3
|
-
selectedLocations: string[] | undefined;
|
|
4
|
-
selectedTimeRange: [Date, Date] | undefined;
|
|
5
|
-
locationFilterMode: LocationFilterMode;
|
|
6
|
-
}
|
|
7
|
-
export interface SettingsState {
|
|
8
|
-
animationEnabled: boolean;
|
|
9
|
-
fadeEnabled: boolean;
|
|
10
|
-
fadeOpacityEnabled: boolean;
|
|
11
|
-
locationTotalsEnabled: boolean;
|
|
12
|
-
adaptiveScalesEnabled: boolean;
|
|
13
|
-
clusteringEnabled: boolean;
|
|
14
|
-
clusteringAuto: boolean;
|
|
15
|
-
clusteringLevel?: number;
|
|
16
|
-
darkMode: boolean;
|
|
17
|
-
fadeAmount: number;
|
|
18
|
-
colorScheme: string | string[] | undefined;
|
|
19
|
-
highlightColor: string;
|
|
20
|
-
maxTopFlowsDisplayNum: number;
|
|
21
|
-
}
|
|
22
|
-
export interface FlowmapState {
|
|
23
|
-
filterState: FilterState;
|
|
24
|
-
settingsState: SettingsState;
|
|
25
|
-
viewport: ViewportProps;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=FlowmapState.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FlowmapState.d.ts","sourceRoot":"","sources":["../src/FlowmapState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5C,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC;CACzB"}
|
package/dist-es5/FlowmapState.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcFN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBTdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhdGlvbkZpbHRlck1vZGUsIFZpZXdwb3J0UHJvcHN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclN0YXRlIHtcbiAgc2VsZWN0ZWRMb2NhdGlvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBzZWxlY3RlZFRpbWVSYW5nZTogW0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkO1xuICBsb2NhdGlvbkZpbHRlck1vZGU6IExvY2F0aW9uRmlsdGVyTW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc1N0YXRlIHtcbiAgYW5pbWF0aW9uRW5hYmxlZDogYm9vbGVhbjtcbiAgZmFkZUVuYWJsZWQ6IGJvb2xlYW47XG4gIGZhZGVPcGFjaXR5RW5hYmxlZDogYm9vbGVhbjtcbiAgbG9jYXRpb25Ub3RhbHNFbmFibGVkOiBib29sZWFuO1xuICBhZGFwdGl2ZVNjYWxlc0VuYWJsZWQ6IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdFbmFibGVkOiBib29sZWFuO1xuICBjbHVzdGVyaW5nQXV0bzogYm9vbGVhbjtcbiAgY2x1c3RlcmluZ0xldmVsPzogbnVtYmVyO1xuICBkYXJrTW9kZTogYm9vbGVhbjtcbiAgZmFkZUFtb3VudDogbnVtYmVyO1xuICBjb2xvclNjaGVtZTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIGhpZ2hsaWdodENvbG9yOiBzdHJpbmc7XG4gIG1heFRvcEZsb3dzRGlzcGxheU51bTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dtYXBTdGF0ZSB7XG4gIGZpbHRlclN0YXRlOiBGaWx0ZXJTdGF0ZTtcbiAgc2V0dGluZ3NTdGF0ZTogU2V0dGluZ3NTdGF0ZTtcbiAgdmlld3BvcnQ6IFZpZXdwb3J0UHJvcHM7XG59XG4iXX0=
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { AggregateFlow, Cluster, ClusterLevels, ClusterNode, FlowAccessors, FlowCountsMapReduce } from './../types';
|
|
2
|
-
export declare type LocationWeightGetter = (id: string) => number;
|
|
3
|
-
/**
|
|
4
|
-
* A data structure representing the cluster levels for efficient flow aggregation.
|
|
5
|
-
*/
|
|
6
|
-
export interface ClusterIndex<F> {
|
|
7
|
-
availableZoomLevels: number[];
|
|
8
|
-
getClusterById: (clusterId: string) => Cluster | undefined;
|
|
9
|
-
/**
|
|
10
|
-
* List the nodes on the given zoom level.
|
|
11
|
-
*/
|
|
12
|
-
getClusterNodesFor: (zoom: number | undefined) => ClusterNode[] | undefined;
|
|
13
|
-
/**
|
|
14
|
-
* Get the min zoom level on which the location is not clustered.
|
|
15
|
-
*/
|
|
16
|
-
getMinZoomForLocation: (locationId: string) => number;
|
|
17
|
-
/**
|
|
18
|
-
* List the IDs of all locations in the cluster (leaves of the subtree starting in the cluster).
|
|
19
|
-
*/
|
|
20
|
-
expandCluster: (cluster: Cluster, targetZoom?: number) => string[];
|
|
21
|
-
/**
|
|
22
|
-
* Find the cluster the given location is residing in on the specified zoom level.
|
|
23
|
-
*/
|
|
24
|
-
findClusterFor: (locationId: string, zoom: number) => string | undefined;
|
|
25
|
-
/**
|
|
26
|
-
* Aggregate flows for the specified zoom level.
|
|
27
|
-
*/
|
|
28
|
-
aggregateFlows: (flows: F[], zoom: number, { getFlowOriginId, getFlowDestId, getFlowMagnitude }: FlowAccessors<F>, options?: {
|
|
29
|
-
flowCountsMapReduce?: FlowCountsMapReduce<F>;
|
|
30
|
-
}) => (F | AggregateFlow)[];
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Build ClusterIndex from the given cluster hierarchy
|
|
34
|
-
*/
|
|
35
|
-
export declare function buildIndex<F>(clusterLevels: ClusterLevels): ClusterIndex<F>;
|
|
36
|
-
export declare function makeLocationWeightGetter<F>(flows: F[], { getFlowOriginId, getFlowDestId, getFlowMagnitude }: FlowAccessors<F>): LocationWeightGetter;
|
|
37
|
-
/**
|
|
38
|
-
* @param availableZoomLevels Must be sorted in ascending order
|
|
39
|
-
* @param targetZoom
|
|
40
|
-
*/
|
|
41
|
-
export declare function findAppropriateZoomLevel(availableZoomLevels: number[], targetZoom: number): number;
|
|
42
|
-
//# sourceMappingURL=ClusterIndex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ClusterIndex.d.ts","sourceRoot":"","sources":["../../src/cluster/ClusterIndex.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,aAAa,EACb,OAAO,EACP,aAAa,EACb,WAAW,EACX,aAAa,EACb,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAGpB,oBAAY,oBAAoB,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAC3D;;OAEG;IACH,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,WAAW,EAAE,GAAG,SAAS,CAAC;IAC5E;;OAEG;IACH,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD;;OAEG;IACH,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACnE;;OAEG;IACH,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACzE;;OAEG;IACH,cAAc,EAAE,CACd,KAAK,EAAE,CAAC,EAAE,EACV,IAAI,EAAE,MAAM,EACZ,EAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EACpE,OAAO,CAAC,EAAE;QACR,mBAAmB,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;KAC9C,KACE,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAqJ3E;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,KAAK,EAAE,CAAC,EAAE,EACV,EAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GACnE,oBAAoB,CAuBtB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,mBAAmB,EAAE,MAAM,EAAE,EAC7B,UAAU,EAAE,MAAM,UAWnB"}
|
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright 2022 FlowmapBlue
|
|
4
|
-
* Copyright 2018-2020 Teralytics, modified by FlowmapBlue
|
|
5
|
-
*
|
|
6
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
* you may not use this file except in compliance with the License.
|
|
8
|
-
* You may obtain a copy of the License at
|
|
9
|
-
*
|
|
10
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
*
|
|
12
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
* See the License for the specific language governing permissions and
|
|
16
|
-
* limitations under the License.
|
|
17
|
-
*
|
|
18
|
-
*/
|
|
19
|
-
var __values = (this && this.__values) || function(o) {
|
|
20
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
21
|
-
if (m) return m.call(o);
|
|
22
|
-
if (o && typeof o.length === "number") return {
|
|
23
|
-
next: function () {
|
|
24
|
-
if (o && i >= o.length) o = void 0;
|
|
25
|
-
return { value: o && o[i++], done: !o };
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
29
|
-
};
|
|
30
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
31
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
32
|
-
if (!m) return o;
|
|
33
|
-
var i = m.call(o), r, ar = [], e;
|
|
34
|
-
try {
|
|
35
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
36
|
-
}
|
|
37
|
-
catch (error) { e = { error: error }; }
|
|
38
|
-
finally {
|
|
39
|
-
try {
|
|
40
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
41
|
-
}
|
|
42
|
-
finally { if (e) throw e.error; }
|
|
43
|
-
}
|
|
44
|
-
return ar;
|
|
45
|
-
};
|
|
46
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
-
exports.findAppropriateZoomLevel = exports.makeLocationWeightGetter = exports.buildIndex = void 0;
|
|
48
|
-
var types_1 = require("./../types");
|
|
49
|
-
var d3_array_1 = require("d3-array");
|
|
50
|
-
/**
|
|
51
|
-
* Build ClusterIndex from the given cluster hierarchy
|
|
52
|
-
*/
|
|
53
|
-
function buildIndex(clusterLevels) {
|
|
54
|
-
var e_1, _a, e_2, _b, e_3, _c;
|
|
55
|
-
var nodesByZoom = new Map();
|
|
56
|
-
var clustersById = new Map();
|
|
57
|
-
var minZoomByLocationId = new Map();
|
|
58
|
-
try {
|
|
59
|
-
for (var clusterLevels_1 = __values(clusterLevels), clusterLevels_1_1 = clusterLevels_1.next(); !clusterLevels_1_1.done; clusterLevels_1_1 = clusterLevels_1.next()) {
|
|
60
|
-
var _d = clusterLevels_1_1.value, zoom = _d.zoom, nodes = _d.nodes;
|
|
61
|
-
nodesByZoom.set(zoom, nodes);
|
|
62
|
-
try {
|
|
63
|
-
for (var nodes_1 = (e_2 = void 0, __values(nodes)), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
64
|
-
var node = nodes_1_1.value;
|
|
65
|
-
if ((0, types_1.isCluster)(node)) {
|
|
66
|
-
clustersById.set(node.id, node);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
var id = node.id;
|
|
70
|
-
var mz = minZoomByLocationId.get(id);
|
|
71
|
-
if (mz == null || mz > zoom) {
|
|
72
|
-
minZoomByLocationId.set(id, zoom);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
78
|
-
finally {
|
|
79
|
-
try {
|
|
80
|
-
if (nodes_1_1 && !nodes_1_1.done && (_b = nodes_1.return)) _b.call(nodes_1);
|
|
81
|
-
}
|
|
82
|
-
finally { if (e_2) throw e_2.error; }
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
87
|
-
finally {
|
|
88
|
-
try {
|
|
89
|
-
if (clusterLevels_1_1 && !clusterLevels_1_1.done && (_a = clusterLevels_1.return)) _a.call(clusterLevels_1);
|
|
90
|
-
}
|
|
91
|
-
finally { if (e_1) throw e_1.error; }
|
|
92
|
-
}
|
|
93
|
-
var _e = __read((0, d3_array_1.extent)(clusterLevels, function (cl) { return cl.zoom; }), 2), minZoom = _e[0], maxZoom = _e[1];
|
|
94
|
-
if (minZoom == null || maxZoom == null) {
|
|
95
|
-
throw new Error('Could not determine minZoom or maxZoom');
|
|
96
|
-
}
|
|
97
|
-
var leavesToClustersByZoom = new Map();
|
|
98
|
-
var _loop_1 = function (cluster) {
|
|
99
|
-
var zoom = cluster.zoom;
|
|
100
|
-
var leavesToClusters = leavesToClustersByZoom.get(zoom);
|
|
101
|
-
if (!leavesToClusters) {
|
|
102
|
-
leavesToClusters = new Map();
|
|
103
|
-
leavesToClustersByZoom.set(zoom, leavesToClusters);
|
|
104
|
-
}
|
|
105
|
-
visitClusterLeaves(cluster, function (leafId) {
|
|
106
|
-
leavesToClusters === null || leavesToClusters === void 0 ? void 0 : leavesToClusters.set(leafId, cluster);
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
try {
|
|
110
|
-
for (var _f = __values(clustersById.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
|
|
111
|
-
var cluster = _g.value;
|
|
112
|
-
_loop_1(cluster);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
116
|
-
finally {
|
|
117
|
-
try {
|
|
118
|
-
if (_g && !_g.done && (_c = _f.return)) _c.call(_f);
|
|
119
|
-
}
|
|
120
|
-
finally { if (e_3) throw e_3.error; }
|
|
121
|
-
}
|
|
122
|
-
function visitClusterLeaves(cluster, visit) {
|
|
123
|
-
var e_4, _a;
|
|
124
|
-
try {
|
|
125
|
-
for (var _b = __values(cluster.children), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
126
|
-
var childId = _c.value;
|
|
127
|
-
var child = clustersById.get(childId);
|
|
128
|
-
if (child) {
|
|
129
|
-
visitClusterLeaves(child, visit);
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
visit(childId);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
137
|
-
finally {
|
|
138
|
-
try {
|
|
139
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
140
|
-
}
|
|
141
|
-
finally { if (e_4) throw e_4.error; }
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
var expandCluster = function (cluster, targetZoom) {
|
|
145
|
-
if (targetZoom === void 0) { targetZoom = maxZoom; }
|
|
146
|
-
var ids = [];
|
|
147
|
-
var visit = function (c, expandedIds) {
|
|
148
|
-
var e_5, _a;
|
|
149
|
-
if (targetZoom > c.zoom) {
|
|
150
|
-
try {
|
|
151
|
-
for (var _b = __values(c.children), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
152
|
-
var childId = _c.value;
|
|
153
|
-
var child = clustersById.get(childId);
|
|
154
|
-
if (child) {
|
|
155
|
-
visit(child, expandedIds);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
expandedIds.push(childId);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
163
|
-
finally {
|
|
164
|
-
try {
|
|
165
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
166
|
-
}
|
|
167
|
-
finally { if (e_5) throw e_5.error; }
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
expandedIds.push(c.id);
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
visit(cluster, ids);
|
|
175
|
-
return ids;
|
|
176
|
-
};
|
|
177
|
-
function findClusterFor(locationId, zoom) {
|
|
178
|
-
var leavesToClusters = leavesToClustersByZoom.get(zoom);
|
|
179
|
-
if (!leavesToClusters) {
|
|
180
|
-
return undefined;
|
|
181
|
-
}
|
|
182
|
-
var cluster = leavesToClusters.get(locationId);
|
|
183
|
-
return cluster ? cluster.id : undefined;
|
|
184
|
-
}
|
|
185
|
-
var availableZoomLevels = clusterLevels
|
|
186
|
-
.map(function (cl) { return +cl.zoom; })
|
|
187
|
-
.sort(function (a, b) { return (0, d3_array_1.ascending)(a, b); });
|
|
188
|
-
return {
|
|
189
|
-
availableZoomLevels: availableZoomLevels,
|
|
190
|
-
getClusterNodesFor: function (zoom) {
|
|
191
|
-
if (zoom === undefined) {
|
|
192
|
-
return undefined;
|
|
193
|
-
}
|
|
194
|
-
return nodesByZoom.get(zoom);
|
|
195
|
-
},
|
|
196
|
-
getClusterById: function (clusterId) { return clustersById.get(clusterId); },
|
|
197
|
-
getMinZoomForLocation: function (locationId) {
|
|
198
|
-
return minZoomByLocationId.get(locationId) || minZoom;
|
|
199
|
-
},
|
|
200
|
-
expandCluster: expandCluster,
|
|
201
|
-
findClusterFor: findClusterFor,
|
|
202
|
-
aggregateFlows: function (flows, zoom, _a, options) {
|
|
203
|
-
var e_6, _b;
|
|
204
|
-
var getFlowOriginId = _a.getFlowOriginId, getFlowDestId = _a.getFlowDestId, getFlowMagnitude = _a.getFlowMagnitude;
|
|
205
|
-
if (options === void 0) { options = {}; }
|
|
206
|
-
if (zoom > maxZoom) {
|
|
207
|
-
return flows;
|
|
208
|
-
}
|
|
209
|
-
var result = [];
|
|
210
|
-
var aggFlowsByKey = new Map();
|
|
211
|
-
var makeKey = function (origin, dest) { return "".concat(origin, ":").concat(dest); };
|
|
212
|
-
var _c = options.flowCountsMapReduce, flowCountsMapReduce = _c === void 0 ? {
|
|
213
|
-
map: getFlowMagnitude,
|
|
214
|
-
reduce: function (acc, count) { return (acc || 0) + count; },
|
|
215
|
-
} : _c;
|
|
216
|
-
try {
|
|
217
|
-
for (var flows_1 = __values(flows), flows_1_1 = flows_1.next(); !flows_1_1.done; flows_1_1 = flows_1.next()) {
|
|
218
|
-
var flow = flows_1_1.value;
|
|
219
|
-
var origin_1 = getFlowOriginId(flow);
|
|
220
|
-
var dest = getFlowDestId(flow);
|
|
221
|
-
var originCluster = findClusterFor(origin_1, zoom) || origin_1;
|
|
222
|
-
var destCluster = findClusterFor(dest, zoom) || dest;
|
|
223
|
-
var key = makeKey(originCluster, destCluster);
|
|
224
|
-
if (originCluster === origin_1 && destCluster === dest) {
|
|
225
|
-
result.push(flow);
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
var aggregateFlow = aggFlowsByKey.get(key);
|
|
229
|
-
if (!aggregateFlow) {
|
|
230
|
-
aggregateFlow = {
|
|
231
|
-
origin: originCluster,
|
|
232
|
-
dest: destCluster,
|
|
233
|
-
count: flowCountsMapReduce.map(flow),
|
|
234
|
-
aggregate: true,
|
|
235
|
-
};
|
|
236
|
-
result.push(aggregateFlow);
|
|
237
|
-
aggFlowsByKey.set(key, aggregateFlow);
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
aggregateFlow.count = flowCountsMapReduce.reduce(aggregateFlow.count, flowCountsMapReduce.map(flow));
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
246
|
-
finally {
|
|
247
|
-
try {
|
|
248
|
-
if (flows_1_1 && !flows_1_1.done && (_b = flows_1.return)) _b.call(flows_1);
|
|
249
|
-
}
|
|
250
|
-
finally { if (e_6) throw e_6.error; }
|
|
251
|
-
}
|
|
252
|
-
return result;
|
|
253
|
-
},
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
exports.buildIndex = buildIndex;
|
|
257
|
-
function makeLocationWeightGetter(flows, _a) {
|
|
258
|
-
var e_7, _b;
|
|
259
|
-
var getFlowOriginId = _a.getFlowOriginId, getFlowDestId = _a.getFlowDestId, getFlowMagnitude = _a.getFlowMagnitude;
|
|
260
|
-
var locationTotals = {
|
|
261
|
-
incoming: new Map(),
|
|
262
|
-
outgoing: new Map(),
|
|
263
|
-
};
|
|
264
|
-
try {
|
|
265
|
-
for (var flows_2 = __values(flows), flows_2_1 = flows_2.next(); !flows_2_1.done; flows_2_1 = flows_2.next()) {
|
|
266
|
-
var flow = flows_2_1.value;
|
|
267
|
-
var origin_2 = getFlowOriginId(flow);
|
|
268
|
-
var dest = getFlowDestId(flow);
|
|
269
|
-
var count = getFlowMagnitude(flow);
|
|
270
|
-
locationTotals.incoming.set(dest, (locationTotals.incoming.get(dest) || 0) + count);
|
|
271
|
-
locationTotals.outgoing.set(origin_2, (locationTotals.outgoing.get(origin_2) || 0) + count);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
275
|
-
finally {
|
|
276
|
-
try {
|
|
277
|
-
if (flows_2_1 && !flows_2_1.done && (_b = flows_2.return)) _b.call(flows_2);
|
|
278
|
-
}
|
|
279
|
-
finally { if (e_7) throw e_7.error; }
|
|
280
|
-
}
|
|
281
|
-
return function (id) {
|
|
282
|
-
return Math.max(Math.abs(locationTotals.incoming.get(id) || 0), Math.abs(locationTotals.outgoing.get(id) || 0));
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
exports.makeLocationWeightGetter = makeLocationWeightGetter;
|
|
286
|
-
/**
|
|
287
|
-
* @param availableZoomLevels Must be sorted in ascending order
|
|
288
|
-
* @param targetZoom
|
|
289
|
-
*/
|
|
290
|
-
function findAppropriateZoomLevel(availableZoomLevels, targetZoom) {
|
|
291
|
-
if (!availableZoomLevels.length) {
|
|
292
|
-
throw new Error('No available zoom levels');
|
|
293
|
-
}
|
|
294
|
-
return availableZoomLevels[Math.min((0, d3_array_1.bisectLeft)(availableZoomLevels, Math.floor(targetZoom)), availableZoomLevels.length - 1)];
|
|
295
|
-
}
|
|
296
|
-
exports.findAppropriateZoomLevel = findAppropriateZoomLevel;
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2x1c3RlckluZGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsdXN0ZXIvQ2x1c3RlckluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsb0NBUW9CO0FBQ3BCLHFDQUF1RDtBQXVDdkQ7O0dBRUc7QUFDSCxTQUFnQixVQUFVLENBQUksYUFBNEI7O0lBQ3hELElBQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBQ3JELElBQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQ2hELElBQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7O1FBQ3RELEtBQTRCLElBQUEsa0JBQUEsU0FBQSxhQUFhLENBQUEsNENBQUEsdUVBQUU7WUFBaEMsSUFBQSw0QkFBYSxFQUFaLElBQUksVUFBQSxFQUFFLEtBQUssV0FBQTtZQUNyQixXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7Z0JBQzdCLEtBQW1CLElBQUEseUJBQUEsU0FBQSxLQUFLLENBQUEsQ0FBQSw0QkFBQSwrQ0FBRTtvQkFBckIsSUFBTSxJQUFJLGtCQUFBO29CQUNiLElBQUksSUFBQSxpQkFBUyxFQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNuQixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ2pDO3lCQUFNO3dCQUNFLElBQUEsRUFBRSxHQUFJLElBQUksR0FBUixDQUFTO3dCQUNsQixJQUFNLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3ZDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFOzRCQUMzQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFB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bnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIyIEZsb3dtYXBCbHVlXG4gKiBDb3B5cmlnaHQgMjAxOC0yMDIwIFRlcmFseXRpY3MsIG1vZGlmaWVkIGJ5IEZsb3dtYXBCbHVlXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5cbmltcG9ydCB7XG4gIEFnZ3JlZ2F0ZUZsb3csXG4gIENsdXN0ZXIsXG4gIENsdXN0ZXJMZXZlbHMsXG4gIENsdXN0ZXJOb2RlLFxuICBGbG93QWNjZXNzb3JzLFxuICBGbG93Q291bnRzTWFwUmVkdWNlLFxuICBpc0NsdXN0ZXIsXG59IGZyb20gJy4vLi4vdHlwZXMnO1xuaW1wb3J0IHthc2NlbmRpbmcsIGJpc2VjdExlZnQsIGV4dGVudH0gZnJvbSAnZDMtYXJyYXknO1xuXG5leHBvcnQgdHlwZSBMb2NhdGlvbldlaWdodEdldHRlciA9IChpZDogc3RyaW5nKSA9PiBudW1iZXI7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGNsdXN0ZXIgbGV2ZWxzIGZvciBlZmZpY2llbnQgZmxvdyBhZ2dyZWdhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVySW5kZXg8Rj4ge1xuICBhdmFpbGFibGVab29tTGV2ZWxzOiBudW1iZXJbXTtcbiAgZ2V0Q2x1c3RlckJ5SWQ6IChjbHVzdGVySWQ6IHN0cmluZykgPT4gQ2x1c3RlciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIExpc3QgdGhlIG5vZGVzIG9uIHRoZSBnaXZlbiB6b29tIGxldmVsLlxuICAgKi9cbiAgZ2V0Q2x1c3Rlck5vZGVzRm9yOiAoem9vbTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBDbHVzdGVyTm9kZVtdIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogR2V0IHRoZSBtaW4gem9vbSBsZXZlbCBvbiB3aGljaCB0aGUgbG9jYXRpb24gaXMgbm90IGNsdXN0ZXJlZC5cbiAgICovXG4gIGdldE1pblpvb21Gb3JMb2NhdGlvbjogKGxvY2F0aW9uSWQ6IHN0cmluZykgPT4gbnVtYmVyO1xuICAvKipcbiAgICogTGlzdCB0aGUgSURzIG9mIGFsbCBsb2NhdGlvbnMgaW4gdGhlIGNsdXN0ZXIgKGxlYXZlcyBvZiB0aGUgc3VidHJlZSBzdGFydGluZyBpbiB0aGUgY2x1c3RlcikuXG4gICAqL1xuICBleHBhbmRDbHVzdGVyOiAoY2x1c3RlcjogQ2x1c3RlciwgdGFyZ2V0Wm9vbT86IG51bWJlcikgPT4gc3RyaW5nW107XG4gIC8qKlxuICAgKiBGaW5kIHRoZSBjbHVzdGVyIHRoZSBnaXZlbiBsb2NhdGlvbiBpcyByZXNpZGluZyBpbiBvbiB0aGUgc3BlY2lmaWVkIHpvb20gbGV2ZWwuXG4gICAqL1xuICBmaW5kQ2x1c3RlckZvcjogKGxvY2F0aW9uSWQ6IHN0cmluZywgem9vbTogbnVtYmVyKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgZmxvd3MgZm9yIHRoZSBzcGVjaWZpZWQgem9vbSBsZXZlbC5cbiAgICovXG4gIGFnZ3JlZ2F0ZUZsb3dzOiAoXG4gICAgZmxvd3M6IEZbXSxcbiAgICB6b29tOiBudW1iZXIsXG4gICAge2dldEZsb3dPcmlnaW5JZCwgZ2V0Rmxvd0Rlc3RJZCwgZ2V0Rmxvd01hZ25pdHVkZX06IEZsb3dBY2Nlc3NvcnM8Rj4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGZsb3dDb3VudHNNYXBSZWR1Y2U/OiBGbG93Q291bnRzTWFwUmVkdWNlPEY+O1xuICAgIH0sXG4gICkgPT4gKEYgfCBBZ2dyZWdhdGVGbG93KVtdO1xufVxuXG4vKipcbiAqIEJ1aWxkIENsdXN0ZXJJbmRleCBmcm9tIHRoZSBnaXZlbiBjbHVzdGVyIGhpZXJhcmNoeVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbmRleDxGPihjbHVzdGVyTGV2ZWxzOiBDbHVzdGVyTGV2ZWxzKTogQ2x1c3RlckluZGV4PEY+IHtcbiAgY29uc3Qgbm9kZXNCeVpvb20gPSBuZXcgTWFwPG51bWJlciwgQ2x1c3Rlck5vZGVbXT4oKTtcbiAgY29uc3QgY2x1c3RlcnNCeUlkID0gbmV3IE1hcDxzdHJpbmcsIENsdXN0ZXI+KCk7XG4gIGNvbnN0IG1pblpvb21CeUxvY2F0aW9uSWQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IHt6b29tLCBub2Rlc30gb2YgY2x1c3RlckxldmVscykge1xuICAgIG5vZGVzQnlab29tLnNldCh6b29tLCBub2Rlcyk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAoaXNDbHVzdGVyKG5vZGUpKSB7XG4gICAgICAgIGNsdXN0ZXJzQnlJZC5zZXQobm9kZS5pZCwgbm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7aWR9ID0gbm9kZTtcbiAgICAgICAgY29uc3QgbXogPSBtaW5ab29tQnlMb2NhdGlvbklkLmdldChpZCk7XG4gICAgICAgIGlmIChteiA9PSBudWxsIHx8IG16ID4gem9vbSkge1xuICAgICAgICAgIG1pblpvb21CeUxvY2F0aW9uSWQuc2V0KGlkLCB6b29tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IFttaW5ab29tLCBtYXhab29tXSA9IGV4dGVudChjbHVzdGVyTGV2ZWxzLCAoY2wpID0+IGNsLnpvb20pO1xuICBpZiAobWluWm9vbSA9PSBudWxsIHx8IG1heFpvb20gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRldGVybWluZSBtaW5ab29tIG9yIG1heFpvb20nKTtcbiAgfVxuXG4gIGNvbnN0IGxlYXZlc1RvQ2x1c3RlcnNCeVpvb20gPSBuZXcgTWFwPG51bWJlciwgTWFwPHN0cmluZywgQ2x1c3Rlcj4+KCk7XG5cbiAgZm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzQnlJZC52YWx1ZXMoKSkge1xuICAgIGNvbnN0IHt6b29tfSA9IGNsdXN0ZXI7XG4gICAgbGV0IGxlYXZlc1RvQ2x1c3RlcnMgPSBsZWF2ZXNUb0NsdXN0ZXJzQnlab29tLmdldCh6b29tKTtcbiAgICBpZiAoIWxlYXZlc1RvQ2x1c3RlcnMpIHtcbiAgICAgIGxlYXZlc1RvQ2x1c3RlcnMgPSBuZXcgTWFwPHN0cmluZywgQ2x1c3Rlcj4oKTtcbiAgICAgIGxlYXZlc1RvQ2x1c3RlcnNCeVpvb20uc2V0KHpvb20sIGxlYXZlc1RvQ2x1c3RlcnMpO1xuICAgIH1cbiAgICB2aXNpdENsdXN0ZXJMZWF2ZXMoY2x1c3RlciwgKGxlYWZJZCkgPT4ge1xuICAgICAgbGVhdmVzVG9DbHVzdGVycz8uc2V0KGxlYWZJZCwgY2x1c3Rlcik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdENsdXN0ZXJMZWF2ZXMoY2x1c3RlcjogQ2x1c3RlciwgdmlzaXQ6IChpZDogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGNsdXN0ZXIuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2x1c3RlcnNCeUlkLmdldChjaGlsZElkKTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICB2aXNpdENsdXN0ZXJMZWF2ZXMoY2hpbGQsIHZpc2l0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpc2l0KGNoaWxkSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4cGFuZENsdXN0ZXIgPSAoY2x1c3RlcjogQ2x1c3RlciwgdGFyZ2V0Wm9vbTogbnVtYmVyID0gbWF4Wm9vbSkgPT4ge1xuICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB2aXNpdCA9IChjOiBDbHVzdGVyLCBleHBhbmRlZElkczogc3RyaW5nW10pID0+IHtcbiAgICAgIGlmICh0YXJnZXRab29tID4gYy56b29tKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRJZCBvZiBjLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSBjbHVzdGVyc0J5SWQuZ2V0KGNoaWxkSWQpO1xuICAgICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgdmlzaXQoY2hpbGQsIGV4cGFuZGVkSWRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwYW5kZWRJZHMucHVzaChjaGlsZElkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cGFuZGVkSWRzLnB1c2goYy5pZCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2aXNpdChjbHVzdGVyLCBpZHMpO1xuICAgIHJldHVybiBpZHM7XG4gIH07XG5cbiAgZnVuY3Rpb24gZmluZENsdXN0ZXJGb3IobG9jYXRpb25JZDogc3RyaW5nLCB6b29tOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZWF2ZXNUb0NsdXN0ZXJzID0gbGVhdmVzVG9DbHVzdGVyc0J5Wm9vbS5nZXQoem9vbSk7XG4gICAgaWYgKCFsZWF2ZXNUb0NsdXN0ZXJzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjbHVzdGVyID0gbGVhdmVzVG9DbHVzdGVycy5nZXQobG9jYXRpb25JZCk7XG4gICAgcmV0dXJuIGNsdXN0ZXIgPyBjbHVzdGVyLmlkIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgYXZhaWxhYmxlWm9vbUxldmVscyA9IGNsdXN0ZXJMZXZlbHNcbiAgICAubWFwKChjbCkgPT4gK2NsLnpvb20pXG4gICAgLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhLCBiKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhdmFpbGFibGVab29tTGV2ZWxzLFxuXG4gICAgZ2V0Q2x1c3Rlck5vZGVzRm9yOiAoem9vbSkgPT4ge1xuICAgICAgaWYgKHpvb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGVzQnlab29tLmdldCh6b29tKTtcbiAgICB9LFxuXG4gICAgZ2V0Q2x1c3RlckJ5SWQ6IChjbHVzdGVySWQpID0+IGNsdXN0ZXJzQnlJZC5nZXQoY2x1c3RlcklkKSxcblxuICAgIGdldE1pblpvb21Gb3JMb2NhdGlvbjogKGxvY2F0aW9uSWQpID0+XG4gICAgICBtaW5ab29tQnlMb2NhdGlvbklkLmdldChsb2NhdGlvbklkKSB8fCBtaW5ab29tLFxuXG4gICAgZXhwYW5kQ2x1c3RlcixcblxuICAgIGZpbmRDbHVzdGVyRm9yLFxuXG4gICAgYWdncmVnYXRlRmxvd3M6IChcbiAgICAgIGZsb3dzLFxuICAgICAgem9vbSxcbiAgICAgIHtnZXRGbG93T3JpZ2luSWQsIGdldEZsb3dEZXN0SWQsIGdldEZsb3dNYWduaXR1ZGV9LFxuICAgICAgb3B0aW9ucyA9IHt9LFxuICAgICkgPT4ge1xuICAgICAgaWYgKHpvb20gPiBtYXhab29tKSB7XG4gICAgICAgIHJldHVybiBmbG93cztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdDogKEYgfCBBZ2dyZWdhdGVGbG93KVtdID0gW107XG4gICAgICBjb25zdCBhZ2dGbG93c0J5S2V5ID0gbmV3IE1hcDxzdHJpbmcsIEFnZ3JlZ2F0ZUZsb3c+KCk7XG4gICAgICBjb25zdCBtYWtlS2V5ID0gKG9yaWdpbjogc3RyaW5nLCBkZXN0OiBzdHJpbmcpID0+IGAke29yaWdpbn06JHtkZXN0fWA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZsb3dDb3VudHNNYXBSZWR1Y2UgPSB7XG4gICAgICAgICAgbWFwOiBnZXRGbG93TWFnbml0dWRlLFxuICAgICAgICAgIHJlZHVjZTogKGFjYzogYW55LCBjb3VudDogbnVtYmVyKSA9PiAoYWNjIHx8IDApICsgY291bnQsXG4gICAgICAgIH0sXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICBjb25zdCBvcmlnaW4gPSBnZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgICAgIGNvbnN0IGRlc3QgPSBnZXRGbG93RGVzdElkKGZsb3cpO1xuICAgICAgICBjb25zdCBvcmlnaW5DbHVzdGVyID0gZmluZENsdXN0ZXJGb3Iob3JpZ2luLCB6b29tKSB8fCBvcmlnaW47XG4gICAgICAgIGNvbnN0IGRlc3RDbHVzdGVyID0gZmluZENsdXN0ZXJGb3IoZGVzdCwgem9vbSkgfHwgZGVzdDtcbiAgICAgICAgY29uc3Qga2V5ID0gbWFrZUtleShvcmlnaW5DbHVzdGVyLCBkZXN0Q2x1c3Rlcik7XG4gICAgICAgIGlmIChvcmlnaW5DbHVzdGVyID09PSBvcmlnaW4gJiYgZGVzdENsdXN0ZXIgPT09IGRlc3QpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChmbG93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgYWdncmVnYXRlRmxvdyA9IGFnZ0Zsb3dzQnlLZXkuZ2V0KGtleSk7XG4gICAgICAgICAgaWYgKCFhZ2dyZWdhdGVGbG93KSB7XG4gICAgICAgICAgICBhZ2dyZWdhdGVGbG93ID0ge1xuICAgICAgICAgICAgICBvcmlnaW46IG9yaWdpbkNsdXN0ZXIsXG4gICAgICAgICAgICAgIGRlc3Q6IGRlc3RDbHVzdGVyLFxuICAgICAgICAgICAgICBjb3VudDogZmxvd0NvdW50c01hcFJlZHVjZS5tYXAoZmxvdyksXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZTogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHQucHVzaChhZ2dyZWdhdGVGbG93KTtcbiAgICAgICAgICAgIGFnZ0Zsb3dzQnlLZXkuc2V0KGtleSwgYWdncmVnYXRlRmxvdyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZsb3cuY291bnQgPSBmbG93Q291bnRzTWFwUmVkdWNlLnJlZHVjZShcbiAgICAgICAgICAgICAgYWdncmVnYXRlRmxvdy5jb3VudCxcbiAgICAgICAgICAgICAgZmxvd0NvdW50c01hcFJlZHVjZS5tYXAoZmxvdyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvY2F0aW9uV2VpZ2h0R2V0dGVyPEY+KFxuICBmbG93czogRltdLFxuICB7Z2V0Rmxvd09yaWdpbklkLCBnZXRGbG93RGVzdElkLCBnZXRGbG93TWFnbml0dWRlfTogRmxvd0FjY2Vzc29yczxGPixcbik6IExvY2F0aW9uV2VpZ2h0R2V0dGVyIHtcbiAgY29uc3QgbG9jYXRpb25Ub3RhbHMgPSB7XG4gICAgaW5jb21pbmc6IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCksXG4gICAgb3V0Z29pbmc6IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCksXG4gIH07XG4gIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgIGNvbnN0IG9yaWdpbiA9IGdldEZsb3dPcmlnaW5JZChmbG93KTtcbiAgICBjb25zdCBkZXN0ID0gZ2V0Rmxvd0Rlc3RJZChmbG93KTtcbiAgICBjb25zdCBjb3VudCA9IGdldEZsb3dNYWduaXR1ZGUoZmxvdyk7XG4gICAgbG9jYXRpb25Ub3RhbHMuaW5jb21pbmcuc2V0KFxuICAgICAgZGVzdCxcbiAgICAgIChsb2NhdGlvblRvdGFscy5pbmNvbWluZy5nZXQoZGVzdCkgfHwgMCkgKyBjb3VudCxcbiAgICApO1xuICAgIGxvY2F0aW9uVG90YWxzLm91dGdvaW5nLnNldChcbiAgICAgIG9yaWdpbixcbiAgICAgIChsb2NhdGlvblRvdGFscy5vdXRnb2luZy5nZXQob3JpZ2luKSB8fCAwKSArIGNvdW50LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChpZDogc3RyaW5nKSA9PlxuICAgIE1hdGgubWF4KFxuICAgICAgTWF0aC5hYnMobG9jYXRpb25Ub3RhbHMuaW5jb21pbmcuZ2V0KGlkKSB8fCAwKSxcbiAgICAgIE1hdGguYWJzKGxvY2F0aW9uVG90YWxzLm91dGdvaW5nLmdldChpZCkgfHwgMCksXG4gICAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gYXZhaWxhYmxlWm9vbUxldmVscyBNdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEBwYXJhbSB0YXJnZXRab29tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQXBwcm9wcmlhdGVab29tTGV2ZWwoXG4gIGF2YWlsYWJsZVpvb21MZXZlbHM6IG51bWJlcltdLFxuICB0YXJnZXRab29tOiBudW1iZXIsXG4pIHtcbiAgaWYgKCFhdmFpbGFibGVab29tTGV2ZWxzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXZhaWxhYmxlIHpvb20gbGV2ZWxzJyk7XG4gIH1cbiAgcmV0dXJuIGF2YWlsYWJsZVpvb21MZXZlbHNbXG4gICAgTWF0aC5taW4oXG4gICAgICBiaXNlY3RMZWZ0KGF2YWlsYWJsZVpvb21MZXZlbHMsIE1hdGguZmxvb3IodGFyZ2V0Wm9vbSkpLFxuICAgICAgYXZhaWxhYmxlWm9vbUxldmVscy5sZW5ndGggLSAxLFxuICAgIClcbiAgXTtcbn1cbiJdfQ==
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { LocationWeightGetter } from './ClusterIndex';
|
|
2
|
-
import { ClusterLevel, LocationAccessors } from '../types';
|
|
3
|
-
export interface Options {
|
|
4
|
-
minZoom: number;
|
|
5
|
-
maxZoom: number;
|
|
6
|
-
radius: number;
|
|
7
|
-
extent: number;
|
|
8
|
-
nodeSize: number;
|
|
9
|
-
makeClusterName: (id: number, numPoints: number) => string | undefined;
|
|
10
|
-
makeClusterId: (id: number) => string;
|
|
11
|
-
}
|
|
12
|
-
interface BasePoint {
|
|
13
|
-
x: number;
|
|
14
|
-
y: number;
|
|
15
|
-
weight: number;
|
|
16
|
-
zoom: number;
|
|
17
|
-
parentId: number;
|
|
18
|
-
}
|
|
19
|
-
interface LeafPoint extends BasePoint {
|
|
20
|
-
index: number;
|
|
21
|
-
}
|
|
22
|
-
interface ClusterPoint extends BasePoint {
|
|
23
|
-
id: number;
|
|
24
|
-
numPoints: number;
|
|
25
|
-
}
|
|
26
|
-
declare type Point = LeafPoint | ClusterPoint;
|
|
27
|
-
export declare function isLeafPoint(p: Point): p is LeafPoint;
|
|
28
|
-
export declare function isClusterPoint(p: Point): p is ClusterPoint;
|
|
29
|
-
export declare function clusterLocations<L>(locations: L[], locationAccessors: LocationAccessors<L>, getLocationWeight: LocationWeightGetter, options?: Partial<Options>): ClusterLevel[];
|
|
30
|
-
export {};
|
|
31
|
-
//# sourceMappingURL=cluster.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../src/cluster/cluster.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAC,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAU,YAAY,EAAe,iBAAiB,EAAC,MAAM,UAAU,CAAC;AAE/E,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACvE,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;CACvC;AAYD,UAAU,SAAS;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,SAAU,SAAQ,SAAS;IACnC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,YAAa,SAAQ,SAAS;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,aAAK,KAAK,GAAG,SAAS,GAAG,YAAY,CAAC;AAEtC,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAGpD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,YAAY,CAG1D;AAID,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,SAAS,EAAE,CAAC,EAAE,EACd,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACvC,iBAAiB,EAAE,oBAAoB,EACvC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GACzB,YAAY,EAAE,CA8FhB"}
|