diff --git a/examples/bing-maps.html b/examples/bing-maps.html
index c038972c4c..a410469301 100644
--- a/examples/bing-maps.html
+++ b/examples/bing-maps.html
@@ -30,6 +30,8 @@
+
+
diff --git a/examples/bing-maps.js b/examples/bing-maps.js
index 68a48d9bb5..bef2c7a04c 100644
--- a/examples/bing-maps.js
+++ b/examples/bing-maps.js
@@ -2,13 +2,19 @@ goog.require('ol.Map');
goog.require('ol.RendererHints');
goog.require('ol.View2D');
goog.require('ol.layer.Tile');
-goog.require('ol.proj');
goog.require('ol.source.BingMaps');
-var styles = ['Road', 'Aerial', 'AerialWithLabels'];
+var styles = [
+ 'Road',
+ 'Aerial',
+ 'AerialWithLabels',
+ 'collinsBart',
+ 'ordnanceSurvey'
+];
var layers = [];
-for (var i = 0; i < styles.length; ++i) {
+var i, ii;
+for (i = 0, ii = styles.length; i < ii; ++i) {
layers.push(new ol.layer.Tile({
visible: false,
preload: Infinity,
@@ -23,14 +29,15 @@ var map = new ol.Map({
renderers: ol.RendererHints.createFromQueryData(),
target: 'map',
view: new ol.View2D({
- center: ol.proj.transform([-123.1, 49.25], 'EPSG:4326', 'EPSG:3857'),
- zoom: 8
+ center: [-6655.5402445057125, 6709968.258934638],
+ zoom: 13
})
});
$('#layer-select').change(function() {
var style = $(this).find(':selected').val();
- for (var i = 0; i < layers.length; ++i) {
+ var i, ii;
+ for (i = 0, ii = layers.length; i < ii; ++i) {
layers[i].setVisible(styles[i] == style);
}
});
diff --git a/src/ol/structs/rbush.js b/src/ol/structs/rbush.js
index 7e8ff0ff50..096c4e92e5 100644
--- a/src/ol/structs/rbush.js
+++ b/src/ol/structs/rbush.js
@@ -620,8 +620,9 @@ ol.structs.RBush.prototype.remove_ = function(extent, value) {
var path = [node];
/** @type {Array.} */
var indexes = [0];
- var child, children, i, ii;
+ var childrenDone, child, children, i, ii;
while (path.length > 0) {
+ childrenDone = false;
goog.asserts.assert(node.height > 0);
if (node.height == 1) {
children = node.children;
@@ -633,8 +634,7 @@ ol.structs.RBush.prototype.remove_ = function(extent, value) {
return;
}
}
- node = path.pop();
- index = indexes.pop();
+ childrenDone = true;
} else if (index < node.children.length) {
child = node.children[index];
if (ol.extent.containsExtent(child.extent, extent)) {
@@ -646,8 +646,16 @@ ol.structs.RBush.prototype.remove_ = function(extent, value) {
++index;
}
} else {
- node = path.pop();
- index = indexes.pop();
+ childrenDone = true;
+ }
+ if (childrenDone) {
+ var lastPathIndex = path.length - 1;
+ node = path[lastPathIndex];
+ index = ++indexes[lastPathIndex];
+ if (index > node.children.length) {
+ path.pop();
+ indexes.pop();
+ }
}
}
};
diff --git a/test/spec/ol/structs/rbush.test.js b/test/spec/ol/structs/rbush.test.js
index 250aa374b5..044811e6eb 100644
--- a/test/spec/ol/structs/rbush.test.js
+++ b/test/spec/ol/structs/rbush.test.js
@@ -32,13 +32,18 @@ describe('ol.structs.RBush', function() {
var objs;
beforeEach(function() {
- objs = [{}, {}, {}, {}, {}, {}];
+ objs = [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}];
rBush.insert([0, 0, 1, 1], objs[0]);
rBush.insert([1, 1, 4, 4], objs[1]);
rBush.insert([2, 2, 3, 3], objs[2]);
rBush.insert([-5, -5, -4, -4], objs[3]);
rBush.insert([-4, -4, -1, -1], objs[4]);
rBush.insert([-3, -3, -2, -2], objs[5]);
+ rBush.insert([-3, -3, -2, -2], objs[6]);
+ rBush.insert([-3, -3, -2, -2], objs[7]);
+ rBush.insert([-3, -3, -2, -2], objs[8]);
+ rBush.insert([-3, -3, -2, -2], objs[9]);
+ rBush.insert([-3, -3, -2, -2], objs[10]);
});
describe('#getAllInExtent', function() {
@@ -294,6 +299,20 @@ describe('ol.structs.RBush', function() {
});
+ describe('#remove', function() {
+
+ it('can remove all 2000 objects', function() {
+ var objs = rBush.getAll();
+ var i, value;
+ for (i = objs.length - 1; i >= 0; --i) {
+ value = objs[i];
+ rBush.remove(value);
+ }
+ expect(rBush.isEmpty()).to.be(true);
+ });
+
+ });
+
});
});