[OpenLayers-Users] Proportional Symbol Mapping

Eric Lemoine eric.c2c at gmail.com
Sun Apr 6 15:44:18 EDT 2008


On Sun, Apr 6, 2008 at 7:24 PM, Andreas Hocevar
<andreas.hocevar at gmail.com> wrote:
> Bjorn,
>
>  your requirement is covered by the new OpenLayers.StyleMap.
>
>  First of all, have a look at the styles-context example
>  (http://www.openlayers.org/dev/examples/styles-context.html). The second
>  example there (the points in the southern hemisphere) are created with
>  an advanced template. The same can be done for your use case.
>
>  If I take your original code for the calculation of the size:
>
>  feature.style.pointRadius = 3 + (pop * (40 / 1312978855));
>
> feature.style.fillColor = feature.attributes['colour'];
>
>  I can create the following template:
>
>  var context = {
>     getSize: function(feature) {
>         return feature.attributes["population"] * someFactor * map.getScale();
>     },
>     getColour: function(feature) {
>         return feature.attributes["colour"];
>     }
>  };
>  var template = {
>     fillOpacity: 0.9
>     pointRadius: "${getSize}", // using context.getSize(feature)
>     fillColor: "${getColour}"  // using context.getColour(feature)
>  };
>
>  var style = new OpenLayers.Style(template, {context: context});
>  vectors = new OpenLayers.Layer.Vector("Vector Layer", {
>     styleMap: new OpenLayers.StyleMap(style)});
>
>
>  You only have to find an algorithm to derive your pointRadius from
>  (using map.getScale() or map.getResolution() and someFactor).
>
>  Also, there is no need to set any feature styles in the onload method.
>  You're all set with the above definition of the styleMap in the
>  constructor for your vector layer.

Thanks for this detailed explanation Andreas. The style/rule framework
is so rich that it's kinda hard to keep up with all of its features.

--
Eric



More information about the Users mailing list