Le blog francophone consacré
aux technologies Esri

Passer ses fonds de cartes en niveaux de gris - 2/4

Comme je l'ai expliqué dans mon article d'introduction, il est possible d'afficher dans une application web, des fonds de cartes ArcGIS (Services ArcGIS Server tuilés) en les transformant à la volée en nuances de gris. La solution consiste à traiter, coté client, chacune des tuiles renvoyées par le serveur en modifiant le rendu des pixels des images. Qu'il s'agisse de Flex, Silverlight ou JavaScript, chaque environnement de développement permet d'implémenter ce type de mécanisme. Commençons aujourd'hui par la plateforme Flex avec l'API ArcGIS for Flex.


Avec Flex 4.5, vous disposez d'une classe flash.filters.ColorMatrixFilter qui vous permet d’appliquer une transformation de matrice 4 x 5 à un ensemble de valeurs RVBA (rouge,vert,bleu,alpha) en entrée pour obtenir un résultat intégrant un nouvel ensemble de valeurs de couleur RVBA. Cette classe permet d’effectuer des modifications de saturation, de teinte, et de luminance (l’alpha) pour modifier à la volée les couleurs des pixels d'une image (ou d'autres contrôle Flex).

Il est donc relativement simple, avec l'API ArcGIS for Flex d'appliquer à chaque tuile d'un cache ArcGIS Server ce type de transformation. Pour cela, nous allons étendre la classe ArcGISTiledMapServiceLayer qui prend en charge l'affichage des couches issues de services tuilés ArcGIS. Esri a prévu dans la conception de la classe ArcGISTiledMapServiceLayer la possibilité d'intégrer des filtres pour modifier le rendu.



Dans le constructeur de cette nouvelle classe (nommée ici TransformedBasemap), nous ajoutons donc à la liste des filtres (variable Filters) notre filtre de type ColorMatrixFilter. Ce filtre effectuera le changement de rendu des pixels de chaque image.

Une fois cette classe construire, il vous suffira de l'utiliser dans votre page MXML à la place de la classe ArcGISTiledMapServiceLayer.


Vous trouverez ci-dessous deux illustrations d'une même application Flex basée sur le fond de carte FranceRaster et Esri World Street Map. Le code source de cette application Flex est disponible ici.



Vous constaterez l'utilisation de 3 variables r, g et b qui permettent de donner un poids plus ou moins important, dans la matrice de transformation, aux 3 composantes rouge, vert et bleu de chaque pixel. Ceci permet d'adapter les nuances de gris selon vos besoins. Vous pouvez tout à fait modifier ces coefficients et tester le résultat obtenu.

Dans le prochain article, j'expliquerais comment réaliser le même type de cartographie avec Silverlight (ou WPF).


Partager cet article:

Rejoindre la discussion

    Les commentaires à propos de cet article:

2 comments :

Anonyme a dit…

Merci pour ces pages consacrées aux fonds de carte en niveaux de gris.
Serait-il possible d'obtenir la démarche à suivre dans les fichiers du ArcGIS Viewer for Flex ?
Bien cordialement.

Sammy Garcia a dit…

Pour la mise en place dans le Flex Viewer 2.4:

1)Créez la classe d’extension TransformedBasemap de ArcGISTiledMapServiceLayer dans /src/com.com.esri.viewer –clique-droit sur com.esri.viewer > New > ActionScript Class –nommez-la TransformedBasemap.

2)Implémentez-la avec le code du filtre fournit dans ArcOrama en effectuant un léger changement au niveau de la définition du package ligne 1 :
Changez com.esri.custom en com.esri.viewer selon l’emplacement choisit précédemment.

3)Ouvrez ensuite le /src/com.com.esri.viewer/managers/MapManager.mxml, placez vous au niveau des import et ajoutez "import com.esri.viewer.TransformedBasemap;" pour faire le lien avec la classe d’extension précédemment créée.

4)Toujours dans le MapManager.mxml, placez-vous maintenant au niveau de la fonction addLayerToMap(), descendez jusqu’au Switch Case (vers les lignes 550) de la fonction.
Le dispatch des types de couche à afficher dans l’application selon le contenu du config.xml est ici effectué. Cela s’ordonne selon le paramètre Type renseigné dans config.xml.
Ajoutez un nouveau CASE à l’image du « tiled » (simple copier/coller), il s’agit juste de changer la déclaration de la variable tiledLayer :
-Changez le nom de cette variable dans tout le CASE en tiledLayerTransformed pour qu’il n’y ait pas d’ambigüité avec celle du CASE tiled originel,
-Changez le type d’objet et définissez la non pas comme ArcGISTiledMapServiceLayer mais comme TransformedBasemap.

5)Enfin, vous pouvez paramétrer votre fichier config.xml en utilisant un nouveau type de base map : « transformed ». Cela permettra donc de visualiser ces dernières en nuance de gris.