[OpenLayers-Dev] styleMap and GeoRSS

Dejung Gewissler dejung.gewissler at oit.state.nj.us
Mon Feb 25 17:43:41 EST 2008


Hi Devs,

I am trying to figure out the most efficient way to handle point 
features displayed with icons. We have the requirement to symbolize 
point features differently based on a particular value (pretty much what 
happens when you add a text layer with different icons). However, we 
can't have the icon path live in the same location as the data, so we 
would like to use the new Rules class to specify which icons to use 
(kind of like the example 
http://openlayers.org/dev/examples/georss-flickr.html ). Here is a code 
snippet of what we would like to do:

    var style_GeoRSS = new OpenLayers.Style();
    var selectStyle_GeoRSS = new OpenLayers.Style({pointRadius: 50});

    var ruleIncident = new OpenLayers.Rule.Comparison(
        {
            type: OpenLayers.Rule.Comparison.EQUAL_TO,
            property: "field_value1",
            value: "incident",
            symbolizer: {
                "Point": {pointRadius: 25},
                externalGraphic: "icons/incident.png"
            }
        }
    );
    var ruleRoadwork = new OpenLayers.Rule.Comparison(
        {
            type: OpenLayers.Rule.Comparison.EQUAL_TO,
            property: "field_value1",
            value: "roadwork",
            symbolizer: {
                "Point": {pointRadius: 25},
                externalGraphic: "icons/roadwork.png"
            }
        }
    );   
    // If the above rule does not apply, use a smaller pointRadius.
    var elseRule2 = new OpenLayers.Rule(
        {
            elseFilter: true,
            symbolizer: {
                "Point": {pointRadius: 25},
                externalGraphic: "openlayers/img/marker-gold.png"
            }
        }
    );

    style_GeoRSS.addRules([ruleIncident, ruleRoadwork, elseRule2]);
   
    //create the GML layer object
    var GeoRSSLayer = new OpenLayers.Layer.GeoRSS( 'GeoRSS', 'georss.xml',
        {
            visibility:true, maxResolution:5000, minResolution:1,
            styleMap: new OpenLayers.StyleMap({
                "default": style_GeoRSS,
                "select": selectStyle_GeoRSS})       
        }
    );

...but this doesn't work :(

The problem is that the rules based styling is only available for vector 
layers. Now, I could extend the GeoRSS class (which we are currently 
using with hard coded icon paths) to accept a simplified version of the 
styleMap and then set the icons src based on it .. but that seems like 
reinventing the wheel when the georss-flickr.html example works fine.

My question is... which method would be better in the long run? We will 
be pushing quite a few points across. I am aware of the limitations with 
the vector/point overlays and can already notice a small lag when adding 
a simplified GML layer to the map. What are your thoughts about choosing 
which format to display with? Are there significant issues in using 
SVG/VML to display points with icons when the simple GeoRSS class just 
uses divs with icons?

Thanks,
Dejung



More information about the Dev mailing list