Features can now have symbolizers
If specified, feature symbolizers take precedence over rule based styling.
This commit is contained in:
@@ -20,6 +20,12 @@ ol.Feature = function(opt_values) {
|
||||
*/
|
||||
this.geometryName_;
|
||||
|
||||
/**
|
||||
* @type {Array.<ol.style.Symbolizer>}
|
||||
* @private
|
||||
*/
|
||||
this.symbolizers_ = null;
|
||||
|
||||
};
|
||||
goog.inherits(ol.Feature, ol.Object);
|
||||
|
||||
@@ -50,6 +56,22 @@ ol.Feature.prototype.getGeometry = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {Array.<ol.style.SymbolizerLiteral>} Symbolizer literals.
|
||||
*/
|
||||
ol.Feature.prototype.getSymbolizerLiterals = function() {
|
||||
var symbolizerLiterals = null;
|
||||
if (!goog.isNull(this.symbolizers_)) {
|
||||
var numSymbolizers = this.symbolizers_.length;
|
||||
symbolizerLiterals = new Array(numSymbolizers);
|
||||
for (var i = 0; i < numSymbolizers; ++i) {
|
||||
symbolizerLiterals[i] = this.symbolizers_[i].createLiteral(this);
|
||||
}
|
||||
}
|
||||
return symbolizerLiterals;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param {string} key Key.
|
||||
@@ -74,6 +96,15 @@ ol.Feature.prototype.setGeometry = function(geometry) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array.<ol.style.Symbolizer>} symbolizers Symbolizers for this
|
||||
* features. If set, these take precedence over layer style.
|
||||
*/
|
||||
ol.Feature.prototype.setSymbolizers = function(symbolizers) {
|
||||
this.symbolizers_ = symbolizers;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @const
|
||||
* @type {string}
|
||||
|
||||
@@ -42,16 +42,21 @@ ol.layer.Vector.prototype.groupFeaturesBySymbolizerLiteral =
|
||||
var uniqueLiterals = {},
|
||||
featuresBySymbolizer = [],
|
||||
style = this.style_,
|
||||
feature, literals, literal, uniqueLiteral, key;
|
||||
for (var i = 0, ii = features.length; i < ii; ++i) {
|
||||
numFeatures = features.length,
|
||||
i, j, l, feature, literals, numLiterals, literal, uniqueLiteral, key;
|
||||
for (i = 0; i < numFeatures; ++i) {
|
||||
feature = features[i];
|
||||
literals = goog.isNull(style) ?
|
||||
ol.style.Style.applyDefaultStyle(feature) :
|
||||
style.apply(feature);
|
||||
for (var j = 0, jj = literals.length; j < jj; ++j) {
|
||||
literals = feature.getSymbolizerLiterals();
|
||||
if (goog.isNull(literals)) {
|
||||
literals = goog.isNull(style) ?
|
||||
ol.style.Style.applyDefaultStyle(feature) :
|
||||
style.apply(feature);
|
||||
}
|
||||
numLiterals = literals.length;
|
||||
for (j = 0; j < numLiterals; ++j) {
|
||||
literal = literals[j];
|
||||
for (var l in uniqueLiterals) {
|
||||
uniqueLiteral = featuresBySymbolizer[uniqueLiterals[key]][1];
|
||||
for (l in uniqueLiterals) {
|
||||
uniqueLiteral = featuresBySymbolizer[uniqueLiterals[l]][1];
|
||||
if (literal.equals(uniqueLiteral)) {
|
||||
literal = uniqueLiteral;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user