Adding point, line, polygon, text, and raster symbolizer constructors. This paves the way for rendering multiple symbolizers per rule. The SLD parser now successfully round-trips documents with multiple symbolizers and multiple FeatureTypeStyle elements (through the symbolizer zIndex property). The Style2 (yes, ack) constructor is used to represent a collection of rules with multiple symbolizers. Style2 objects are currently only used by the SLD parser if the multipleSymbolizer property is set to true. Future enhancements to the renderers can be made to account for multiple symbolizers. r=ahocevar (closes #2760).

git-svn-id: http://svn.openlayers.org/trunk/openlayers@10560 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2010-08-02 19:49:52 +00:00
parent 9fd7463680
commit 6c0952934f
21 changed files with 1498 additions and 55 deletions

View File

@@ -227,6 +227,7 @@
"OpenLayers/Layer/PointTrack.js",
"OpenLayers/Layer/GML.js",
"OpenLayers/Style.js",
"OpenLayers/Style2.js",
"OpenLayers/StyleMap.js",
"OpenLayers/Rule.js",
"OpenLayers/Format.js",
@@ -303,6 +304,12 @@
"OpenLayers/Control/ZoomOut.js",
"OpenLayers/Control/ZoomPanel.js",
"OpenLayers/Control/EditingToolbar.js",
"OpenLayers/Symbolizer.js",
"OpenLayers/Symbolizer/Point.js",
"OpenLayers/Symbolizer/Line.js",
"OpenLayers/Symbolizer/Polygon.js",
"OpenLayers/Symbolizer/Text.js",
"OpenLayers/Symbolizer/Raster.js",
"OpenLayers/Lang.js",
"OpenLayers/Lang/en.js"
); // etc.

View File

