Add support for the extremely awesomely super-comprehensive rule based styling
that Andreas has been working so hard on. I think this is the single most awesome commit I've ever had the pleasure of committing. The results of this commit are described on http://trac.openlayers.org/wiki/Styles: essentially, this makes it possible to style features in all kinds of fun ways based on rules, and will also form the underlying basis for #533. Things this patch adds: * OL.Rule classes. These classes allow you to do tests against the propertie of a feature, and set a style based on these properties -- so you can compare the 'speedlimit' property of a line, and test if it is > 60, and if it is greater than 60, render it in a different color. You can also test combinations of rules using the OL.Rule.Logical class, and test featureids with the FeatureID class. * OL.Style class: The OL.Style class lets you wrap up Rules into styles that can be used with drawFeature to draw the feature in the selected style. * OL.Layer.Vector.drawFeature will check if the given style is an OL.Style object, and if so, it will draw the feature accordingly. examples/georss-flickr.html shows usage of these classes. Many, many thanks go to Andreas for all his hard work on this: this code really is very pretty, and includes unit tests for all the classes (and we know that I am a big fan of tests.) Three cheers for Andreas: Hip hip, hooray! hip hip, hooray! hip hip, hooray! git-svn-id: http://svn.openlayers.org/trunk/openlayers@5429 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
90
lib/OpenLayers/Rule.js
Normal file
90
lib/OpenLayers/Rule.js
Normal file
@@ -0,0 +1,90 @@
|
||||
/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
|
||||
* See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
|
||||
* for the full text of the license. */
|
||||
|
||||
|
||||
/**
|
||||
* @requires OpenLayers/Util.js
|
||||
* @requires OpenLayers/Style.js
|
||||
*
|
||||
* Class: OpenLayers.Rule
|
||||
*
|
||||
* This class represents a OGC Rule, as being used for rule-based SLD styling
|
||||
*/
|
||||
OpenLayers.Rule = OpenLayers.Class({
|
||||
|
||||
/**
|
||||
* APIProperty: name
|
||||
* {String} name of this rule
|
||||
*/
|
||||
name: 'default',
|
||||
|
||||
/**
|
||||
* Property: symbolizer
|
||||
* {Object} Hash of styles for this rule. Contains hashes of feature
|
||||
* styles. Keys are one or more of ["Point", "Line", "Polygon"]
|
||||
*/
|
||||
symbolizer: null,
|
||||
|
||||
/**
|
||||
* APIProperty: minScale
|
||||
* {Number} or {String} minimum scale at which to draw the feature.
|
||||
* In the case of a String, this can be a combination of text and
|
||||
* propertyNames in the form "literal ${propertyName}"
|
||||
*/
|
||||
minScale: null,
|
||||
|
||||
/**
|
||||
* APIProperty: maxScale
|
||||
* {Number} or {String} maximum scale at which to draw the feature.
|
||||
* In the case of a String, this can be a combination of text and
|
||||
* propertyNames in the form "literal ${propertyName}"
|
||||
*/
|
||||
maxScale: null,
|
||||
|
||||
/**
|
||||
* Constructor: OpenLayers.Rule
|
||||
* Creates a Rule.
|
||||
*
|
||||
* Parameters:
|
||||
* options - {Object} An optional object with properties to set on the
|
||||
* rule
|
||||
*
|
||||
* Returns:
|
||||
* {<OpenLayers.Rule>}
|
||||
*/
|
||||
initialize: function(options) {
|
||||
this.symbolizer = {};
|
||||
|
||||
OpenLayers.Util.extend(this, options);
|
||||
},
|
||||
|
||||
/**
|
||||
* APIMethod: destroy
|
||||
* nullify references to prevent circular references and memory leaks
|
||||
*/
|
||||
destroy: function() {
|
||||
for (var i in this.symbolizer) {
|
||||
this.symbolizer[i] = null;
|
||||
}
|
||||
this.symbolizer = null;
|
||||
},
|
||||
|
||||
/**
|
||||
* APIMethod: evaluate
|
||||
* evaluates this rule for a specific feature
|
||||
*
|
||||
* Parameters:
|
||||
* feature - {<OpenLayers.Feature>} feature to apply the rule to.
|
||||
*
|
||||
* Returns:
|
||||
* {boolean} true if the rule applies, false if it does not.
|
||||
* This rule is the default rule and always returns true.
|
||||
*/
|
||||
evaluate: function(feature) {
|
||||
// Default rule always applies. Subclasses will want to override this.
|
||||
return true;
|
||||
},
|
||||
|
||||
CLASS_NAME: "OpenLayers.Rule"
|
||||
});
|
||||
Reference in New Issue
Block a user