Merge pull request #1877 from tonio/skip_features
Replace renderGeometryFunction by skippedFeatures
This commit is contained in:
+28
-13
@@ -9,6 +9,7 @@ goog.require('ol.source.MapQuest');
|
|||||||
goog.require('ol.style.Fill');
|
goog.require('ol.style.Fill');
|
||||||
goog.require('ol.style.Stroke');
|
goog.require('ol.style.Stroke');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
|
goog.require('ol.style.Text');
|
||||||
|
|
||||||
var raster = new ol.layer.Tile({
|
var raster = new ol.layer.Tile({
|
||||||
source: new ol.source.MapQuest({layer: 'sat'})
|
source: new ol.source.MapQuest({layer: 'sat'})
|
||||||
@@ -18,23 +19,37 @@ var vector = new ol.layer.Vector({
|
|||||||
source: new ol.source.GeoJSON({
|
source: new ol.source.GeoJSON({
|
||||||
projection: 'EPSG:3857',
|
projection: 'EPSG:3857',
|
||||||
url: 'data/geojson/countries.geojson'
|
url: 'data/geojson/countries.geojson'
|
||||||
}),
|
|
||||||
style: new ol.style.Style({
|
|
||||||
fill: new ol.style.Fill({
|
|
||||||
color: 'rgba(255,255,255,0.25)'
|
|
||||||
}),
|
|
||||||
stroke: new ol.style.Stroke({
|
|
||||||
color: '#6666ff'
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var styleCache = {};
|
||||||
var select = new ol.interaction.Select({
|
var select = new ol.interaction.Select({
|
||||||
style: new ol.style.Style({
|
style: function(feature, resolution) {
|
||||||
fill: new ol.style.Fill({
|
var text = feature.get('name');
|
||||||
color: 'rgba(255,255,255,0.5)'
|
if (!styleCache[text]) {
|
||||||
})
|
styleCache[text] = [new ol.style.Style({
|
||||||
})
|
fill: new ol.style.Fill({
|
||||||
|
color: 'rgba(255,0,0,0.3)'
|
||||||
|
}),
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: 'rgba(255,0,0,1)',
|
||||||
|
size: 2
|
||||||
|
}),
|
||||||
|
text: new ol.style.Text({
|
||||||
|
font: '12px Calibri,sans-serif',
|
||||||
|
text: text,
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: '#000'
|
||||||
|
}),
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
color: '#fff',
|
||||||
|
width: 3
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})];
|
||||||
|
}
|
||||||
|
return styleCache[text];
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var map = new ol.Map({
|
var map = new ol.Map({
|
||||||
|
|||||||
@@ -92,6 +92,10 @@ oli.FrameState.prototype.postRenderFunctions;
|
|||||||
oli.FrameState.prototype.size;
|
oli.FrameState.prototype.size;
|
||||||
|
|
||||||
|
|
||||||
|
/** @type {Object.<string, boolean>} */
|
||||||
|
oli.FrameState.prototype.skippedFeatureUids_;
|
||||||
|
|
||||||
|
|
||||||
/** @type {ol.TileQueue} */
|
/** @type {ol.TileQueue} */
|
||||||
oli.FrameState.prototype.tileQueue;
|
oli.FrameState.prototype.tileQueue;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
goog.provide('ol.interaction.Select');
|
goog.provide('ol.interaction.Select');
|
||||||
|
|
||||||
goog.require('goog.array');
|
goog.require('goog.array');
|
||||||
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.functions');
|
goog.require('goog.functions');
|
||||||
|
goog.require('ol.Feature');
|
||||||
goog.require('ol.FeatureOverlay');
|
goog.require('ol.FeatureOverlay');
|
||||||
goog.require('ol.events.condition');
|
goog.require('ol.events.condition');
|
||||||
goog.require('ol.interaction.Interaction');
|
goog.require('ol.interaction.Interaction');
|
||||||
@@ -111,58 +113,87 @@ ol.interaction.Select.prototype.handleMapBrowserEvent =
|
|||||||
var add = this.addCondition_(mapBrowserEvent);
|
var add = this.addCondition_(mapBrowserEvent);
|
||||||
var remove = this.removeCondition_(mapBrowserEvent);
|
var remove = this.removeCondition_(mapBrowserEvent);
|
||||||
var toggle = this.toggleCondition_(mapBrowserEvent);
|
var toggle = this.toggleCondition_(mapBrowserEvent);
|
||||||
var set = !add && !remove && !toggle;
|
|
||||||
var map = mapBrowserEvent.map;
|
var map = mapBrowserEvent.map;
|
||||||
|
var feature = map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
|
||||||
|
/**
|
||||||
|
* @param {ol.Feature} feature Feature.
|
||||||
|
* @param {ol.layer.Layer} layer Layer.
|
||||||
|
*/
|
||||||
|
function(feature, layer) {
|
||||||
|
this.addFeature_(feature, add, remove, toggle);
|
||||||
|
return feature;
|
||||||
|
}, this, this.layerFilter_);
|
||||||
|
if (!goog.isDef(feature) && !add && !remove) {
|
||||||
|
this.removeAllFeatures_();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {?ol.Feature|undefined} feature Feature.
|
||||||
|
* @param {Boolean} add Add
|
||||||
|
* @param {Boolean} remove Remove
|
||||||
|
* @param {Boolean} toggle Toggle
|
||||||
|
* @private
|
||||||
|
* @todo stability experimental
|
||||||
|
*/
|
||||||
|
ol.interaction.Select.prototype.addFeature_ = function(feature, add,
|
||||||
|
remove, toggle) {
|
||||||
var features = this.featureOverlay_.getFeatures();
|
var features = this.featureOverlay_.getFeatures();
|
||||||
if (set) {
|
var index = -1;
|
||||||
// Replace the currently selected feature(s) with the feature at the pixel,
|
var i, ii;
|
||||||
// or clear the selected feature(s) if there is no feature at the pixel.
|
if ((!goog.isDef(feature) || goog.isNull(feature)) && !add) {
|
||||||
/** @type {ol.Feature|undefined} */
|
this.removeAllFeatures_();
|
||||||
var feature = map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
|
return;
|
||||||
/**
|
}
|
||||||
* @param {ol.Feature} feature Feature.
|
goog.asserts.assertInstanceof(feature, ol.Feature);
|
||||||
* @param {ol.layer.Layer} layer Layer.
|
index = features.getArray().indexOf(feature);
|
||||||
*/
|
if (index == -1) {
|
||||||
function(feature, layer) {
|
if (!add && !remove && (features.getLength() > 0)) {
|
||||||
return feature;
|
for (ii = features.getLength() - 1, i = ii; i >= 0; i--) {
|
||||||
}, undefined, this.layerFilter_);
|
if (features.getAt(i) != feature) {
|
||||||
if (goog.isDef(feature)) {
|
this.removeFeature_(/** @type {ol.Feature} */ (features.getAt(i)));
|
||||||
if (features.getLength() == 1) {
|
|
||||||
if (features.getAt(0) !== feature) {
|
|
||||||
features.setAt(0, feature);
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (features.getLength() != 1) {
|
|
||||||
features.clear();
|
|
||||||
}
|
|
||||||
features.push(feature);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (features.getLength() !== 0) {
|
|
||||||
features.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Modify the currently selected feature(s).
|
if (toggle || remove) {
|
||||||
map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
|
this.removeFeature_(/** @type {ol.Feature} */ (features.getAt(index)));
|
||||||
/**
|
return;
|
||||||
* @param {ol.Feature} feature Feature.
|
}
|
||||||
* @param {ol.layer.Layer} layer Layer.
|
}
|
||||||
*/
|
if (remove) {
|
||||||
function(feature, layer) {
|
return;
|
||||||
var index = goog.array.indexOf(features.getArray(), feature);
|
}
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
if (add || toggle) {
|
features.push(feature);
|
||||||
features.push(feature);
|
this.getMap().getSkippedFeatures().push(feature);
|
||||||
}
|
}
|
||||||
} else {
|
};
|
||||||
if (remove || toggle) {
|
|
||||||
features.removeAt(index);
|
|
||||||
}
|
/**
|
||||||
}
|
* @param {ol.Feature} feature Feature.
|
||||||
}, undefined, this.layerFilter_);
|
* @private
|
||||||
|
* @todo stability experimental
|
||||||
|
*/
|
||||||
|
ol.interaction.Select.prototype.removeFeature_ = function(feature) {
|
||||||
|
this.featureOverlay_.getFeatures().remove(feature);
|
||||||
|
this.getMap().getSkippedFeatures().remove(feature);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @todo stability experimental
|
||||||
|
*/
|
||||||
|
ol.interaction.Select.prototype.removeAllFeatures_ = function() {
|
||||||
|
var i, ii,
|
||||||
|
features = this.featureOverlay_.getFeatures();
|
||||||
|
for (ii = features.getLength() - 1, i = ii; i >= 0; i--) {
|
||||||
|
this.removeFeature_(/** @type {ol.Feature} */ (features.getAt(i)));
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,11 @@
|
|||||||
goog.provide('ol.layer.Vector');
|
goog.provide('ol.layer.Vector');
|
||||||
|
|
||||||
|
goog.require('goog.array');
|
||||||
goog.require('goog.object');
|
goog.require('goog.object');
|
||||||
goog.require('ol.feature');
|
goog.require('ol.feature');
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @enum {string}
|
|
||||||
*/
|
|
||||||
ol.layer.VectorProperty = {
|
|
||||||
RENDER_GEOMETRY_FUNCTIONS: 'renderGeometryFunctions'
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
@@ -52,20 +45,6 @@ ol.layer.Vector = function(opt_options) {
|
|||||||
goog.inherits(ol.layer.Vector, ol.layer.Layer);
|
goog.inherits(ol.layer.Vector, ol.layer.Layer);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return {ol.Collection|undefined} Render geometry functions.
|
|
||||||
* @todo stability experimental
|
|
||||||
*/
|
|
||||||
ol.layer.Vector.prototype.getRenderGeometryFunctions = function() {
|
|
||||||
return /** @type {ol.Collection|undefined} */ (
|
|
||||||
this.get(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS));
|
|
||||||
};
|
|
||||||
goog.exportProperty(
|
|
||||||
ol.layer.Vector.prototype,
|
|
||||||
'getRenderGeometryFunctions',
|
|
||||||
ol.layer.Vector.prototype.getRenderGeometryFunctions);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the style for features. This returns whatever was passed to the `style`
|
* Get the style for features. This returns whatever was passed to the `style`
|
||||||
* option at construction or to the `setStyle` method.
|
* option at construction or to the `setStyle` method.
|
||||||
@@ -87,22 +66,6 @@ ol.layer.Vector.prototype.getStyleFunction = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {ol.Collection|undefined} renderGeometryFunctions Render geometry
|
|
||||||
* functions.
|
|
||||||
* @todo stability experimental
|
|
||||||
*/
|
|
||||||
ol.layer.Vector.prototype.setRenderGeometryFunctions =
|
|
||||||
function(renderGeometryFunctions) {
|
|
||||||
this.set(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS,
|
|
||||||
renderGeometryFunctions);
|
|
||||||
};
|
|
||||||
goog.exportProperty(
|
|
||||||
ol.layer.Vector.prototype,
|
|
||||||
'setRenderGeometryFunctions',
|
|
||||||
ol.layer.Vector.prototype.setRenderGeometryFunctions);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the style for features. This can be a single style object, an array
|
* Set the style for features. This can be a single style object, an array
|
||||||
* of styles, or a function that takes a feature and resolution and returns
|
* of styles, or a function that takes a feature and resolution and returns
|
||||||
|
|||||||
@@ -359,6 +359,24 @@ ol.Map = function(options) {
|
|||||||
goog.bind(this.getTilePriority, this),
|
goog.bind(this.getTilePriority, this),
|
||||||
goog.bind(this.handleTileChange_, this));
|
goog.bind(this.handleTileChange_, this));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Features to skip at rendering time.
|
||||||
|
* @type {ol.Collection}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
this.skippedFeatures_ = new ol.Collection();
|
||||||
|
goog.events.listen(this.skippedFeatures_,
|
||||||
|
[ol.CollectionEventType.ADD, ol.CollectionEventType.REMOVE],
|
||||||
|
this.handleSkippedFeaturesChange_, false, this);
|
||||||
|
this.registerDisposable(this.skippedFeatures_);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uids of features to skip at rendering time.
|
||||||
|
* @type {Object.<string, boolean>}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
this.skippedFeatureUids_ = {};
|
||||||
|
|
||||||
goog.events.listen(
|
goog.events.listen(
|
||||||
this, ol.Object.getChangeEventType(ol.MapProperty.LAYERGROUP),
|
this, ol.Object.getChangeEventType(ol.MapProperty.LAYERGROUP),
|
||||||
this.handleLayerGroupChanged_, false, this);
|
this.handleLayerGroupChanged_, false, this);
|
||||||
@@ -797,6 +815,16 @@ ol.Map.prototype.getTilePriority =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the collection of features to skip.
|
||||||
|
* @return {ol.Collection} Features collection.
|
||||||
|
* @todo stability experimental
|
||||||
|
*/
|
||||||
|
ol.Map.prototype.getSkippedFeatures = function() {
|
||||||
|
return this.skippedFeatures_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {goog.events.BrowserEvent} browserEvent Browser event.
|
* @param {goog.events.BrowserEvent} browserEvent Browser event.
|
||||||
* @param {string=} opt_type Type.
|
* @param {string=} opt_type Type.
|
||||||
@@ -896,6 +924,23 @@ ol.Map.prototype.handleSizeChanged_ = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.Map.prototype.handleSkippedFeaturesChange_ = function() {
|
||||||
|
this.skippedFeatureUids_ = {};
|
||||||
|
this.skippedFeatures_.forEach(
|
||||||
|
/**
|
||||||
|
* @param {ol.Feature} feature Feature.
|
||||||
|
* @this {ol.Map}
|
||||||
|
*/
|
||||||
|
function(feature) {
|
||||||
|
this.skippedFeatureUids_[goog.getUid(feature).toString()] = true;
|
||||||
|
}, this);
|
||||||
|
this.render();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
@@ -1181,6 +1226,7 @@ ol.Map.prototype.renderFrame_ = function(time) {
|
|||||||
pixelToCoordinateMatrix: this.pixelToCoordinateMatrix_,
|
pixelToCoordinateMatrix: this.pixelToCoordinateMatrix_,
|
||||||
postRenderFunctions: [],
|
postRenderFunctions: [],
|
||||||
size: size,
|
size: size,
|
||||||
|
skippedFeatureUids_: this.skippedFeatureUids_,
|
||||||
tileQueue: this.tileQueue_,
|
tileQueue: this.tileQueue_,
|
||||||
time: time,
|
time: time,
|
||||||
usedTiles: {},
|
usedTiles: {},
|
||||||
|
|||||||
@@ -134,6 +134,12 @@ ol.render.canvas.Replay = function(tolerance, maxExtent, resolution) {
|
|||||||
*/
|
*/
|
||||||
this.tmpLocalTransform_ = goog.vec.Mat4.createNumber();
|
this.tmpLocalTransform_ = goog.vec.Mat4.createNumber();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
this.instructionIndices_ = {};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -197,11 +203,13 @@ ol.render.canvas.Replay.prototype.appendFlatCoordinates =
|
|||||||
/**
|
/**
|
||||||
* @protected
|
* @protected
|
||||||
* @param {ol.geom.Geometry} geometry Geometry.
|
* @param {ol.geom.Geometry} geometry Geometry.
|
||||||
|
* @param {number} uid Data uid
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.Replay.prototype.beginGeometry = function(geometry) {
|
ol.render.canvas.Replay.prototype.beginGeometry = function(geometry, uid) {
|
||||||
this.beginGeometryInstruction1_ =
|
this.beginGeometryInstruction1_ =
|
||||||
[ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, 0];
|
[ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, 0];
|
||||||
this.instructions.push(this.beginGeometryInstruction1_);
|
this.instructions.push(this.beginGeometryInstruction1_);
|
||||||
|
this.instructionIndices_[this.instructions.length - 1] = uid.toString();
|
||||||
this.beginGeometryInstruction2_ =
|
this.beginGeometryInstruction2_ =
|
||||||
[ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, 0];
|
[ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, 0];
|
||||||
this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);
|
this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);
|
||||||
@@ -214,8 +222,7 @@ ol.render.canvas.Replay.prototype.beginGeometry = function(geometry) {
|
|||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render
|
* @param {Object} skippedFeaturesHash Ids of features to skip.
|
||||||
* geometry function.
|
|
||||||
* @param {Array.<*>} instructions Instructions array.
|
* @param {Array.<*>} instructions Instructions array.
|
||||||
* @param {function(ol.geom.Geometry, Object): T|undefined} geometryCallback
|
* @param {function(ol.geom.Geometry, Object): T|undefined} geometryCallback
|
||||||
* Geometry callback.
|
* Geometry callback.
|
||||||
@@ -223,7 +230,7 @@ ol.render.canvas.Replay.prototype.beginGeometry = function(geometry) {
|
|||||||
* @template T
|
* @template T
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.Replay.prototype.replay_ = function(
|
ol.render.canvas.Replay.prototype.replay_ = function(
|
||||||
context, pixelRatio, transform, viewRotation, renderGeometryFunction,
|
context, pixelRatio, transform, viewRotation, skippedFeaturesHash,
|
||||||
instructions, geometryCallback) {
|
instructions, geometryCallback) {
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var pixelCoordinates;
|
var pixelCoordinates;
|
||||||
@@ -247,7 +254,8 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case ol.render.canvas.Instruction.BEGIN_GEOMETRY:
|
case ol.render.canvas.Instruction.BEGIN_GEOMETRY:
|
||||||
geometry = /** @type {ol.geom.Geometry} */ (instruction[1]);
|
geometry = /** @type {ol.geom.Geometry} */ (instruction[1]);
|
||||||
if (renderGeometryFunction(geometry)) {
|
if (!goog.isDef(goog.object.get(skippedFeaturesHash,
|
||||||
|
this.instructionIndices_[i]))) {
|
||||||
++i;
|
++i;
|
||||||
} else {
|
} else {
|
||||||
i = /** @type {number} */ (instruction[2]);
|
i = /** @type {number} */ (instruction[2]);
|
||||||
@@ -453,16 +461,15 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render
|
* @param {Object} skippedFeaturesHash Ids of features to skip
|
||||||
* geometry function.
|
|
||||||
* @return {T|undefined} Callback result.
|
* @return {T|undefined} Callback result.
|
||||||
* @template T
|
* @template T
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.Replay.prototype.replay = function(
|
ol.render.canvas.Replay.prototype.replay = function(
|
||||||
context, pixelRatio, transform, viewRotation, renderGeometryFunction) {
|
context, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
|
||||||
var instructions = this.instructions;
|
var instructions = this.instructions;
|
||||||
return this.replay_(context, pixelRatio, transform, viewRotation,
|
return this.replay_(context, pixelRatio, transform, viewRotation,
|
||||||
renderGeometryFunction, instructions, undefined);
|
skippedFeaturesHash, instructions, undefined);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -470,19 +477,18 @@ ol.render.canvas.Replay.prototype.replay = function(
|
|||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render
|
* @param {Object} skippedFeaturesHash Ids of features to skip
|
||||||
* geometry function.
|
|
||||||
* @param {function(ol.geom.Geometry, Object): T=} opt_geometryCallback
|
* @param {function(ol.geom.Geometry, Object): T=} opt_geometryCallback
|
||||||
* Geometry callback.
|
* Geometry callback.
|
||||||
* @return {T|undefined} Callback result.
|
* @return {T|undefined} Callback result.
|
||||||
* @template T
|
* @template T
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.Replay.prototype.replayHitDetection = function(
|
ol.render.canvas.Replay.prototype.replayHitDetection = function(
|
||||||
context, transform, viewRotation, renderGeometryFunction,
|
context, transform, viewRotation, skippedFeaturesHash,
|
||||||
opt_geometryCallback) {
|
opt_geometryCallback) {
|
||||||
var instructions = this.hitDetectionInstructions;
|
var instructions = this.hitDetectionInstructions;
|
||||||
return this.replay_(context, 1, transform, viewRotation,
|
return this.replay_(context, 1, transform, viewRotation,
|
||||||
renderGeometryFunction, instructions, opt_geometryCallback);
|
skippedFeaturesHash, instructions, opt_geometryCallback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -764,7 +770,7 @@ ol.render.canvas.ImageReplay.prototype.drawPointGeometry =
|
|||||||
goog.asserts.assert(goog.isDef(this.scale_));
|
goog.asserts.assert(goog.isDef(this.scale_));
|
||||||
goog.asserts.assert(goog.isDef(this.width_));
|
goog.asserts.assert(goog.isDef(this.width_));
|
||||||
ol.extent.extend(this.extent_, pointGeometry.getExtent());
|
ol.extent.extend(this.extent_, pointGeometry.getExtent());
|
||||||
this.beginGeometry(pointGeometry);
|
this.beginGeometry(pointGeometry, goog.getUid(data));
|
||||||
var flatCoordinates = pointGeometry.getFlatCoordinates();
|
var flatCoordinates = pointGeometry.getFlatCoordinates();
|
||||||
var stride = pointGeometry.getStride();
|
var stride = pointGeometry.getStride();
|
||||||
var myBegin = this.coordinates.length;
|
var myBegin = this.coordinates.length;
|
||||||
@@ -806,7 +812,7 @@ ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry =
|
|||||||
goog.asserts.assert(goog.isDef(this.scale_));
|
goog.asserts.assert(goog.isDef(this.scale_));
|
||||||
goog.asserts.assert(goog.isDef(this.width_));
|
goog.asserts.assert(goog.isDef(this.width_));
|
||||||
ol.extent.extend(this.extent_, multiPointGeometry.getExtent());
|
ol.extent.extend(this.extent_, multiPointGeometry.getExtent());
|
||||||
this.beginGeometry(multiPointGeometry);
|
this.beginGeometry(multiPointGeometry, goog.getUid(data));
|
||||||
var flatCoordinates = multiPointGeometry.getFlatCoordinates();
|
var flatCoordinates = multiPointGeometry.getFlatCoordinates();
|
||||||
var stride = multiPointGeometry.getStride();
|
var stride = multiPointGeometry.getStride();
|
||||||
var myBegin = this.coordinates.length;
|
var myBegin = this.coordinates.length;
|
||||||
@@ -1018,7 +1024,7 @@ ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry =
|
|||||||
}
|
}
|
||||||
ol.extent.extend(this.extent_, lineStringGeometry.getExtent());
|
ol.extent.extend(this.extent_, lineStringGeometry.getExtent());
|
||||||
this.setStrokeStyle_();
|
this.setStrokeStyle_();
|
||||||
this.beginGeometry(lineStringGeometry);
|
this.beginGeometry(lineStringGeometry, goog.getUid(data));
|
||||||
this.hitDetectionInstructions.push(
|
this.hitDetectionInstructions.push(
|
||||||
[ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
[ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
||||||
state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
|
state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
|
||||||
@@ -1047,7 +1053,7 @@ ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry =
|
|||||||
}
|
}
|
||||||
ol.extent.extend(this.extent_, multiLineStringGeometry.getExtent());
|
ol.extent.extend(this.extent_, multiLineStringGeometry.getExtent());
|
||||||
this.setStrokeStyle_();
|
this.setStrokeStyle_();
|
||||||
this.beginGeometry(multiLineStringGeometry);
|
this.beginGeometry(multiLineStringGeometry, goog.getUid(data));
|
||||||
this.hitDetectionInstructions.push(
|
this.hitDetectionInstructions.push(
|
||||||
[ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
[ol.render.canvas.Instruction.SET_STROKE_STYLE,
|
||||||
state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
|
state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
|
||||||
@@ -1225,7 +1231,7 @@ ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry =
|
|||||||
}
|
}
|
||||||
ol.extent.extend(this.extent_, circleGeometry.getExtent());
|
ol.extent.extend(this.extent_, circleGeometry.getExtent());
|
||||||
this.setFillStrokeStyles_();
|
this.setFillStrokeStyles_();
|
||||||
this.beginGeometry(circleGeometry);
|
this.beginGeometry(circleGeometry, goog.getUid(data));
|
||||||
// always fill the circle for hit detection
|
// always fill the circle for hit detection
|
||||||
this.hitDetectionInstructions.push(
|
this.hitDetectionInstructions.push(
|
||||||
[ol.render.canvas.Instruction.SET_FILL_STYLE,
|
[ol.render.canvas.Instruction.SET_FILL_STYLE,
|
||||||
@@ -1276,7 +1282,7 @@ ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry =
|
|||||||
}
|
}
|
||||||
ol.extent.extend(this.extent_, polygonGeometry.getExtent());
|
ol.extent.extend(this.extent_, polygonGeometry.getExtent());
|
||||||
this.setFillStrokeStyles_();
|
this.setFillStrokeStyles_();
|
||||||
this.beginGeometry(polygonGeometry);
|
this.beginGeometry(polygonGeometry, goog.getUid(data));
|
||||||
// always fill the polygon for hit detection
|
// always fill the polygon for hit detection
|
||||||
this.hitDetectionInstructions.push(
|
this.hitDetectionInstructions.push(
|
||||||
[ol.render.canvas.Instruction.SET_FILL_STYLE,
|
[ol.render.canvas.Instruction.SET_FILL_STYLE,
|
||||||
@@ -1312,7 +1318,7 @@ ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry =
|
|||||||
}
|
}
|
||||||
ol.extent.extend(this.extent_, multiPolygonGeometry.getExtent());
|
ol.extent.extend(this.extent_, multiPolygonGeometry.getExtent());
|
||||||
this.setFillStrokeStyles_();
|
this.setFillStrokeStyles_();
|
||||||
this.beginGeometry(multiPolygonGeometry);
|
this.beginGeometry(multiPolygonGeometry, goog.getUid(data));
|
||||||
// always fill the multi-polygon for hit detection
|
// always fill the multi-polygon for hit detection
|
||||||
this.hitDetectionInstructions.push(
|
this.hitDetectionInstructions.push(
|
||||||
[ol.render.canvas.Instruction.SET_FILL_STYLE,
|
[ol.render.canvas.Instruction.SET_FILL_STYLE,
|
||||||
@@ -1564,7 +1570,7 @@ ol.render.canvas.TextReplay.prototype.drawText =
|
|||||||
this.setReplayStrokeState_(this.textStrokeState_);
|
this.setReplayStrokeState_(this.textStrokeState_);
|
||||||
}
|
}
|
||||||
this.setReplayTextState_(this.textState_);
|
this.setReplayTextState_(this.textState_);
|
||||||
this.beginGeometry(geometry);
|
this.beginGeometry(geometry, goog.getUid(data));
|
||||||
var myBegin = this.coordinates.length;
|
var myBegin = this.coordinates.length;
|
||||||
var myEnd =
|
var myEnd =
|
||||||
this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false);
|
this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false);
|
||||||
@@ -1844,18 +1850,17 @@ ol.render.canvas.ReplayGroup = function(tolerance, maxExtent, resolution) {
|
|||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render
|
* @param {Object} skippedFeaturesHash Ids of features to skip
|
||||||
* geometry function.
|
|
||||||
* @return {T|undefined} Callback result.
|
* @return {T|undefined} Callback result.
|
||||||
* @template T
|
* @template T
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.ReplayGroup.prototype.replay = function(context, extent,
|
ol.render.canvas.ReplayGroup.prototype.replay = function(context, extent,
|
||||||
pixelRatio, transform, viewRotation, renderGeometryFunction) {
|
pixelRatio, transform, viewRotation, skippedFeaturesHash) {
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
|
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
|
||||||
goog.array.sort(zs);
|
goog.array.sort(zs);
|
||||||
return this.replay_(zs, context, extent, pixelRatio, transform,
|
return this.replay_(zs, context, extent, pixelRatio, transform,
|
||||||
viewRotation, renderGeometryFunction);
|
viewRotation, skippedFeaturesHash);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -1866,15 +1871,14 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(context, extent,
|
|||||||
* @param {ol.Extent} extent Extent.
|
* @param {ol.Extent} extent Extent.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render
|
* @param {Object} skippedFeaturesHash Ids of features to skip
|
||||||
* geometry function.
|
|
||||||
* @param {function(ol.geom.Geometry, Object): T} geometryCallback Geometry
|
* @param {function(ol.geom.Geometry, Object): T} geometryCallback Geometry
|
||||||
* callback.
|
* callback.
|
||||||
* @return {T|undefined} Callback result.
|
* @return {T|undefined} Callback result.
|
||||||
* @template T
|
* @template T
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
|
ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
|
||||||
zs, context, extent, transform, viewRotation, renderGeometryFunction,
|
zs, context, extent, transform, viewRotation, skippedFeaturesHash,
|
||||||
geometryCallback) {
|
geometryCallback) {
|
||||||
var i, ii, replays, replayType, replay, result;
|
var i, ii, replays, replayType, replay, result;
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
for (i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
@@ -1883,7 +1887,7 @@ ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
|
|||||||
replay = replays[replayType];
|
replay = replays[replayType];
|
||||||
if (ol.extent.intersects(extent, replay.getExtent())) {
|
if (ol.extent.intersects(extent, replay.getExtent())) {
|
||||||
result = replay.replayHitDetection(context, transform, viewRotation,
|
result = replay.replayHitDetection(context, transform, viewRotation,
|
||||||
renderGeometryFunction, geometryCallback);
|
skippedFeaturesHash, geometryCallback);
|
||||||
if (result) {
|
if (result) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1902,14 +1906,13 @@ ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
|
|||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render
|
* @param {Object} skippedFeaturesHash Ids of features to skip
|
||||||
* geometry function.
|
|
||||||
* @return {T|undefined} Callback result.
|
* @return {T|undefined} Callback result.
|
||||||
* @template T
|
* @template T
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.ReplayGroup.prototype.replay_ = function(
|
ol.render.canvas.ReplayGroup.prototype.replay_ = function(
|
||||||
zs, context, extent, pixelRatio, transform, viewRotation,
|
zs, context, extent, pixelRatio, transform, viewRotation,
|
||||||
renderGeometryFunction) {
|
skippedFeaturesHash) {
|
||||||
|
|
||||||
var maxExtent = this.maxExtent_;
|
var maxExtent = this.maxExtent_;
|
||||||
var minX = maxExtent[0];
|
var minX = maxExtent[0];
|
||||||
@@ -1935,7 +1938,7 @@ ol.render.canvas.ReplayGroup.prototype.replay_ = function(
|
|||||||
if (goog.isDef(replay) &&
|
if (goog.isDef(replay) &&
|
||||||
ol.extent.intersects(extent, replay.getExtent())) {
|
ol.extent.intersects(extent, replay.getExtent())) {
|
||||||
result = replay.replay(context, pixelRatio, transform, viewRotation,
|
result = replay.replay(context, pixelRatio, transform, viewRotation,
|
||||||
renderGeometryFunction);
|
skippedFeaturesHash);
|
||||||
if (result) {
|
if (result) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1953,15 +1956,14 @@ ol.render.canvas.ReplayGroup.prototype.replay_ = function(
|
|||||||
* @param {number} resolution Resolution.
|
* @param {number} resolution Resolution.
|
||||||
* @param {number} rotation Rotation.
|
* @param {number} rotation Rotation.
|
||||||
* @param {ol.Coordinate} coordinate Coordinate.
|
* @param {ol.Coordinate} coordinate Coordinate.
|
||||||
* @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render
|
* @param {Object} skippedFeaturesHash Ids of features to skip
|
||||||
* geometry function.
|
|
||||||
* @param {function(ol.geom.Geometry, Object): T} callback Geometry callback.
|
* @param {function(ol.geom.Geometry, Object): T} callback Geometry callback.
|
||||||
* @return {T|undefined} Callback result.
|
* @return {T|undefined} Callback result.
|
||||||
* @template T
|
* @template T
|
||||||
*/
|
*/
|
||||||
ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function(
|
ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function(
|
||||||
extent, resolution, rotation, coordinate,
|
extent, resolution, rotation, coordinate,
|
||||||
renderGeometryFunction, callback) {
|
skippedFeaturesHash, callback) {
|
||||||
|
|
||||||
var transform = this.hitDetectionTransform_;
|
var transform = this.hitDetectionTransform_;
|
||||||
ol.vec.Mat4.makeTransform2D(transform, 0.5, 0.5,
|
ol.vec.Mat4.makeTransform2D(transform, 0.5, 0.5,
|
||||||
@@ -1976,7 +1978,7 @@ ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function(
|
|||||||
context.clearRect(0, 0, 1, 1);
|
context.clearRect(0, 0, 1, 1);
|
||||||
|
|
||||||
return this.replayHitDetection_(zs, context, extent, transform,
|
return this.replayHitDetection_(zs, context, extent, transform,
|
||||||
rotation, renderGeometryFunction,
|
rotation, skippedFeaturesHash,
|
||||||
/**
|
/**
|
||||||
* @param {ol.geom.Geometry} geometry Geometry.
|
* @param {ol.geom.Geometry} geometry Geometry.
|
||||||
* @param {Object} data Opaque data object.
|
* @param {Object} data Opaque data object.
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ goog.require('goog.asserts');
|
|||||||
goog.require('goog.dom');
|
goog.require('goog.dom');
|
||||||
goog.require('goog.dom.TagName');
|
goog.require('goog.dom.TagName');
|
||||||
goog.require('goog.events');
|
goog.require('goog.events');
|
||||||
goog.require('goog.functions');
|
|
||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.feature');
|
goog.require('ol.feature');
|
||||||
@@ -96,12 +95,10 @@ ol.renderer.canvas.VectorLayer.prototype.composeFrame =
|
|||||||
} else {
|
} else {
|
||||||
replayContext = context;
|
replayContext = context;
|
||||||
}
|
}
|
||||||
var renderGeometryFunction = this.getRenderGeometryFunction_();
|
|
||||||
goog.asserts.assert(goog.isFunction(renderGeometryFunction));
|
|
||||||
replayContext.globalAlpha = layerState.opacity;
|
replayContext.globalAlpha = layerState.opacity;
|
||||||
replayGroup.replay(
|
replayGroup.replay(
|
||||||
replayContext, frameState.extent, frameState.pixelRatio, transform,
|
replayContext, frameState.extent, frameState.pixelRatio, transform,
|
||||||
frameState.view2DState.rotation, renderGeometryFunction);
|
frameState.view2DState.rotation, frameState.skippedFeatureUids_);
|
||||||
|
|
||||||
if (replayContext != context) {
|
if (replayContext != context) {
|
||||||
this.dispatchRenderEvent(replayContext, frameState, transform);
|
this.dispatchRenderEvent(replayContext, frameState, transform);
|
||||||
@@ -126,10 +123,8 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel =
|
|||||||
var resolution = frameState.view2DState.resolution;
|
var resolution = frameState.view2DState.resolution;
|
||||||
var rotation = frameState.view2DState.rotation;
|
var rotation = frameState.view2DState.rotation;
|
||||||
var layer = this.getLayer();
|
var layer = this.getLayer();
|
||||||
var renderGeometryFunction = this.getRenderGeometryFunction_();
|
|
||||||
goog.asserts.assert(goog.isFunction(renderGeometryFunction));
|
|
||||||
return this.replayGroup_.forEachGeometryAtPixel(extent, resolution,
|
return this.replayGroup_.forEachGeometryAtPixel(extent, resolution,
|
||||||
rotation, coordinate, renderGeometryFunction,
|
rotation, coordinate, frameState.skippedFeatureUids_,
|
||||||
/**
|
/**
|
||||||
* @param {ol.geom.Geometry} geometry Geometry.
|
* @param {ol.geom.Geometry} geometry Geometry.
|
||||||
* @param {Object} data Data.
|
* @param {Object} data Data.
|
||||||
@@ -144,43 +139,6 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @return {function(ol.geom.Geometry): boolean} Render geometry function.
|
|
||||||
*/
|
|
||||||
ol.renderer.canvas.VectorLayer.prototype.getRenderGeometryFunction_ =
|
|
||||||
function() {
|
|
||||||
var vectorLayer = this.getLayer();
|
|
||||||
goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector);
|
|
||||||
var renderGeometryFunctions = vectorLayer.getRenderGeometryFunctions();
|
|
||||||
if (!goog.isDef(renderGeometryFunctions)) {
|
|
||||||
return goog.functions.TRUE;
|
|
||||||
}
|
|
||||||
var renderGeometryFunctionsArray = renderGeometryFunctions.getArray();
|
|
||||||
switch (renderGeometryFunctionsArray.length) {
|
|
||||||
case 0:
|
|
||||||
return goog.functions.TRUE;
|
|
||||||
case 1:
|
|
||||||
return renderGeometryFunctionsArray[0];
|
|
||||||
default:
|
|
||||||
return (
|
|
||||||
/**
|
|
||||||
* @param {ol.geom.Geometry} geometry Geometry.
|
|
||||||
* @return {boolean} Render geometry.
|
|
||||||
*/
|
|
||||||
function(geometry) {
|
|
||||||
var i, ii;
|
|
||||||
for (i = 0, ii = renderGeometryFunctionsArray.length; i < ii; ++i) {
|
|
||||||
if (!renderGeometryFunctionsArray[i](geometry)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle changes in image style state.
|
* Handle changes in image style state.
|
||||||
* @param {goog.events.Event} event Image style change event.
|
* @param {goog.events.Event} event Image style change event.
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ ol.source.ImageVector.prototype.canvasFunctionInternal_ =
|
|||||||
var transform = this.getTransform_(ol.extent.getCenter(extent),
|
var transform = this.getTransform_(ol.extent.getCenter(extent),
|
||||||
resolution, pixelRatio, size);
|
resolution, pixelRatio, size);
|
||||||
replayGroup.replay(this.canvasContext_, extent, pixelRatio, transform, 0,
|
replayGroup.replay(this.canvasContext_, extent, pixelRatio, transform, 0,
|
||||||
goog.functions.TRUE);
|
{});
|
||||||
|
|
||||||
this.replayGroup_ = replayGroup;
|
this.replayGroup_ = replayGroup;
|
||||||
|
|
||||||
@@ -158,7 +158,7 @@ ol.source.ImageVector.prototype.forEachFeatureAtPixel =
|
|||||||
return undefined;
|
return undefined;
|
||||||
} else {
|
} else {
|
||||||
return this.replayGroup_.forEachGeometryAtPixel(
|
return this.replayGroup_.forEachGeometryAtPixel(
|
||||||
extent, resolution, 0, coordinate, goog.functions.TRUE,
|
extent, resolution, 0, coordinate, {},
|
||||||
/**
|
/**
|
||||||
* @param {ol.geom.Geometry} geometry Geometry.
|
* @param {ol.geom.Geometry} geometry Geometry.
|
||||||
* @param {Object} data Data.
|
* @param {Object} data Data.
|
||||||
|
|||||||
Reference in New Issue
Block a user