Security News
The Risks of Misguided Research in Supply Chain Security
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
deyihu-flatbush
Advanced tools
A really fast static spatial index for 2D points and rectangles in JavaScript.
An efficient implementation of the packed Hilbert R-tree algorithm. Enables fast spatial queries on a very large number of objects (e.g. millions), which is very useful in maps, data visualizations and computational geometry algorithms.
Similar to RBush, with the following key differences:
Supports geographic locations with the geoflatbush extension.
// initialize Flatbush for 1000 items
const index = new Flatbush(1000);
// fill it with 1000 rectangles
for (const p of items) {
index.add(p.minX, p.minY, p.maxX, p.maxY);
}
// perform the indexing
index.finish();
// make a bounding box query
const found = index.search(minX, minY, maxX, maxY).map((i) => items[i]);
// make a k-nearest-neighbors query
const neighborIds = index.neighbors(x, y, 5);
// instantly transfer the index from a worker to the main thread
postMessage(index.data, [index.data]);
// reconstruct the index from a raw array buffer
const index = Flatbush.from(e.data);
Install with NPM: npm install flatbush
, then import as a module:
import Flatbush from 'flatbush';
Or use as a module directly in the browser with jsDelivr:
<script type="module">
import Flatbush from 'https://cdn.jsdelivr.net/npm/flatbush/+esm';
</script>
Alternatively, there's a browser bundle with a Flatbush
global variable:
<script src="https://cdn.jsdelivr.net/npm/flatbush"></script>
new Flatbush(numItems[, nodeSize, ArrayType])
Creates a Flatbush index that will hold a given number of items (numItems
). Additionally accepts:
nodeSize
: size of the tree node (16
by default); experiment with different values for best performance (increasing this value makes indexing faster and queries slower, and vise versa).ArrayType
: the array type used for coordinates storage (Float64Array
by default);
other types may be faster in certain cases (e.g. Int32Array
when your data is integer).index.add(minX, minY, maxX, maxY)
Adds a given rectangle to the index. Returns a zero-based, incremental number that represents the newly added rectangle.
index.finish()
Performs indexing of the added rectangles.
Their number must match the one provided when creating a Flatbush
object.
index.search(minX, minY, maxX, maxY[, filterFn])
Returns an array of indices of items intersecting or touching a given bounding box. Item indices refer to the value returned by index.add()
.
const ids = index.search(10, 10, 20, 20);
If given a filterFn
, calls it on every found item (passing an item index)
and only includes it if the function returned a truthy value.
const ids = index.search(10, 10, 20, 20, (i) => items[i].foo === 'bar');
index.neighbors(x, y[, maxResults, maxDistance, filterFn])
Returns an array of item indices in order of distance from the given x, y
(known as K nearest neighbors, or KNN). Item indices refer to the value returned by index.add()
.
const ids = index.neighbors(10, 10, 5); // returns 5 ids
maxResults
and maxDistance
are Infinity
by default.
Also accepts a filterFn
similar to index.search
.
Flatbush.from(data)
Recreates a Flatbush index from raw ArrayBuffer
data
(that's exposed as index.data
on a previously indexed Flatbush instance).
Very useful for transferring indices between threads or storing them in a file.
data
: array buffer that holds the index.minX
, minY
, maxX
, maxY
: bounding box of the data.numItems
: number of stored items.nodeSize
: number of items in a node tree.ArrayType
: array type used for internal coordinates storage.IndexArrayType
: array type used for internal item indices storage.Running node bench.js
with Node v14:
bench | flatbush | rbush |
---|---|---|
index 1,000,000 rectangles | 273ms | 1143ms |
1000 searches 10% | 575ms | 781ms |
1000 searches 1% | 63ms | 155ms |
1000 searches 0.01% | 6ms | 17ms |
1000 searches of 100 neighbors | 24ms | 43ms |
1 search of 1,000,000 neighbors | 133ms | 280ms |
100,000 searches of 1 neighbor | 710ms | 1170ms |
FAQs
Fast static spatial index for rectangles
The npm package deyihu-flatbush receives a total of 3 weekly downloads. As such, deyihu-flatbush popularity was classified as not popular.
We found that deyihu-flatbush demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
Research
Security News
Socket researchers found several malicious npm packages typosquatting Chalk and Chokidar, targeting Node.js developers with kill switches and data theft.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.