diff --git a/js/rtree/rbush-knn.js b/js/rtree/rbush-knn.js new file mode 100644 index 0000000..f3803fc --- /dev/null +++ b/js/rtree/rbush-knn.js @@ -0,0 +1,156 @@ +/* https://github.com/mourner/rbush-knn */ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.knn = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 0) { + for (var i = (this.length >> 1) - 1; i >= 0; i--) { this._down(i); } + } +}; + +TinyQueue.prototype.push = function push (item) { + this.data.push(item); + this.length++; + this._up(this.length - 1); +}; + +TinyQueue.prototype.pop = function pop () { + if (this.length === 0) { return undefined; } + + var top = this.data[0]; + var bottom = this.data.pop(); + this.length--; + + if (this.length > 0) { + this.data[0] = bottom; + this._down(0); + } + + return top; +}; + +TinyQueue.prototype.peek = function peek () { + return this.data[0]; +}; + +TinyQueue.prototype._up = function _up (pos) { + var ref = this; + var data = ref.data; + var compare = ref.compare; + var item = data[pos]; + + while (pos > 0) { + var parent = (pos - 1) >> 1; + var current = data[parent]; + if (compare(item, current) >= 0) { break; } + data[pos] = current; + pos = parent; + } + + data[pos] = item; +}; + +TinyQueue.prototype._down = function _down (pos) { + var ref = this; + var data = ref.data; + var compare = ref.compare; + var halfLength = this.length >> 1; + var item = data[pos]; + + while (pos < halfLength) { + var left = (pos << 1) + 1; + var best = data[left]; + var right = left + 1; + + if (right < this.length && compare(data[right], best) < 0) { + left = right; + best = data[right]; + } + if (compare(best, item) >= 0) { break; } + + data[pos] = best; + pos = left; + } + + data[pos] = item; +}; + +function defaultCompare(a, b) { + return a < b ? -1 : a > b ? 1 : 0; +} + +return TinyQueue; + +})); + +},{}]},{},[1])(1) +});