Dans un billet précédent, vous pouviez apercevoir le début de l'implémentation dans MozMapToolkit, l'évolution de MozMapEditor et utilisé dans MozMapStyler, de la norme de l'Open Geospatial Consortium (OGC) Filter Encoding.

<conditionsdisplay>
  <ogc:PropertyIsEqualTo>
    <ogc:PropertyName>NAME</PropertyName>
    <ogc:Literal>Mexico City</Literal>
  </ogc:PropertyIsEqualTo>
</conditiondisplay>

J'ai donc complété l'implémentation en ajoutant les opérateurs arithmétiques

<ogc:Add/> opérateur d'addition
<ogc:Sub/> opérateur de soustraction
<ogc:Mul/> opérateur de multiplication
<ogc:Div/> opérateur de division

les opérateurs logiques

<ogc:And/>
<ogc:Or/>
<ogc:Not/>

la majorité des opérateurs de comparaison

<ogc:PropertyIsEqualTo/>
<ogc:PropertyIsNotEqualTo/>
<ogc:PropertyIsLessThan/>
<ogc:PropertyIsGreaterThan/>
<ogc:PropertyIsLessThanOrEqualTo/>
<ogc:PropertyIsGreaterThanOrEqualTo/>

Grâce à cela il est possible de réaliser du côté de l'application cliente une analyse thématique plus ou moins complexe, exemple avec la table Distritos de ma base de données PostGIS :

Tout d'abord une carte de densité de population en 1991.


Cette carte est généré à partir de l'expression suivante :

<ogc:Div>
  <ogc:PropertyName>Pop91</ogc:PropertyName>
  <ogc:PropertyName>area_km2</ogc:PropertyName>
</ogc:Div>

Ensuite la carte de densité de population en 2000, avec bien sûr la même échelle :


Cette carte est généré à partir de l'expression suivante :

<ogc:Div>
  <ogc:PropertyName>Pop2000</ogc:PropertyName>
  <ogc:PropertyName>area_km2</ogc:PropertyName>
</ogc:Div>

En comparant ces 2 cartes, on peut noter pour certain district si il y a eu croissance ou non de la population, mais pas pour tous. Pour ce faire nous avons besoin de comparer la population de 1991 et de 2000. Nous obtenons la carte suivante :


Avec les règles suivantes :

<ruledisplay>
  <conditionsdisplay>
    <ogc:PropertyIsGreaterThan>
      <ogc:PropertyName>Pop91</ogc:PropertyName>
      <ogc:PropertyName>Pop2000</ogc:PropertyName>
    </ogc:PropertyIsGreaterThan>
  </conditionsdisplay>
  <actionsdisplay>
    <sld:cssParameter name="fill">#00FF00</sld:cssParameter>
  </actionsdisplay>
</ruledisplay>
<ruledisplay>
  <conditionsdisplay>
    <ogc:PropertyIsGreaterThan>
      <ogc:PropertyName>Pop2000</ogc:PropertyName>
      <ogc:PropertyName>Pop91</ogc:PropertyName>
    </ogc:PropertyIsGreaterThan>
  </conditionsdisplay>
  <actionsdisplay>
    <sld:cssParameter name="fill">#FF0000</sld:cssParameter>
  </actionsdisplay>
</ruledisplay>

Enfin nous pouvons réalisé une carte du taux de croissance de chaques districts :


Grâce à l'expression suivante :

<ogc:Mul>
  <ogc:Div>
    <ogc:Sub>
      <ogc:PropertyName>Pop2000</ogc:PropertyName>
      <ogc:PropertyName>Pop91</ogc:PropertyName>
    </ogc:Sub>
    <ogc:PropertyName>Pop91</ogc:PropertyName>
  </ogc:Div>
  <ogc:Literal>100</ogc:Literal>
</ogc:Mul>

L'intérêt de tout cela est de pouvoir générer de nouvelle propriété, sans avoir à modifier la source, et de pouvoir les échangers et les réutiliser dans d'autres systèmes.