Calculates morton numbers for spatial indexing
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
test
.travis.yml
LICENSE
README.md
index.js
package.json

README.md

NAME

node-morton - Calculates morton numbers and Z-order codes for spatial indexing.

USAGE

Install with npm install morton.

var morton = require('morton');

morton(32, 436);          // => 167456

morton.code(1, 0, 1);     // => 140737488355328
morton.code(2, 0, 2);     // => 140737488355328
morton.code(3, 0, 4);     // => 140737488355328
morton.code(4, 0, 8);     // => 140737488355328

morton.range(1, 0, 0);    // => [              0,   70368744177663 ]
morton.range(1, 1, 0);    // => [  70368744177664, 140737488355327 ]
morton.range(1, 0, 1);    // => [ 140737488355328, 211106232532991 ]
morton.range(1, 1, 1);    // => [ 211106232532992, 281474976710655 ]

Note: input numbers must be smaller than 2^24 (16777216). Since the resulting output has twice as many bits, you'll get back numbers that are up to 2^48 (281474976710656). JavaScript can still represent these numbers without losing precision, however, you can't use bitwise operators on these numbers if your input numbers are potentially bigger than 2^15 (32768) because JavaScript only supports bitwise operators on 32 bit signed integers.

morton.code(z, x, y) returns a 48-bit Z-order code.

morton.range(z, x, y) will return an array of the lower and upper bound of the Z-order rectangle. See also Z-order curves in Wikipedia.

[x, y] = morton.reverse(c) reverses c = morton(x, y).

[x, y] = morton.decode(z, c) reverses c = morton.code(z, x, y).

TESTS

expresso is required to run unit tests.

npm install expresso
expresso

CONTRIBUTORS

ACKNOWLEDGEMENTS

Thanks to Sean Eron Anderson for his Bit Twiddling Hacks page.

LICENSE

node-morton is BSD licensed.