Use empty extents and refactor for clarity
This commit is contained in:
+20
-20
@@ -68,31 +68,31 @@ ol.structs.RTree = function(opt_maxWidth) {
|
|||||||
* @type {ol.structs.RTreeNode}
|
* @type {ol.structs.RTreeNode}
|
||||||
*/
|
*/
|
||||||
this.rootTree_ = /** @type {ol.structs.RTreeNode} */
|
this.rootTree_ = /** @type {ol.structs.RTreeNode} */
|
||||||
({extent: [0, 0, 0, 0], nodes: []});
|
({extent: ol.extent.createEmpty(), nodes: []});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a minimally bounding rectangle for all rectangles in
|
* @param {ol.structs.RTreeNode} node Node.
|
||||||
* array "nodes". `rect` is modified into the MBR.
|
|
||||||
*
|
|
||||||
* @param {Array} nodes Nodes.
|
|
||||||
* @param {ol.structs.RTreeNode} rect Rectangle.
|
|
||||||
* @private
|
* @private
|
||||||
* @return {ol.structs.RTreeNode} Rectangle.
|
|
||||||
*/
|
*/
|
||||||
ol.structs.RTree.makeMBR_ = function(nodes, rect) {
|
ol.structs.RTree.recalculateExtent_ = function(node) {
|
||||||
if (nodes.length < 1) {
|
var n = node.nodes.length;
|
||||||
return {extent: [0, 0, 0, 0]};
|
var extent = node.extent;
|
||||||
|
if (n === 0) {
|
||||||
|
ol.extent.empty(extent);
|
||||||
|
} else {
|
||||||
|
var firstNodeExtent = node.nodes[0].extent;
|
||||||
|
extent[0] = firstNodeExtent[0];
|
||||||
|
extent[1] = firstNodeExtent[1];
|
||||||
|
extent[2] = firstNodeExtent[2];
|
||||||
|
extent[3] = firstNodeExtent[3];
|
||||||
|
var i;
|
||||||
|
for (i = 1; i < n; ++i) {
|
||||||
|
ol.extent.extend(extent, node.nodes[i].extent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rect.extent = nodes[0].extent.concat();
|
|
||||||
|
|
||||||
for (var i = nodes.length - 1; i > 0; --i) {
|
|
||||||
ol.extent.extend(rect.extent, nodes[i].extent);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rect;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -497,7 +497,7 @@ ol.structs.RTree.prototype.removeSubtree_ = function(rect, obj, root) {
|
|||||||
returnArray = tree.nodes.splice(i, 1);
|
returnArray = tree.nodes.splice(i, 1);
|
||||||
}
|
}
|
||||||
// Resize MBR down...
|
// Resize MBR down...
|
||||||
ol.structs.RTree.makeMBR_(tree.nodes, tree);
|
ol.structs.RTree.recalculateExtent_(tree);
|
||||||
workingObject.target = undefined;
|
workingObject.target = undefined;
|
||||||
if (tree.nodes.length < this.minWidth_) { // Underflow
|
if (tree.nodes.length < this.minWidth_) { // Underflow
|
||||||
workingObject.nodes = /** @type {Array} */
|
workingObject.nodes = /** @type {Array} */
|
||||||
@@ -521,7 +521,7 @@ ol.structs.RTree.prototype.removeSubtree_ = function(rect, obj, root) {
|
|||||||
// workingObject.nodes contains a list of elements removed from the
|
// workingObject.nodes contains a list of elements removed from the
|
||||||
// tree so far
|
// tree so far
|
||||||
if (tree.nodes.length > 0) {
|
if (tree.nodes.length > 0) {
|
||||||
ol.structs.RTree.makeMBR_(tree.nodes, tree);
|
ol.structs.RTree.recalculateExtent_(tree);
|
||||||
}
|
}
|
||||||
for (var t = 0, tt = workingObject.nodes.length; t < tt; ++t) {
|
for (var t = 0, tt = workingObject.nodes.length; t < tt; ++t) {
|
||||||
this.insertSubtree_(workingObject.nodes[t], tree);
|
this.insertSubtree_(workingObject.nodes[t], tree);
|
||||||
@@ -543,7 +543,7 @@ ol.structs.RTree.prototype.removeSubtree_ = function(rect, obj, root) {
|
|||||||
workingObject.nodes = undefined; // Just start resizing
|
workingObject.nodes = undefined; // Just start resizing
|
||||||
}
|
}
|
||||||
} else { // we are just resizing
|
} else { // we are just resizing
|
||||||
ol.structs.RTree.makeMBR_(tree.nodes, tree);
|
ol.structs.RTree.recalculateExtent_(tree);
|
||||||
}
|
}
|
||||||
currentDepth -= 1;
|
currentDepth -= 1;
|
||||||
} while (hitStack.length > 0);
|
} while (hitStack.length > 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user