diff --git a/src/ol/structs/rtree.js b/src/ol/structs/rtree.js index 481b96a0c5..902b298099 100644 --- a/src/ol/structs/rtree.js +++ b/src/ol/structs/rtree.js @@ -120,7 +120,7 @@ ol.structs.RTree.squarifiedRatio_ = function(l, w, fill) { /** - * Choose the best damn node for rectangle to be inserted into. + * Choose the best for rectangle to be inserted into. * * @param {ol.structs.RTreeNode} rect Rectangle. * @param {ol.structs.RTreeNode} root Root to start search. @@ -275,6 +275,23 @@ ol.structs.RTree.prototype.insertSubtree_ = function(node, root) { }; +/** + * Split a set of nodes into two roughly equally-filled nodes. + * + * @param {Array.} nodes Array of nodes. + * @private + * @return {Array.>} An array of two new arrays + * of nodes. + */ +ol.structs.RTree.prototype.linearSplit_ = function(nodes) { + var n = this.pickLinear_(nodes); + while (nodes.length > 0) { + this.pickNext_(nodes, n[0], n[1]); + } + return n; +}; + + /** * Pick the "best" two starter nodes to use as seeds using the "linear" * criteria. @@ -398,6 +415,38 @@ ol.structs.RTree.prototype.pickNext_ = function(nodes, a, b) { }; +/** + * Non-recursive function that deletes a specific region. + * + * @param {ol.Extent} extent Extent. + * @param {Object=} opt_obj Object. + * @return {Array} Result. + * @this {ol.structs.RTree} + */ +ol.structs.RTree.prototype.remove = function(extent, opt_obj) { + arguments[0] = /** @type {ol.structs.RTreeNode} */ ({extent: extent}); + switch (arguments.length) { + case 1: + arguments[1] = false; // opt_obj == false for conditionals + case 2: + arguments[2] = this.rootTree_; // Add root node to end of argument list + default: + arguments.length = 3; + } + if (arguments[1] === false) { // Do area-wide † + var numberDeleted = 0; + var result = []; + do { + numberDeleted = result.length; + result = result.concat(this.removeSubtree_.apply(this, arguments)); + } while (numberDeleted != result.length); + return result; + } else { // Delete a specific item + return this.removeSubtree_.apply(this, arguments); + } +}; + + /** * Find the best specific node(s) for object to be deleted from. * @@ -503,55 +552,6 @@ ol.structs.RTree.prototype.removeSubtree_ = function(rect, obj, root) { }; -/** - * Split a set of nodes into two roughly equally-filled nodes. - * - * @param {Array.} nodes Array of nodes. - * @private - * @return {Array.>} An array of two new arrays - * of nodes. - */ -ol.structs.RTree.prototype.linearSplit_ = function(nodes) { - var n = this.pickLinear_(nodes); - while (nodes.length > 0) { - this.pickNext_(nodes, n[0], n[1]); - } - return n; -}; - - -/** - * Non-recursive function that deletes a specific region. - * - * @param {ol.Extent} extent Extent. - * @param {Object=} opt_obj Object. - * @return {Array} Result. - * @this {ol.structs.RTree} - */ -ol.structs.RTree.prototype.remove = function(extent, opt_obj) { - arguments[0] = /** @type {ol.structs.RTreeNode} */ ({extent: extent}); - switch (arguments.length) { - case 1: - arguments[1] = false; // opt_obj == false for conditionals - case 2: - arguments[2] = this.rootTree_; // Add root node to end of argument list - default: - arguments.length = 3; - } - if (arguments[1] === false) { // Do area-wide † - var numberDeleted = 0; - var result = []; - do { - numberDeleted = result.length; - result = result.concat(this.removeSubtree_.apply(this, arguments)); - } while (numberDeleted != result.length); - return result; - } else { // Delete a specific item - return this.removeSubtree_.apply(this, arguments); - } -}; - - /** * Non-recursive search function *