Aller au contenu | Aller au menu | Aller à la recherche

OGC Filter integration in MozMapToolkit

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.