Hi list !

I'd like some clarification on the use of the "Comparison" class.
I have many feature defined with GeoJSON. I want to change style of feature according to an attribute "nb_voyage".
Here a part of my test :

  /* DATA */
  var waypoints = {
      type: "FeatureCollection",
      features: [{
          type: "Feature",
geometry: { type: "LineString", coordinates: [ [ 0.04863281249999929, 40.00107421875 ] , [ 0.3452636718749993, 38.81455078125 ] ] }, crs: { type: "OGC", properties: { urn: "urn:ogc:def:crs:OGC:1.3:CRS84" } },
          properties: { nb_voyage: 3, from: "Point 1", to: "Point 10" }
      },{
          type: "Feature",
geometry: { type: "LineString", coordinates: [ [ -0.3139160156250007, 39.495703125 ] , [ 0.3452636718749993, 38.81455078125 ] ] }, crs: { type: "OGC", properties: { urn: "urn:ogc:def:crs:OGC:1.3:CRS84" } },
          properties: { nb_voyage: 18, from: "Point 5", to: "Point 8" }
      }]
  };

  /* BUILD STYLE */
var style = new OpenLayers.Style({strokeOpacity: 1, strokeLinecap: "round", strokeWidth: 2});
  var ruleLow = new OpenLayers.Filter.Comparison({
      type: OpenLayers.Filter.Comparison.LESS_THAN,
      property: "nb_voyage",
      value: 15,
      symbolizer: {strokeColor: "#FF0000" }
  });
  var ruleHigh = new OpenLayers.Filter.Comparison({
      type: OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO,
      property: "nb_voyage",
      value: 15,
      symbolizer: {strokeColor: "#00FF00" }
  });
  var elseRule = new OpenLayers.Rule({
      elseFilter: true,
      symbolizer: {strokeColor: "#0000FF" }
  });
  style.addRules([ruleLow, ruleHigh, elseRule]);
    /* ADD DATA TO LAYER */
  var geojson_format = new OpenLayers.Format.GeoJSON();
  var layer = new OpenLayers.Layer.Vector("mylayer", {
      styleMap: new OpenLayers.StyleMap({
          default: style
      })
  });
  layer.addFeatures(geojson_format.read(waypoints));
  map.addLayer(layer);

But the elseFilter rule is always applied !

After many trackback I saw in Comparison.evaluate(context) function that "context" is the feature. The comparison is done on the root properties of the feature (feature.nb_voyage), but my attribute is in "attributes" (feature.attributes.nb_voyage).
Can i change this way ?

Thanks for your help
Gwennaël Matot


PS : the features are like to :
feature: {
  CLASS_NAME: "OpenLayers.Feature.Vector",
  attributes: {
      from: "Point 1"
      to: "Point 2"
      nb_voyage: 5
  },
  data: {
      from: "Point 1"
      to: "Point 2"
      nb_voyage: 5
  },
  geometry: ...,
  renderIntent: "default",
  style: null,
  ...
}

_______________________________________________
Users mailing list
Users@openlayers.org
http://openlayers.org/mailman/listinfo/users

Reply via email to