I'm trying to add a rule to paint some roads of my GeoJSON file with a different style using OpenLayers.
The problem is that even after adding a property "featureType" to the feature in response to the event "featureadded", the rule doesn't seem to be working.
Any ideas why this happens?
This if a feature example in GeoJSON format after changing the "featureType":
{
"type": "Feature",
"properties": {
"id": "42",
"state": "texto",
"featureType": "segmento_logradouro"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
574951.47711036,
9673700.3858644
],
[
574954.47530982,
9673558.2712099
],
[
574814.15957496,
9673551.0755312
]
]
},
"crs": {
"type": "name",
"properties": {
"name": "EPSG:29193"
}
}
}
And this is the code I used to add the rules:
var ruleSegmentoLogradouroStyle = OpenLayers.Util.applyDefaults({
fillColor : "#0000FF",
fillOpacity : 0.9,
strokeColor : "#FF0000",
strokeOpacity : 0.9,
strokeWidth : 5
}, OpenLayers.Feature.Vector.style["default"]);
var ruleSegmentoLogradouro = new OpenLayers.Rule({
filter : new OpenLayers.Filter.Comparison({
type : OpenLayers.Filter.Comparison.EQUAL_TO,
property : "featureType",
value : "segmento_logradouro",
}),
symbolizer : ruleSegmentoLogradouroStyle
});
var ruleDefault = new OpenLayers.Rule({
symbolizer : OpenLayers.Util.applyDefaults({},
OpenLayers.Feature.Vector.style["default"]),
elseFilter : true
});
defaultStyle = OpenLayers.Util.applyDefaults({
fillColor : "green",
fillOpacity : 0.4
}, OpenLayers.Feature.Vector.style["default"]);
MapControl.editLayer.styleMap = new OpenLayers.StyleMap(defaultStyle);
MapControl.editLayer.styleMap.styles['default'].addRules([ ruleSegmentoLogradouro,
ruleDefault ]);
Best Answer
it seems that you have an extra comma in the first part of the code, try this:
even though I haven't tested your code, it looks like that it could be reduced, what would you get if instead you use the code below?
that one will paint all features with class equal to ‘someClass’ using a 1px olive stroke and blue fill. However, if you want all features to be colored red except for those that have a class attribute with the value of "someClass" (and you want those features colored blue with an 1px olive stroke), you would create a style that looked like the following:
check here to have some additional tips.
Hope this helps,