@@ -39,6 +39,27 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
* {String} Schema location for a particular minor version.
*/
schemaLocation: null,
/**
* APIProperty: multipleSymbolizers
* {Boolean} Support multiple symbolizers per rule. Default is false. if
* true, an OpenLayers.Style2 instance will be created to represent
* user styles instead of an OpenLayers.Style instace. The
* OpenLayers.Style2 class allows collections of rules with multiple
* symbolizers, but is not currently useful for client side rendering.
* If multiple symbolizers is true, multiple FeatureTypeStyle elements
* are preserved in reading/writing by setting symbolizer zIndex values.
* In addition, the <defaultSymbolizer> property is ignored if
* multiple symbolizers are supported (defaults should be applied
* when rendering).
*/
multipleSymbolizers: false,
/**
* Property: featureTypeCounter
* {Number} Private counter for multiple feature type styles.
*/
featureTypeCounter: null,
/**
* APIProperty: defaultSymbolizer.
@@ -138,8 +159,15 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
},
"UserStyle": function(node, layer) {
var obj = {defaultsPerSymbolizer: true, rules: []};
this.featureTypeCounter = -1;
this.readChildNodes(node, obj);
var style = new OpenLayers.Style(this.defaultSymbolizer, obj);
var style;
if (this.multipleSymbolizers) {
delete obj.defaultsPerSymbolizer;
style = new OpenLayers.Style2(obj);
} else {
style = new OpenLayers.Style(this.defaultSymbolizer, obj);
}
layer.userStyles.push(style);
},
"IsDefault": function(node, style) {
@@ -148,18 +176,21 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
}
},
"FeatureTypeStyle": function(node, style) {
// OpenLayers doesn't have a place for FeatureTypeStyle
// Name, Title, Abstract, FeatureTypeName, or
// SemanticTypeIdentifier so, we make a temporary object
// and later just use the Rule(s).
++this.featureTypeCounter;
var obj = {
rules: []
rules: this.multipleSymbolizers ? style.rules : []
};
this.readChildNodes(node, obj);
style.rules = obj.rules;
if (!this.multipleSymbolizers) {
style.rules = obj.rules;
}
},
"Rule": function(node, obj) {
var rule = new OpenLayers.Rule();
var config;
if (this.multipleSymbolizers) {
config = {symbolizers: []};
}
var rule = new OpenLayers.Rule(config);
this.readChildNodes(node, rule);
obj.rules.push(rule);
},
@@ -173,11 +204,18 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
rule.maxScaleDenominator = parseFloat(this.getChildValue(node));
},
"TextSymbolizer": function(node, rule) {
// OpenLayers doens't do painter's order, instead we extend
var symbolizer = rule.symbolizer["Text"] || {};
this.readChildNodes(node, symbolizer);
// in case it didn't exist before
rule.symbolizer["Text"] = symbolizer;
var config = {};
this.readChildNodes(node, config);
if (this.multipleSymbolizers) {
config.zIndex = this.featureTypeCounter;
rule.symbolizers.push(
new OpenLayers.Symbolizer.Text(config)
);
} else {
rule.symbolizer["Text"] = OpenLayers.Util.applyDefaults(
config, rule.symbolizer["Text"]
);
}
},
"Label": function(node, symbolizer) {
// only supporting literal or property name
@@ -211,11 +249,18 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
}
},
"RasterSymbolizer": function(node, rule) {
// OpenLayers doesn't do painter's order, instead we extend
var symbolizer = rule.symbolizer["Raster"] || {};
this.readChildNodes(node, symbolizer);
// in case it didn't exist before
rule.symbolizer["Raster"] = symbolizer;
var config = {};
this.readChildNodes(node, config);
if (this.multipleSymbolizers) {
config.zIndex = this.featureTypeCounter;
rule.symbolizers.push(
new OpenLayers.Symbolizer.Raster(config)
);
} else {
rule.symbolizer["Raster"] = OpenLayers.Util.applyDefaults(
config, rule.symbolizer["Raster"]
);
}
},
"Geometry": function(node, obj) {
obj.geometry = {};
@@ -236,32 +281,55 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
});
},
"LineSymbolizer": function(node, rule) {
// OpenLayers doesn't do painter's order, instead we extend
var symbolizer = rule.symbolizer["Line"] || {};
this.readChildNodes(node, symbolizer);
// in case it didn't exist before
rule.symbolizer["Line"] = symbolizer;
var config = {};
this.readChildNodes(node, config);
if (this.multipleSymbolizers) {
config.zIndex = this.featureTypeCounter;
rule.symbolizers.push(
new OpenLayers.Symbolizer.Line(config)
);
} else {
rule.symbolizer["Line"] = OpenLayers.Util.applyDefaults(
config, rule.symbolizer["Line"]
);
}
},
"PolygonSymbolizer": function(node, rule) {
// OpenLayers doens't do painter's order, instead we extend
var symbolizer = rule.symbolizer["Polygon"] || {
var config = {
fill: false,
stroke: false
};
this.readChildNodes(node, symbolizer);
// in case it didn't exist before
rule.symbolizer["Polygon"] = symbolizer;
if (!this.multipleSymbolizers) {
config = rule.symbolizer["Polygon"] || config;
}
this.readChildNodes(node, config);
if (this.multipleSymbolizers) {
config.zIndex = this.featureTypeCounter;
rule.symbolizers.push(
new OpenLayers.Symbolizer.Polygon(config)
);
} else {
rule.symbolizer["Polygon"] = config;
}
},
"PointSymbolizer": function(node, rule) {
// OpenLayers doens't do painter's order, instead we extend
var symbolizer = rule.symbolizer["Point"] || {
var config = {
fill: false,
stroke: false,
graphic: false
};
this.readChildNodes(node, symbolizer);
// in case it didn't exist before
rule.symbolizer["Point"] = symbolizer;
if (!this.multipleSymbolizers) {
config = rule.symbolizer["Point"] || config;
}
this.readChildNodes(node, config);
if (this.multipleSymbolizers) {
config.zIndex = this.featureTypeCounter;
rule.symbolizers.push(
new OpenLayers.Symbolizer.Point(config)
);
} else {
rule.symbolizer["Point"] = config;
}
},
"Stroke": function(node, symbolizer) {
symbolizer.stroke = true;
@@ -566,7 +634,53 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
}
// add FeatureTypeStyles
this.writeNode("FeatureTypeStyle", style, node);
if (this.multipleSymbolizers && style.rules) {
// group style objects by symbolizer zIndex
var rulesByZ = {
0: []
};
var zValues = [0];
var rule, ruleMap, symbolizer, zIndex, clone;
for (var i=0, ii=style.rules.length; i<ii; ++i) {
rule = style.rules[i];
if (rule.symbolizers) {
ruleMap = {};
for (var j=0, jj=rule.symbolizers.length; j<jj; ++j) {
symbolizer = rule.symbolizers[j];
zIndex = symbolizer.zIndex;
if (!(zIndex in ruleMap)) {
clone = rule.clone();
clone.symbolizers = [];
ruleMap[zIndex] = clone;
}
ruleMap[zIndex].symbolizers.push(symbolizer.clone());
}
for (zIndex in ruleMap) {
if (!(zIndex in rulesByZ)) {
zValues.push(zIndex);
rulesByZ[zIndex] = [];
}
rulesByZ[zIndex].push(ruleMap[zIndex]);
}
} else {
// no symbolizers in rule
rulesByZ[0].push(rule.clone());
}
}
// write one FeatureTypeStyle per zIndex
zValues.sort();
var rules;
for (var i=0, ii=zValues.length; i<ii; ++i) {
rules = rulesByZ[zValues[i]];
if (rules.length > 0) {
clone = style.clone();
clone.rules = rulesByZ[zValues[i]];
this.writeNode("FeatureTypeStyle", clone, node);
}
}
} else {
this.writeNode("FeatureTypeStyle", style, node);
}
return node;
},
@@ -626,17 +740,28 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
);
}
// add in symbolizers (relies on geometry type keys)
var types = OpenLayers.Style.SYMBOLIZER_PREFIXES;
var type, symbolizer;
for(var i=0, len=types.length; i<len; ++i) {
type = types[i];
symbolizer = rule.symbolizer[type];
if(symbolizer) {
if (this.multipleSymbolizers && rule.symbolizers) {
var symbolizer;
for (var i=0, ii=rule.symbolizers.length; i<ii; ++i) {
symbolizer = rule.symbolizers[i];
type = symbolizer.CLASS_NAME.split(".").pop();
this.writeNode(
type + "Symbolizer", symbolizer, node
);
}
} else {
// add in symbolizers (relies on geometry type keys)
var types = OpenLayers.Style.SYMBOLIZER_PREFIXES;
for(var i=0, len=types.length; i<len; ++i) {
type = types[i];
symbolizer = rule.symbolizer[type];
if(symbolizer) {
this.writeNode(
type + "Symbolizer", symbolizer, node
);
}
}
}
return node;
@@ -925,8 +1050,12 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
if(symbolizer.graphicName) {
this.writeNode("WellKnownName", symbolizer.graphicName, node);
}
this.writeNode("Fill", symbolizer, node);
this.writeNode("Stroke", symbolizer, node);
if (symbolizer.fill !== false) {
this.writeNode("Fill", symbolizer, node);
}
if (symbolizer.stroke !== false) {
this.writeNode("Stroke", symbolizer, node);
}
return node;
},
"WellKnownName": function(name) {
@@ -967,4 +1096,4 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
CLASS_NAME: "OpenLayers.Format.SLD.v1"
});
});

View File

@@ -6,6 +6,11 @@
/**
* @requires OpenLayers/Util.js
* @requires OpenLayers/Style.js
* @requires OpenLayers/Symbolizer/Point.js
* @requires OpenLayers/Symbolizer/Line.js
* @requires OpenLayers/Symbolizer/Polygon.js
* @requires OpenLayers/Symbolizer/Text.js
* @requires OpenLayers/Symbolizer/Raster.js
*/
/**
@@ -24,7 +29,7 @@ OpenLayers.Rule = OpenLayers.Class({
* APIProperty: name
* {String} name of this rule
*/
name: 'default',
name: null,
/**
* Property: title
@@ -73,6 +78,17 @@ OpenLayers.Rule = OpenLayers.Class({
*/
symbolizer: null,
/**
* Property: symbolizers
* {Array} Collection of symbolizers associated with this rule. If
* provided at construction, the symbolizers array has precedence
* over the deprecated symbolizer property. Note that multiple
* symbolizers are not currently supported by the vector renderers.
* Rules with multiple symbolizers are currently only useful for
* maintaining elements in an SLD document.
*/
symbolizers: null,
/**
* APIProperty: minScaleDenominator
* {Number} or {String} minimum scale at which to draw the feature.
@@ -103,6 +119,9 @@ OpenLayers.Rule = OpenLayers.Class({
initialize: function(options) {
this.symbolizer = {};
OpenLayers.Util.extend(this, options);
if (this.symbolizers) {
delete this.symbolizer;
}
this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_");
},
@@ -115,6 +134,7 @@ OpenLayers.Rule = OpenLayers.Class({
this.symbolizer[i] = null;
}
this.symbolizer = null;
delete this.symbolizers;
},
/**
@@ -187,16 +207,25 @@ OpenLayers.Rule = OpenLayers.Class({
*/
clone: function() {
var options = OpenLayers.Util.extend({}, this);
// clone symbolizer
options.symbolizer = {};
var value, type;
for(var key in this.symbolizer) {
value = this.symbolizer[key];
type = typeof value;
if(type === "object") {
options.symbolizer[key] = OpenLayers.Util.extend({}, value);
} else if(type === "string") {
options.symbolizer[key] = value;
if (this.symbolizers) {
// clone symbolizers
var len = this.symbolizers.length;
options.symbolizers = new Array(len);
for (var i=0; i<len; ++i) {
options.symbolizers[i] = this.symbolizers[i].clone();
}
} else {
// clone symbolizer
options.symbolizer = {};
var value, type;
for(var key in this.symbolizer) {
value = this.symbolizer[key];
type = typeof value;
if(type === "object") {
options.symbolizer[key] = OpenLayers.Util.extend({}, value);
} else if(type === "string") {
options.symbolizer[key] = value;
}
}
}
// clone filter

106
lib/OpenLayers/Style2.js Normal file
View File

@@ -0,0 +1,106 @@
/**
* @requires OpenLayers/Rule.js
* @requires OpenLayers/Symbolizer/Point.js
* @requires OpenLayers/Symbolizer/Line.js
* @requires OpenLayers/Symbolizer/Polygon.js
* @requires OpenLayers/Symbolizer/Text.js
* @requires OpenLayers/Symbolizer/Raster.js
*/
/**
* Class: OpenLayers.Style2
* This class represents a collection of rules for rendering features.
*/
OpenLayers.Style2 = OpenLayers.Class({
/**
* Property: id
* {String} A unique id for this session.
*/
id: null,
/**
* APIProperty: name
* {String} Style identifier.
*/
name: null,
/**
* APIProperty: title
* {String} Title of this style.
*/
title: null,
/**
* APIProperty: description
* {String} Description of this style.
*/
description: null,
/**
* APIProperty: layerName
* {<String>} Name of the layer that this style belongs to, usually
* according to the NamedLayer attribute of an SLD document.
*/
layerName: null,
/**
* APIProperty: isDefault
* {Boolean}
*/
isDefault: false,
/**
* APIProperty: rules
* {Array(<OpenLayers.Rule>)} Collection of rendering rules.
*/
rules: null,
/**
* Constructor: OpenLayers.Style2
* Creates a style representing a collection of rendering rules.
*
* Parameters:
* config - {Object} An object containing properties to be set on the
* style. Any documented properties may be set at construction.
*
* Return:
* {<OpenLayers.Style2>} A new style object.
*/
initialize: function(config) {
OpenLayers.Util.extend(this, config);
this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + "_");
},
/**
* APIMethod: destroy
* nullify references to prevent circular references and memory leaks
*/
destroy: function() {
for (var i=0, len=this.rules.length; i<len; i++) {
this.rules[i].destroy();
}
delete this.rules;
},
/**
* APIMethod: clone
* Clones this style.
*
* Returns:
* {<OpenLayers.Style2>} Clone of this style.
*/
clone: function() {
var config = OpenLayers.Util.extend({}, this);
// clone rules
if (this.rules) {
config.rules = [];
for (var i=0, len=this.rules.length; i<len; ++i) {
config.rules.push(this.rules[i].clone());
}
}
return new OpenLayers.Style2(config);
},
CLASS_NAME: "OpenLayers.Style2"
});

View File

@@ -0,0 +1,46 @@
/**
* Class: OpenLayers.Symbolizer
* Base class representing a symbolizer used for feature rendering.
*/
OpenLayers.Symbolizer = OpenLayers.Class({
/**
* APIProperty: zIndex
* {Number} The zIndex determines the rendering order for a symbolizer.
* Symbolizers with larger zIndex values are rendered over symbolizers
* with smaller zIndex values. Default is 0.
*/
zIndex: 0,
/**
* Constructor: OpenLayers.Symbolizer
* Instances of this class are not useful. See one of the subclasses.
*
* Parameters:
* config - {Object} An object containing properties to be set on the
* symbolizer. Any documented symbolizer property can be set at
* construction.
*
* Returns:
* A new symbolizer.
*/
initialize: function(config) {
OpenLayers.Util.extend(this, config);
},
/**
* APIMethod: clone
* Create a copy of this symbolizer.
*
* Returns a symbolizer of the same type with the same properties.
*/
clone: function() {
var Type = eval(this.CLASS_NAME);
return new Type(OpenLayers.Util.extend({}, this));
},
CLASS_NAME: "OpenLayers.Symbolizer"
});

View File

@@ -0,0 +1,64 @@
/**
* @requires OpenLayers/Symbolizer.js
*/
/**
* Class: OpenLayers.Symbolizer.Line
* A symbolizer used to render line features.
*/
OpenLayers.Symbolizer.Line = OpenLayers.Class(OpenLayers.Symbolizer, {
/**
* APIProperty: strokeColor
* {String} Color for line stroke. This is a RGB hex value (e.g. "#ff0000"
* for red).
*/
strokeColor: null,
/**
* APIProperty: strokeOpacity
* {Number} Stroke opacity (0-1).
*/
strokeOpacity: null,
/**
* APIProperty: strokeWidth
* {Number} Pixel stroke width.
*/
strokeWidth: null,
/**
* APIProperty: strokeLinecap
* {String} Stroke cap type ("butt", "round", or "square").
*/
strokeLinecap: null,
/**
* Property: strokeDashstyle
* {String} Stroke dash style according to the SLD spec. Note that the
* OpenLayers values for strokeDashstyle ("dot", "dash", "dashdot",
* "longdash", "longdashdot", or "solid") will not work in SLD, but
* most SLD patterns will render correctly in OpenLayers.
*/
strokeDashstyle: "solid",
/**
* Constructor: OpenLayers.Symbolizer.Line
* Create a symbolizer for rendering lines.
*
* Parameters:
* config - {Object} An object containing properties to be set on the
* symbolizer. Any documented symbolizer property can be set at
* construction.
*
* Returns:
* A new line symbolizer.
*/
initialize: function(config) {
OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
},
CLASS_NAME: "OpenLayers.Symbolizer.Line"
});

View File

@@ -0,0 +1,136 @@
/**
* @requires OpenLayers/Symbolizer.js
*/
/**
* Class: OpenLayers.Symbolizer.Point
* A symbolizer used to render point features.
*/
OpenLayers.Symbolizer.Point = OpenLayers.Class(OpenLayers.Symbolizer, {
/**
* APIProperty: strokeColor
* {String} Color for line stroke. This is a RGB hex value (e.g. "#ff0000"
* for red).
*/
strokeColor: null,
/**
* APIProperty: strokeOpacity
* {Number} Stroke opacity (0-1).
*/
strokeOpacity: null,
/**
* APIProperty: strokeWidth
* {Number} Pixel stroke width.
*/
strokeWidth: null,
/**
* APIProperty: strokeLinecap
* {String} Stroke cap type ("butt", "round", or "square").
*/
strokeLinecap: null,
/**
* Property: strokeDashstyle
* {String} Stroke dash style according to the SLD spec. Note that the
* OpenLayers values for strokeDashstyle ("dot", "dash", "dashdot",
* "longdash", "longdashdot", or "solid") will not work in SLD, but
* most SLD patterns will render correctly in OpenLayers.
*/
strokeDashstyle: "solid",
/**
* APIProperty: fillColor
* {String} RGB hex fill color (e.g. "#ff0000" for red).
*/
fillColor: null,
/**
* APIProperty: fillOpacity
* {Number} Fill opacity (0-1).
*/
fillOpacity: null,
/**
* APIProperty: pointRadius
* {Number} Pixel point radius.
*/
pointRadius: null,
/**
* APIProperty: externalGraphic
* {String} Url to an external graphic that will be used for rendering
* points.
*/
externalGraphic: null,
/**
* APIProperty: graphicWidth
* {Number} Pixel width for sizing an external graphic.
*/
graphicWidth: null,
/**
* APIProperty: graphicHeight
* {Number} Pixel height for sizing an external graphic.
*/
graphicHeight: null,
/**
* APIProperty: graphicOpacity
* {Number} Opacity (0-1) for an external graphic.
*/
graphicOpacity: null,
/**
* APIProperty: graphicXOffset
* {Number} Pixel offset along the positive x axis for displacing an
* external graphic.
*/
graphicXOffset: null,
/**
* APIProperty: graphicYOffset
* {Number} Pixel offset along the positive y axis for displacing an
* external graphic.
*/
graphicYOffset: null,
/**
* APIProperty: rotation
* {Number} The rotation of a graphic in the clockwise direction about its
* center point (or any point off center as specified by
* <graphicXOffset> and <graphicYOffset>).
*/
rotation: null,
/**
* APIProperty: graphicName
* {String} Named graphic to use when rendering points. Supported values
* include "circle", "square", "star", "x", "cross", and "triangle".
*/
graphicName: null,
/**
* Constructor: OpenLayers.Symbolizer.Point
* Create a symbolizer for rendering points.
*
* Parameters:
* config - {Object} An object containing properties to be set on the
* symbolizer. Any documented symbolizer property can be set at
* construction.
*
* Returns:
* A new point symbolizer.
*/
initialize: function(config) {
OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
},
CLASS_NAME: "OpenLayers.Symbolizer.Point"
});

View File

@@ -0,0 +1,76 @@
/**
* @requires OpenLayers/Symbolizer.js
*/
/**
* Class: OpenLayers.Symbolizer.Polygon
* A symbolizer used to render line features.
*/
OpenLayers.Symbolizer.Polygon = OpenLayers.Class(OpenLayers.Symbolizer, {
/**
* APIProperty: strokeColor
* {String} Color for line stroke. This is a RGB hex value (e.g. "#ff0000"
* for red).
*/
strokeColor: null,
/**
* APIProperty: strokeOpacity
* {Number} Stroke opacity (0-1).
*/
strokeOpacity: null,
/**
* APIProperty: strokeWidth
* {Number} Pixel stroke width.
*/
strokeWidth: null,
/**
* APIProperty: strokeLinecap
* {String} Stroke cap type ("butt", "round", or "square").
*/
strokeLinecap: null,
/**
* Property: strokeDashstyle
* {String} Stroke dash style according to the SLD spec. Note that the
* OpenLayers values for strokeDashstyle ("dot", "dash", "dashdot",
* "longdash", "longdashdot", or "solid") will not work in SLD, but
* most SLD patterns will render correctly in OpenLayers.
*/
strokeDashstyle: "solid",
/**
* APIProperty: fillColor
* {String} RGB hex fill color (e.g. "#ff0000" for red).
*/
fillColor: null,
/**
* APIProperty: fillOpacity
* {Number} Fill opacity (0-1).
*/
fillOpacity: null,
/**
* Constructor: OpenLayers.Symbolizer.Polygon
* Create a symbolizer for rendering polygons.
*
* Parameters:
* config - {Object} An object containing properties to be set on the
* symbolizer. Any documented symbolizer property can be set at
* construction.
*
* Returns:
* A new polygon symbolizer.
*/
initialize: function(config) {
OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
},
CLASS_NAME: "OpenLayers.Symbolizer.Polygon"
});

View File

@@ -0,0 +1,29 @@
/**
* @requires OpenLayers/Symbolizer.js
*/
/**
* Class: OpenLayers.Symbolizer.Raster
* A symbolizer used to render raster images.
*/
OpenLayers.Symbolizer.Raster = OpenLayers.Class(OpenLayers.Symbolizer, {
/**
* Constructor: OpenLayers.Symbolizer.Raster
* Create a symbolizer for rendering rasters.
*
* Parameters:
* config - {Object} An object containing properties to be set on the
* symbolizer. Any documented symbolizer property can be set at
* construction.
*
* Returns:
* A new raster symbolizer.
*/
initialize: function(config) {
OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
},
CLASS_NAME: "OpenLayers.Symbolizer.Raster"
});

View File

@@ -0,0 +1,60 @@
/**
* @requires OpenLayers/Symbolizer.js
*/
/**
* Class: OpenLayers.Symbolizer.Text
* A symbolizer used to render text labels for features.
*/
OpenLayers.Symbolizer.Text = OpenLayers.Class(OpenLayers.Symbolizer, {
/**
* APIProperty: label
* {String} The text for the label.
*/
label: null,
/**
* APIProperty: fontFamily
* {String} The font family for the label.
*/
fontFamily: null,
/**
* APIProperty: fontSize
* {String} The font size for the label.
*/
fontSize: null,
/**
* APIProperty: fontWeight
* {String} The font weight for the label.
*/
fontWeight: null,
/**
* Property: fontStyle
* {String} The font style for the label.
*/
fontStyle: null,
/**
* Constructor: OpenLayers.Symbolizer.Text
* Create a symbolizer for rendering text labels.
*
* Parameters:
* config - {Object} An object containing properties to be set on the
* symbolizer. Any documented symbolizer property can be set at
* construction.
*
* Returns:
* A new text symbolizer.
*/
initialize: function(config) {
OpenLayers.Symbolizer.prototype.initialize.apply(this, arguments);
},
CLASS_NAME: "OpenLayers.Symbolizer.Text"
});