Use ol.structs.RBush in ol.source.Vector
This commit is contained in:
@@ -14,7 +14,7 @@ goog.require('ol.FeatureEventType');
|
|||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.source.Source');
|
goog.require('ol.source.Source');
|
||||||
goog.require('ol.structs.RTree');
|
goog.require('ol.structs.RBush');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -251,10 +251,10 @@ ol.source.Vector.prototype.handleFeatureChange_ = function(evt) {
|
|||||||
extents.push(evt.oldExtent);
|
extents.push(evt.oldExtent);
|
||||||
}
|
}
|
||||||
var geometry = feature.getGeometry();
|
var geometry = feature.getGeometry();
|
||||||
|
var extent = geometry.getBounds();
|
||||||
if (!goog.isNull(geometry)) {
|
if (!goog.isNull(geometry)) {
|
||||||
this.featureCache_.remove(feature, evt.oldExtent);
|
this.featureCache_.updateExtent(feature, extent);
|
||||||
this.featureCache_.add(feature);
|
extents.push(extent);
|
||||||
extents.push(geometry.getBounds());
|
|
||||||
}
|
}
|
||||||
this.dispatchEvent(new ol.source.VectorEvent(ol.source.VectorEventType.CHANGE,
|
this.dispatchEvent(new ol.source.VectorEvent(ol.source.VectorEventType.CHANGE,
|
||||||
[feature], extents));
|
[feature], extents));
|
||||||
@@ -353,10 +353,10 @@ ol.source.FeatureCache = function() {
|
|||||||
this.idLookup_;
|
this.idLookup_;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {ol.structs.RTree}
|
* @type {ol.structs.RBush}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.rTree_;
|
this.rBush_;
|
||||||
|
|
||||||
this.clear();
|
this.clear();
|
||||||
|
|
||||||
@@ -368,7 +368,7 @@ ol.source.FeatureCache = function() {
|
|||||||
*/
|
*/
|
||||||
ol.source.FeatureCache.prototype.clear = function() {
|
ol.source.FeatureCache.prototype.clear = function() {
|
||||||
this.idLookup_ = {};
|
this.idLookup_ = {};
|
||||||
this.rTree_ = new ol.structs.RTree();
|
this.rBush_ = new ol.structs.RBush();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -384,7 +384,7 @@ ol.source.FeatureCache.prototype.add = function(feature) {
|
|||||||
|
|
||||||
// index by bounding box
|
// index by bounding box
|
||||||
if (!goog.isNull(geometry)) {
|
if (!goog.isNull(geometry)) {
|
||||||
this.rTree_.insert(geometry.getBounds(), feature);
|
this.rBush_.insert(geometry.getBounds(), feature);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -409,7 +409,7 @@ ol.source.FeatureCache.prototype.getFeaturesObject = function() {
|
|||||||
*/
|
*/
|
||||||
ol.source.FeatureCache.prototype.forEach =
|
ol.source.FeatureCache.prototype.forEach =
|
||||||
function(extent, callback, opt_thisArg) {
|
function(extent, callback, opt_thisArg) {
|
||||||
this.rTree_.forEach(
|
this.rBush_.forEachInExtent(
|
||||||
extent, /** @type {function(Object)} */ (callback), opt_thisArg);
|
extent, /** @type {function(Object)} */ (callback), opt_thisArg);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -417,17 +417,24 @@ ol.source.FeatureCache.prototype.forEach =
|
|||||||
/**
|
/**
|
||||||
* Remove a feature from the cache.
|
* Remove a feature from the cache.
|
||||||
* @param {ol.Feature} feature Feature.
|
* @param {ol.Feature} feature Feature.
|
||||||
* @param {ol.Extent=} opt_extent Optional extent (used when the current feature
|
|
||||||
* extent is different than the one in the index).
|
|
||||||
*/
|
*/
|
||||||
ol.source.FeatureCache.prototype.remove = function(feature, opt_extent) {
|
ol.source.FeatureCache.prototype.remove = function(feature) {
|
||||||
var id = goog.getUid(feature).toString(),
|
var id = goog.getUid(feature).toString(),
|
||||||
geometry = feature.getGeometry();
|
geometry = feature.getGeometry();
|
||||||
|
|
||||||
delete this.idLookup_[id];
|
delete this.idLookup_[id];
|
||||||
// index by bounding box
|
// index by bounding box
|
||||||
if (!goog.isNull(geometry)) {
|
if (!goog.isNull(geometry)) {
|
||||||
var extent = goog.isDef(opt_extent) ? opt_extent : geometry.getBounds();
|
this.rBush_.remove(feature);
|
||||||
this.rTree_.remove(extent, feature);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates a feature's extent in the spatial index.
|
||||||
|
* @param {ol.Feature} feature Feature.
|
||||||
|
* @param {ol.Extent} extent Extent.
|
||||||
|
*/
|
||||||
|
ol.source.FeatureCache.prototype.updateExtent = function(feature, extent) {
|
||||||
|
this.rBush_.update(extent, feature);
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user