I need to show label of each feature based on attribute field value. I know that I can use ${attribute} notation for this purpose. But this approach works only if I make StyleMap and pass it to vector layer constructor. But in this case I can not modify style of each features separately. How I can make layer with labels and with not null value of style property of each feature?
My current config:
var custom_style = {
fill: true,
fillColor: "#feb24c",
fillOpacity: 0.2,
strokeColor: '#3182bd',
strokeWidth: 1
};
var l = new OpenLayers.Layer.Vector("Coverage", {
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.HTTP({
url: "http://***:8088/collect",
format: new ol.Format.GeoJSON()
}),
style: custom_style
});
If I add label: ${attribute}
to custom_style object, then text ${attribute}
will be shown on map, not value of attribute.
-
are you having problems because some features have null value?neogeomat– neogeomat2013年10月28日 13:54:34 +00:00Commented Oct 28, 2013 at 13:54
2 Answers 2
If you want to process each feature and display something different depending on the value of a feature attribute, you can supply a function via the style context that returns different values. Here's an example. However, this approach does use a style map - I'm not sure if you want to avoid using one for some reason.
The value of the label is generated by the assigned function.
-
Unfortunately, you can't. Variables are only evaluated in
StyleMap
objects.Gabor Farkas– Gabor Farkas2015年08月23日 10:42:57 +00:00Commented Aug 23, 2015 at 10:42
In the case of the label, probably this may work:
label: '${attribute}'
Here I modified your code with it:
var custom_style = {
fill: true,
fillColor: "#feb24c",
fillOpacity: 0.2,
strokeColor: '#3182bd',
strokeWidth: 1,
label: '${attribute}'
};
var l = new OpenLayers.Layer.Vector("Coverage", {
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.HTTP({
url: "http://***:8088/collect",
format: new ol.Format.GeoJSON()
}),
style: custom_style
});