@thi.ng/geom-accel
Version:
n-D spatial indexing data structures with a shared ES6 Map/Set-like API
49 lines • 2.04 kB
TypeScript
import type { Fn, ICopy, IEmpty, Maybe, Pair } from "@thi.ng/api";
import type { DistanceFn, ReadonlyVec } from "@thi.ng/vectors";
import type { IRegionQuery, ISpatialMap } from "./api.js";
type MaybeKdNode<K extends ReadonlyVec, V> = Maybe<KdNode<K, V>>;
export declare class KdNode<K extends ReadonlyVec, V> {
d: number;
parent?: KdNode<K, V>;
l?: KdNode<K, V>;
r?: KdNode<K, V>;
k: K;
v: V;
constructor(parent: MaybeKdNode<K, V>, dim: number, key: K, val: V);
get height(): number;
}
/**
* https://en.wikipedia.org/wiki/K-d_tree
*
* Partially based on:
* https://github.com/ubilabs/kd-tree-javascript
*
*/
export declare class KdTreeMap<K extends ReadonlyVec, V> implements ICopy<KdTreeMap<K, V>>, IEmpty<KdTreeMap<K, V>>, IRegionQuery<K, V, number>, ISpatialMap<K, V> {
readonly distanceFn: DistanceFn;
readonly dim: number;
protected root: MaybeKdNode<K, V>;
protected _size: number;
constructor(dim: number, pairs?: Iterable<Pair<K, V>>, distanceFn?: DistanceFn);
[Symbol.iterator](): Generator<Pair<K, V>, void, unknown>;
keys(): Generator<K, void, unknown>;
values(): IterableIterator<V>;
get size(): number;
get height(): number;
get ratio(): number;
copy(): KdTreeMap<K, V>;
clear(): void;
empty(): KdTreeMap<K, V>;
set(key: K, val: V, eps?: number): boolean;
into(pairs: Iterable<Pair<K, V>>, eps?: number): boolean;
remove(key: K): boolean;
has(key: K, eps?: number): boolean;
get(key: K, eps?: number): V | undefined;
query(q: K, maxDist: number, limit?: number, acc?: Pair<K, V>[]): Pair<K, V>[];
queryKeys(q: K, maxDist: number, limit?: number, acc?: K[]): K[];
queryValues(q: K, maxDist: number, limit?: number, acc?: V[]): V[];
protected doSelect<T>(q: K, f: Fn<KdNode<K, V>, T>, maxDist: number, maxNum?: number, acc?: T[]): T[];
protected buildTree(points: Pair<K, V>[], depth: number, parent?: KdNode<K, V>): KdNode<K, V> | undefined;
}
export {};
//# sourceMappingURL=kd-tree-map.d.ts.map