Quadbin Spatial Index Utilities

0.4.2 · active · verified Sun Apr 19

The `quadbin` library (version 0.4.2) provides essential utility functions for working with the Quadbin spatial index, a hierarchical geospatial indexing system developed by CARTO. Quadbins represent map cells using 64-bit integers, offering a distinct approach compared to variable-length indexing systems like Quadkey. This TypeScript-first library emphasizes performance and type safety, making it suitable for geospatial data processing in Node.js environments (requiring Node.js >=18). It's primarily used in WebGL and visualization contexts for efficient spatial queries and data aggregation. The library's main differentiator is its use of JavaScript's `BigInt` type for quadbin indices, which necessitates explicit conversion functions like `bigIntToHex` and `hexToBigInt` when serializing or deserializing data (e.g., for JSON). While specific release cadences aren't strictly defined, the package receives active maintenance, with recent dependency updates reflecting ongoing support.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates converting an XYZ tile to a Quadbin BigInt, handling JSON serialization via hex strings, and converting back.

import { tileToCell, cellToTile, bigIntToHex, hexToBigInt } from 'quadbin';

// Example: Convert an XYZ tile to a Quadbin BigInt
const zoom = 10;
const x = 325;
const y = 373;

const tile = { x, y, z: zoom };
const quadbinBigInt = tileToCell(tile);

console.log(`Tile {z: ${zoom}, x: ${x}, y: ${y}} converts to Quadbin BigInt: ${quadbinBigInt}n`);

// Quadbin BigInts cannot be directly serialized to JSON. Convert to hex string.
const quadbinHexString = bigIntToHex(quadbinBigInt);
console.log(`Quadbin BigInt as hex string for JSON: ${quadbinHexString}n`);

// To use the hex string back in the library, convert it back to BigInt.
const restoredQuadbinBigInt = hexToBigInt(quadbinHexString);
console.log(`Restored Quadbin BigInt from hex string: ${restoredQuadbinBigInt}n`);

// Convert the Quadbin BigInt back to an XYZ tile
const convertedTile = cellToTile(restoredQuadbinBigInt);

console.log(`Quadbin BigInt ${restoredQuadbinBigInt} converts back to Tile: {z: ${convertedTile.z}, x: ${convertedTile.x}, y: ${convertedTile.y}}`);

// Verify the conversion
if (convertedTile.z === zoom && convertedTile.x === x && convertedTile.y === y) {
  console.log('\nConversion successful and consistent!');
} else {
  console.error('\nConversion resulted in a different tile!');
}

view raw JSON →