Lib for well-known functions
This reveals a lexer bug that needs addressing.
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
goog.provide('ol.expression');
|
goog.provide('ol.expression');
|
||||||
|
|
||||||
|
goog.require('ol.Extent');
|
||||||
|
goog.require('ol.Feature');
|
||||||
goog.require('ol.expression.Parser');
|
goog.require('ol.expression.Parser');
|
||||||
|
goog.require('ol.extent');
|
||||||
|
goog.require('ol.geom.GeometryType');
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -13,3 +17,49 @@ ol.expression.parse = function(source) {
|
|||||||
var parser = new ol.expression.Parser();
|
var parser = new ol.expression.Parser();
|
||||||
return parser.parse(source);
|
return parser.parse(source);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Library of well-known functions. These are available to expressions parsed
|
||||||
|
* with `ol.expression.parse`.
|
||||||
|
*
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
ol.expression.lib = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if a feature's extent intersects the provided extent.
|
||||||
|
* @param {number} minX Minimum x-coordinate value.
|
||||||
|
* @param {number} maxX Maximum x-coordinate value.
|
||||||
|
* @param {number} minY Minimum y-coordinate value.
|
||||||
|
* @param {number} maxY Maximum y-coordinate value.
|
||||||
|
* @return {boolean} The provided extent intersects the feature's extent.
|
||||||
|
* @this {ol.Feature}
|
||||||
|
*/
|
||||||
|
'extent': function(minX, maxX, minY, maxY) {
|
||||||
|
var intersects = false;
|
||||||
|
var geometry = this.getGeometry();
|
||||||
|
if (geometry) {
|
||||||
|
intersects = ol.extent.intersects(geometry.getBounds(),
|
||||||
|
[minX, maxX, minY, maxY]);
|
||||||
|
}
|
||||||
|
return intersects;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if a feature's default geometry is of the given type.
|
||||||
|
* @param {ol.geom.GeometryType} type Geometry type.
|
||||||
|
* @return {boolean} The feature's default geometry is of the given type.
|
||||||
|
* @this {ol.Feature}
|
||||||
|
*/
|
||||||
|
'geometryType': function(type) {
|
||||||
|
var same = false;
|
||||||
|
var geometry = this.getGeometry();
|
||||||
|
if (geometry) {
|
||||||
|
same = geometry.getType() === type;
|
||||||
|
}
|
||||||
|
return same;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|||||||
@@ -522,6 +522,48 @@ describe('ol.expression.parse', function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('ol.expression.lib', function() {
|
||||||
|
|
||||||
|
var lib = ol.expression.lib;
|
||||||
|
var parse = ol.expression.parse;
|
||||||
|
|
||||||
|
function evaluate(expression, feature) {
|
||||||
|
return expression.evaluate(feature.getAttributes(), lib, feature);
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('extent()', function() {
|
||||||
|
|
||||||
|
var nw = new ol.Feature({
|
||||||
|
geom: new ol.geom.Polygon([[
|
||||||
|
[-180, 90], [0, 90], [0, 0], [-180, 0], [-180, 90]
|
||||||
|
]])
|
||||||
|
});
|
||||||
|
|
||||||
|
var se = new ol.Feature({
|
||||||
|
geom: new ol.geom.Polygon([[
|
||||||
|
[180, -90], [0, -90], [0, 0], [180, 0], [180, -90]
|
||||||
|
]])
|
||||||
|
});
|
||||||
|
|
||||||
|
var north = parse('extent(-100, 100, 40, 60)');
|
||||||
|
var south = parse('extent(-100, 100, -60, -40)');
|
||||||
|
var east = parse('extent(80, 100, -50, 50)');
|
||||||
|
var west = parse('extent(-100, -80, -50, 50)');
|
||||||
|
|
||||||
|
expect(evaluate(north, nw), true);
|
||||||
|
expect(evaluate(south, nw), false);
|
||||||
|
expect(evaluate(east, nw), false);
|
||||||
|
expect(evaluate(west, nw), true);
|
||||||
|
|
||||||
|
expect(evaluate(north, se), false);
|
||||||
|
expect(evaluate(south, se), true);
|
||||||
|
expect(evaluate(east, se), true);
|
||||||
|
expect(evaluate(west, se), false);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
goog.require('ol.expression');
|
goog.require('ol.expression');
|
||||||
goog.require('ol.expression.Call');
|
goog.require('ol.expression.Call');
|
||||||
|
|||||||
Reference in New Issue
Block a user