Extend goog.events.Event for custom vector layer events
Vector events include features and extents. In the case of feature change events, the extents array will include old and new extents for features with modified geometries.w
This commit is contained in:
+47
-38
@@ -1,8 +1,9 @@
|
|||||||
goog.provide('ol.layer.Vector');
|
goog.provide('ol.layer.Vector');
|
||||||
goog.provide('ol.layer.VectorLayerEventType');
|
goog.provide('ol.layer.VectorEventType');
|
||||||
|
|
||||||
goog.require('goog.array');
|
goog.require('goog.array');
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
|
goog.require('goog.events.Event');
|
||||||
goog.require('goog.object');
|
goog.require('goog.object');
|
||||||
goog.require('ol.Feature');
|
goog.require('ol.Feature');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
@@ -127,25 +128,6 @@ ol.layer.FeatureCache.prototype.remove = function(feature) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @enum {string}
|
|
||||||
*/
|
|
||||||
ol.layer.VectorLayerEventType = {
|
|
||||||
ADD: 'add',
|
|
||||||
CHANGE: 'featurechange',
|
|
||||||
REMOVE: 'remove',
|
|
||||||
INTENTCHANGE: 'intentchange'
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @typedef {{extent: (ol.Extent|undefined),
|
|
||||||
* features: (Array.<ol.Feature>|undefined),
|
|
||||||
* type: ol.layer.VectorLayerEventType}}
|
|
||||||
*/
|
|
||||||
ol.layer.VectorLayerEventObject;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
@@ -200,11 +182,8 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
|
|||||||
ol.extent.extend(extent, geometry.getBounds());
|
ol.extent.extend(extent, geometry.getBounds());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
|
this.dispatchEvent(new ol.layer.VectorEvent(ol.layer.VectorEventType.ADD,
|
||||||
extent: extent,
|
features, [extent]));
|
||||||
features: features,
|
|
||||||
type: ol.layer.VectorLayerEventType.ADD
|
|
||||||
}));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -213,9 +192,8 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
|
|||||||
*/
|
*/
|
||||||
ol.layer.Vector.prototype.clear = function() {
|
ol.layer.Vector.prototype.clear = function() {
|
||||||
this.featureCache_.clear();
|
this.featureCache_.clear();
|
||||||
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
|
this.dispatchEvent(
|
||||||
type: ol.layer.VectorLayerEventType.CHANGE
|
new ol.layer.VectorEvent(ol.layer.VectorEventType.CHANGE, [], []));
|
||||||
}));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -409,11 +387,8 @@ ol.layer.Vector.prototype.removeFeatures = function(features) {
|
|||||||
ol.extent.extend(extent, geometry.getBounds());
|
ol.extent.extend(extent, geometry.getBounds());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
|
this.dispatchEvent(new ol.layer.VectorEvent(ol.layer.VectorEventType.REMOVE,
|
||||||
extent: extent,
|
features, [extent]));
|
||||||
features: features,
|
|
||||||
type: ol.layer.VectorLayerEventType.REMOVE
|
|
||||||
}));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -437,11 +412,8 @@ ol.layer.Vector.prototype.setRenderIntent =
|
|||||||
ol.extent.extend(extent, geometry.getBounds());
|
ol.extent.extend(extent, geometry.getBounds());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({
|
this.dispatchEvent(new ol.layer.VectorEvent(
|
||||||
extent: extent,
|
ol.layer.VectorEventType.INTENTCHANGE, features, [extent]));
|
||||||
features: features,
|
|
||||||
type: ol.layer.VectorLayerEventType.INTENTCHANGE
|
|
||||||
}));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -462,3 +434,40 @@ ol.layer.Vector.uidTransformFeatureInfo = function(features) {
|
|||||||
function(feature) { return goog.getUid(feature); });
|
function(feature) { return goog.getUid(feature); });
|
||||||
return uids.join(', ');
|
return uids.join(', ');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @extends {goog.events.Event}
|
||||||
|
* @param {string} type Event type.
|
||||||
|
* @param {Array.<ol.Feature>} features Features associated with the event.
|
||||||
|
* @param {Array.<ol.Extent>} extents Any extents associated with the event.
|
||||||
|
*/
|
||||||
|
ol.layer.VectorEvent = function(type, features, extents) {
|
||||||
|
|
||||||
|
goog.base(this, type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array.<ol.Feature>}
|
||||||
|
*/
|
||||||
|
this.features = features;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array.<ol.Extent>}
|
||||||
|
*/
|
||||||
|
this.extents = extents;
|
||||||
|
|
||||||
|
};
|
||||||
|
goog.inherits(ol.layer.VectorEvent, goog.events.Event);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
|
ol.layer.VectorEventType = {
|
||||||
|
ADD: 'featureadd',
|
||||||
|
CHANGE: 'featurechange',
|
||||||
|
REMOVE: 'featureremove',
|
||||||
|
INTENTCHANGE: 'intentchange'
|
||||||
|
};
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ goog.require('ol.ViewHint');
|
|||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.geom.GeometryType');
|
goog.require('ol.geom.GeometryType');
|
||||||
goog.require('ol.layer.Vector');
|
goog.require('ol.layer.Vector');
|
||||||
goog.require('ol.layer.VectorLayerEventType');
|
goog.require('ol.layer.VectorEventType');
|
||||||
goog.require('ol.layer.VectorLayerRenderIntent');
|
goog.require('ol.layer.VectorLayerRenderIntent');
|
||||||
goog.require('ol.renderer.canvas.Layer');
|
goog.require('ol.renderer.canvas.Layer');
|
||||||
goog.require('ol.renderer.canvas.Vector');
|
goog.require('ol.renderer.canvas.Vector');
|
||||||
@@ -88,10 +88,10 @@ ol.renderer.canvas.VectorLayer = function(mapRenderer, layer) {
|
|||||||
this.tileCache_ = new ol.TileCache(
|
this.tileCache_ = new ol.TileCache(
|
||||||
ol.renderer.canvas.VectorLayer.TILECACHE_SIZE);
|
ol.renderer.canvas.VectorLayer.TILECACHE_SIZE);
|
||||||
goog.events.listen(layer, [
|
goog.events.listen(layer, [
|
||||||
ol.layer.VectorLayerEventType.ADD,
|
ol.layer.VectorEventType.ADD,
|
||||||
ol.layer.VectorLayerEventType.CHANGE,
|
ol.layer.VectorEventType.CHANGE,
|
||||||
ol.layer.VectorLayerEventType.REMOVE,
|
ol.layer.VectorEventType.REMOVE,
|
||||||
ol.layer.VectorLayerEventType.INTENTCHANGE
|
ol.layer.VectorEventType.INTENTCHANGE
|
||||||
],
|
],
|
||||||
this.handleLayerChange_, false, this);
|
this.handleLayerChange_, false, this);
|
||||||
|
|
||||||
@@ -163,14 +163,18 @@ goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer);
|
|||||||
/**
|
/**
|
||||||
* Get rid cached tiles. If the optional extent is provided, only tiles that
|
* Get rid cached tiles. If the optional extent is provided, only tiles that
|
||||||
* intersect that extent will be removed.
|
* intersect that extent will be removed.
|
||||||
* @param {ol.Extent=} opt_extent extent Expire tiles within this extent only.
|
* @param {Array.<ol.Extent>} extents extent Expire tiles within the provided
|
||||||
|
* extents. If the array is empty, all tiles will be expired.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.VectorLayer.prototype.expireTiles_ = function(opt_extent) {
|
ol.renderer.canvas.VectorLayer.prototype.expireTiles_ = function(extents) {
|
||||||
var tileCache = this.tileCache_;
|
var tileCache = this.tileCache_;
|
||||||
if (goog.isDef(opt_extent)) {
|
var length = extents.length;
|
||||||
var tileRange = this.tileGrid_.getTileRangeForExtentAndZ(opt_extent, 0);
|
if (length > 0) {
|
||||||
tileCache.pruneTileRange(tileRange);
|
for (var i = 0; i < length; ++i) {
|
||||||
|
tileCache.pruneTileRange(
|
||||||
|
this.tileGrid_.getTileRangeForExtentAndZ(extents[i], 0));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
tileCache.clear();
|
tileCache.clear();
|
||||||
}
|
}
|
||||||
@@ -307,11 +311,11 @@ ol.renderer.canvas.VectorLayer.prototype.getFeaturesForPixel =
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.layer.VectorLayerEventObject} event Layer change event.
|
* @param {ol.layer.VectorEvent} event Vector layer event.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.VectorLayer.prototype.handleLayerChange_ = function(event) {
|
ol.renderer.canvas.VectorLayer.prototype.handleLayerChange_ = function(event) {
|
||||||
this.expireTiles_(event.extent);
|
this.expireTiles_(event.extents);
|
||||||
this.requestMapRenderFrame_();
|
this.requestMapRenderFrame_();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user