Skip to content
Calculates morton numbers for spatial indexing
JavaScript
Latest commit b0ebe7b Nov 24, 2011 @kkaefer add travis file
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.

Something went wrong with that request. Please try again.