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:
@@ -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.
|
||||
|
||||
@@ -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"
|
||||
|
||||
});
|
||||
});
|
||||
@@ -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
106
lib/OpenLayers/Style2.js
Normal 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"
|
||||
});
|
||||
46
lib/OpenLayers/Symbolizer.js
Normal file
46
lib/OpenLayers/Symbolizer.js
Normal 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"
|
||||
|
||||
});
|
||||
|
||||
64
lib/OpenLayers/Symbolizer/Line.js
Normal file
64
lib/OpenLayers/Symbolizer/Line.js
Normal 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"
|
||||
|
||||
});
|
||||
|
||||
136
lib/OpenLayers/Symbolizer/Point.js
Normal file
136
lib/OpenLayers/Symbolizer/Point.js
Normal 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"
|
||||
|
||||
});
|
||||
|
||||
76
lib/OpenLayers/Symbolizer/Polygon.js
Normal file
76
lib/OpenLayers/Symbolizer/Polygon.js
Normal 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"
|
||||
|
||||
});
|
||||
|
||||
29
lib/OpenLayers/Symbolizer/Raster.js
Normal file
29
lib/OpenLayers/Symbolizer/Raster.js
Normal 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"
|
||||
|
||||
});
|
||||
60
lib/OpenLayers/Symbolizer/Text.js
Normal file
60
lib/OpenLayers/Symbolizer/Text.js
Normal 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"
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user