Make unmanaged vector layers behave more like ol.FeatureOverlay
* Skipped features need to be hit-detected on unmanaged layers. * updateWhileAnimating and updateWhileInteracting are recommended to achieve the same instant visual feedback that ol.FeatureOverlay had.
This commit is contained in:
@@ -20,11 +20,13 @@ you will have to change this to:
|
|||||||
var collection = new ol.Collection();
|
var collection = new ol.Collection();
|
||||||
var featureOverlay = new ol.layer.Vector({
|
var featureOverlay = new ol.layer.Vector({
|
||||||
map: map,
|
map: map,
|
||||||
style: overlayStyle,
|
|
||||||
source: new ol.source.Vector({
|
source: new ol.source.Vector({
|
||||||
features: collection,
|
features: collection,
|
||||||
useSpatialIndex: false // optional, might improve performance
|
useSpatialIndex: false // optional, might improve performance
|
||||||
});
|
}),
|
||||||
|
style: overlayStyle,
|
||||||
|
updateWhileAnimating: true, // optional, for instant visual feedback
|
||||||
|
updateWhileInteracting: true // optional, for instant visual feedback
|
||||||
});
|
});
|
||||||
featureOverlay.getSource().addFeature(feature);
|
featureOverlay.getSource().addFeature(feature);
|
||||||
featureOverlay.getSource().removeFeature(feature);
|
featureOverlay.getSource().removeFeature(feature);
|
||||||
|
|||||||
@@ -122,7 +122,9 @@ ol.interaction.Modify = function(options) {
|
|||||||
wrapX: goog.isDef(options.wrapX) ? options.wrapX : false
|
wrapX: goog.isDef(options.wrapX) ? options.wrapX : false
|
||||||
}),
|
}),
|
||||||
style: goog.isDef(options.style) ? options.style :
|
style: goog.isDef(options.style) ? options.style :
|
||||||
ol.interaction.Modify.getDefaultStyleFunction()
|
ol.interaction.Modify.getDefaultStyleFunction(),
|
||||||
|
updateWhileAnimating: true,
|
||||||
|
updateWhileInteracting: true
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -178,7 +178,9 @@ ol.interaction.Select = function(opt_options) {
|
|||||||
wrapX: options.wrapX
|
wrapX: options.wrapX
|
||||||
}),
|
}),
|
||||||
style: goog.isDef(options.style) ? options.style :
|
style: goog.isDef(options.style) ? options.style :
|
||||||
ol.interaction.Select.getDefaultStyleFunction()
|
ol.interaction.Select.getDefaultStyleFunction(),
|
||||||
|
updateWhileAnimating: true,
|
||||||
|
updateWhileInteracting: true
|
||||||
});
|
});
|
||||||
|
|
||||||
var features = this.featureOverlay_.getSource().getFeaturesCollection();
|
var features = this.featureOverlay_.getSource().getFeaturesCollection();
|
||||||
|
|||||||
@@ -160,10 +160,11 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtCoordinate =
|
|||||||
var resolution = frameState.viewState.resolution;
|
var resolution = frameState.viewState.resolution;
|
||||||
var rotation = frameState.viewState.rotation;
|
var rotation = frameState.viewState.rotation;
|
||||||
var layer = this.getLayer();
|
var layer = this.getLayer();
|
||||||
|
var layerState = frameState.layerStates[goog.getUid(layer)];
|
||||||
/** @type {Object.<string, boolean>} */
|
/** @type {Object.<string, boolean>} */
|
||||||
var features = {};
|
var features = {};
|
||||||
return this.replayGroup_.forEachFeatureAtCoordinate(coordinate,
|
return this.replayGroup_.forEachFeatureAtCoordinate(coordinate, resolution,
|
||||||
resolution, rotation, frameState.skippedFeatureUids,
|
rotation, layerState.managed ? frameState.skippedFeatureUids : {},
|
||||||
/**
|
/**
|
||||||
* @param {ol.Feature} feature Feature.
|
* @param {ol.Feature} feature Feature.
|
||||||
* @return {?} Callback result.
|
* @return {?} Callback result.
|
||||||
|
|||||||
@@ -184,10 +184,11 @@ ol.renderer.dom.VectorLayer.prototype.forEachFeatureAtCoordinate =
|
|||||||
var resolution = frameState.viewState.resolution;
|
var resolution = frameState.viewState.resolution;
|
||||||
var rotation = frameState.viewState.rotation;
|
var rotation = frameState.viewState.rotation;
|
||||||
var layer = this.getLayer();
|
var layer = this.getLayer();
|
||||||
|
var layerState = frameState.layerStates[goog.getUid(layer)];
|
||||||
/** @type {Object.<string, boolean>} */
|
/** @type {Object.<string, boolean>} */
|
||||||
var features = {};
|
var features = {};
|
||||||
return this.replayGroup_.forEachFeatureAtCoordinate(coordinate,
|
return this.replayGroup_.forEachFeatureAtCoordinate(coordinate, resolution,
|
||||||
resolution, rotation, frameState.skippedFeatureUids,
|
rotation, layerState.managed ? frameState.skippedFeatureUids : {},
|
||||||
/**
|
/**
|
||||||
* @param {ol.Feature} feature Feature.
|
* @param {ol.Feature} feature Feature.
|
||||||
* @return {?} Callback result.
|
* @return {?} Callback result.
|
||||||
|
|||||||
@@ -122,7 +122,8 @@ ol.renderer.webgl.VectorLayer.prototype.forEachFeatureAtCoordinate =
|
|||||||
context, viewState.center, viewState.resolution, viewState.rotation,
|
context, viewState.center, viewState.resolution, viewState.rotation,
|
||||||
frameState.size, frameState.pixelRatio,
|
frameState.size, frameState.pixelRatio,
|
||||||
layerState.opacity, layerState.brightness, layerState.contrast,
|
layerState.opacity, layerState.brightness, layerState.contrast,
|
||||||
layerState.hue, layerState.saturation, frameState.skippedFeatureUids,
|
layerState.hue, layerState.saturation,
|
||||||
|
layerState.managed ? frameState.skippedFeatureUids : {},
|
||||||
/**
|
/**
|
||||||
* @param {ol.Feature} feature Feature.
|
* @param {ol.Feature} feature Feature.
|
||||||
* @return {?} Callback result.
|
* @return {?} Callback result.
|
||||||
|
|||||||
@@ -76,12 +76,14 @@ describe('ol.renderer.canvas.VectorLayer', function() {
|
|||||||
var spy = sinon.spy();
|
var spy = sinon.spy();
|
||||||
var coordinate = [0, 0];
|
var coordinate = [0, 0];
|
||||||
var frameState = {
|
var frameState = {
|
||||||
|
layerStates: {},
|
||||||
skippedFeatureUids: {},
|
skippedFeatureUids: {},
|
||||||
viewState: {
|
viewState: {
|
||||||
resolution: 1,
|
resolution: 1,
|
||||||
rotation: 0
|
rotation: 0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
frameState.layerStates[goog.getUid(layer)] = {};
|
||||||
renderer.forEachFeatureAtCoordinate(
|
renderer.forEachFeatureAtCoordinate(
|
||||||
coordinate, frameState, spy, undefined);
|
coordinate, frameState, spy, undefined);
|
||||||
expect(spy.callCount).to.be(1);
|
expect(spy.callCount).to.be(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user