31 janvier 2008

Géotraitements - N°5 : Espace de travail temporaire

Nous continuons nos articles sur les géotraitements. Aujourd'hui, nous allons continuer à rendre plus générique (donc encore plus portable) notre modèle de géotraitement en utilisant la notion d'espace de travail temporaire.

Qu'est ce qu'un espace de travail temporaire ?

L'espace de travail temporaire (en anglais Scratch Workspace) est une variable d'environnement qui permet d'indiquer un répertoire ou une géodatabase dans laquelle seront stockés les résultats intermédiaires ou les résultats en sortie de votre modèle. Dans tous les chemins d'accès que vous aurez à spécifier dans votre modèle, vous pourrez l'utiliser via la variable %ScratchWorkspace%. Ainsi, si votre espace de travail temporaire est défini sur c:\temp alors le chemin d'accès %ScratchWorkspace%\population.dbf représentera en réalité c:\temp\population.dbf lors de l'exécution du modèle.


L'avantage de l'espace de travail temporaire est de rendre votre modèle indépendant de tout chemin d'accès propre à l'organisation d'une machine. Ainsi le modèle de géotraitement devient plus portable d'une machine à une autre. Il sera particulièrement recommandé d'utiliser un espace temporaire lors de la publication d'un modèle en tant que service Web via ArcGIS Server.

Définir un espace de travail temporaire


L'espace de travail temporaire peut se définir pour l'ensemble des géotraitements (outils, modèles, scripts et commandes en ligne) ou pour un modèle en particulier.

Dans le premier cas, il s'agira de définir la valeur de l'espace de travail temporaire dans les options de géotraitement d'ArcToolBox. Pour cela, dans le menu contextuel de la racine de la ToolBox, vous exécuterez la commande Environnement.


Dans le deuxième cas, il s'agira de définir la valeur de l'espace de travail temporaire dans les propriétés du modèle. Pour cela, dans votre modèle, vous exécuterez la commande du menu Fichier > Propriété du modèle puis dans l'onglet Environnement.


Evolution de notre modèle

Nous pouvons donc maintenant modifier notre modèle pour faire en sorte que tous les chemins d'accès soient définis à partir d'un espace de travail temporaire.


Notre modèle ressemble désormais à ceci :




A bientôt pour la suite …

28 janvier 2008

Cartographier des courbes de niveau


Je répondais la semaine dernière à des questions concernant la cartographie des courbes de niveau dans ArcGIS. Ce type de cartographie s'avère souvent plus complexe qu'on peut le penser. Parmi les points les plus problématiques, on pourra citer les suivants :

1) Comment représenter de manière différente les courbes maîtresses et les courbes secondaires ?
2) Comment répéter mon annotation plusieurs fois si la courbe est très longue ?
3) Comment masquer la courbe de niveau pour éviter qu'elles chevauchent les annotations tout en conservant la visibilité du fond de carte ?

En suivant la démarche que je vous propose dans cet article, vous devriez pouvoir traiter correctement chacun de ces points.

Point n°1

Tout d'abord, pour représenter les courbes maîtresses et les courbes secondaires de manière différentes vous pouvez utiliser l'outil suivant disponible sur le site du support d'ESRI France. L'outil vous permettra de disposer d'un nouveau type de symbologie adapté cette représentation.



Point n°2

Pour annoter les courbes de niveau en répétant plusieurs fois le texte sur la courbe, vous pouvez utiliser l'outil suivant disponible sur le site du support d'ESRI France. En option, cet outil permet de créer des annotations liées aux courbes de niveau. Ceci permet par la suite d'éditer manuellement les annotations en les faisant glisser le long de la courbe.


Point n°3

Une fois les annotations créées, vous allez utiliser les fonctions de masquage d'ArcGIS pour qu'au niveau des annotations les courbes ne soient plus affichées. Cette manipulation ne modifiera en rien la géométrie des courbes de niveau dans la base de données.

Vous utiliserez tout d'abord la commande d'ArcToolBox ci-dessous permettant de créer des masques selon l'emprise des entités d'une couche. Nous utiliserons dans notre cas les emprises des annotations pour construire nos masques.


Cette commande n'étant disponible qu'avec la licence ArcInfo, vous pourrez utiliser une solution alternative en créant manuellement la classe d'entités des masques. Vous l'ajouterez ensuite avec la couche des annotations dans ArcMap puis vous exécuterez la macro VBA suivante après l'avoir adaptée aux noms des couches de votre carte.

La couche des masques doit alors ressembler à ceci :


Il ne reste plus qu'à définir la couche de masque et la couche masquée. Pour cela, vous afficherez les "options avancées de dessins" de votre carte.


Indiquer ensuite la couche de masquage et la (ou les) couche(s) masquée(s).


Votre carte doit alors s'afficher comme celle-ci.



Conclusion

Notre cartographie est maintenant terminée. Les puristes diront (et ils auront raison) que l'idéal serait de pouvoir gérer l'alignement des annotations entre les courbes de niveau. Leur vœu sera exaucé en version 9.3 qui intégrera dans le moteur d'étiquetage de Maplex des options spécifiques pour traiter les courbes de niveau. En attendant, la barre d'outils d'édition des annotations fournis des outils astucieux pour déplacer rapidement certains textes.

25 janvier 2008

Géotraitements - N°4 : Utiliser des séries de valeurs

Nous continuons notre série d'articles sur les géotraitements. Nous avions vu, lors de l'épisode précédent, comment itérer une partie d'un modèle de géotraitement en utilisant des listes. Aujourd'hui, nous allons voir comment itérer l'ensemble d'un modèle sur plusieurs jeux de données en utilisant des séries.

Qu'est ce qu'une série ?

Dans un modèle de géotraitement, un paramètre peut être constitué d'une seule valeur, d'une liste de valeurs ou d'une série de valeurs. Lorsqu'un paramètre contient une série de valeurs, le modèle de géotraitement est exécuté pour chaque valeur de la série. A la différence des listes, les séries permettent d'exécuter la totalité du modèle pour chaque valeur de la série. Pour les listes, seuls les outils situés en aval du paramètre sont exécutés pour chaque valeur de la liste. Ainsi, une seule série peut être utilisée pour définir les itérations d'un modèle mais un modèle peut contenir plusieurs séries.


Dans ce modèle, les outils1, 2 et 3 seront exécutés autant de fois qu'il y aura de valeurs dans le "Paramètre Série".


Définir un paramètre avec une série de valeurs

Pour ajouter une série de valeurs à un paramètre, il suffit de procéder comme ceci :

1) Afficher les propriétés de ce paramètre en cliquant sur la commande "Propriétés" située dans le menu contextuel du paramètre

2) Sélectionner l'onglet Générale puis cocher l'option "Série de valeurs"


3) Cliquer sur OK pour valider vos modifications.


4) Pour indiquer quelle série utiliser pour les itérations de votre modèle, ouvrir les propriétés du modèle (dans le menu Fichier > Propriétés du modèle).

5) Se placer sur l'onglet Itération puis sélection l'option adéquate comme indiqué ci-dessous.


6) Cliquer sur le bouton OK pour valider vos modifications.


Vous pouvez maintenant définir la série de valeurs à utiliser pour les itérations du modèle. Pour définir les noms des classes d'entités en sortie, vous pouvez un mécanisme de numérotation pour identifier les itérations issues des listes ou des séries. Pour cela vous utiliserez, dans la dénomination des classes d'entités en sortie, %i% pour les listes et %n% pour les séries.



Evolution de notre modèle

Nous pouvons donc maintenant modifier notre modèle pour faire en sorte de découper plusieurs sources de données selon plusieurs couches de découpage, en une seule exécution du modèle. Par exemple, on pourra découper toutes les données cadastrales (les parcelles, les bâtiments et les sections) selon deux couches de découpage (le secteur Est et le secteur Ouest).



Le résultat du géotraitement sera alors constitué de 6 (2x3) couches découpées. Les sources de données résultantes auront le suffixe 0 pour le secteur Est et 1 pour le secteur Ouest.


Notre modèle ressemble désormais à ceci :



A bientôt pour la suite …

23 janvier 2008

Réaliser des anamorphoses avec ArcGIS

Nous n'avions pas parlé de cartographie depuis quelques temps dans arcOrama. Je me rattrape donc aujourd'hui en vous présentant un nouvel outil permettant de créer des cartes en anamorphoses (ou cartogrammes) dans ArcGIS.

Réalisé en ArcObjects par des développeurs d'ESRI cet outil de géotraitement est disponible depuis quelques semaines en version anglaise sur ArcScript. J'ai trouvé l'outil assez intéressant et j'ai décidé d'en faire une version française que vous trouverez sur le site du support d'ESRI France.
L'outil de création d'anamorphose
Sans rentrer trop dans le détail (vous lirez la documentation pour cela), l'outil permet de déformer une couche de polygones) sur la base d'un attribut rapporté, lors du traitement, à la superficie des entités. Pendant le traitement, il est possible de déformer d'autres couches (point, lignes ou polygones) afin de déformer l'ensemble des couches d'une carte. L'outil ne modifie pas la classe d'entités d'origine et autorise l'utilisation d'une jointure sur la classe d'entités d'origine pour l'obtention des valeurs. La méthode de déformation utilisée est basée sur l'algorithme de diffusion Michael T. Gastner et M. E. J. Newman. Cet algorithme de diffusion se base sur le processus physique de la diffusion d'un gaz. Une grille régulière est posée sur la carte non-déformée, puis pour chaque point de la grille, la densité actuelle est calculée. À l'aide du formalisme physique sur la diffusion d'un gaz, une solution analytique permet de calculer la déformation de la grille. A la fin, il suffit d'appliquer la grille déformée aux couches à transformer. L'algorithme présente l'avantage de préserver la topologie du maillage spatial initial et notamment l'adjacence entre les polygones de la classe d'entités d'origine.
En s'intégrant complètement à l'environnement de géotraitement d'ArcGIS, il peut être ajouté à un modèle, utilisé dans un script Python ou encore exécuté en batch sur plusieurs jeux de données. C'est cette dernière méthode qui a été utilisée pour créer ces différentes cartes sur l'évolution de la population en Ile de France. L'animation a ensuite été générée avec les outils d'animation standard d'ArcGIS Desktop.

20 janvier 2008

Géotraitements - N°3 : Utiliser des listes de valeurs

Nous continuons notre série d'articles sur les géotraitements en détaillant, aujourd'hui, comment répéter une partie d'un modèle sur plusieurs jeux de données. Pour cela, il est possible d'utiliser des listes.

Qu'est ce qu'une liste ?

Dans un modèle de géotraitement, un paramètre peut être constitué d'une seule valeur, d'une liste de valeurs ou d'une série de valeurs. Lorsqu'un paramètre contient une liste de valeurs, les outils situés en aval de ce paramètre sont exécutés pour chacune des valeurs.


Dans ce modèle, les outils 2 et 3 seront exécutés autant de fois qu'il y aura de valeur dans le "Paramètre Liste". En revanche, l'outil 1 ne sera exécuté qu'une seule fois.


Définir un paramètre avec une liste de valeur

Pour ajouter une liste de valeurs à un paramètre, il suffit de procéder comme ceci :

1) Afficher les propriétés de ce paramètre en cliquant sur la commande "Propriétés" située dans le menu contextuel du paramètre

2) Sélectionner l'onglet Générale puis cocher l'option "Liste de valeurs"


3) Cliquer sur OK pour valider vos modifications

Vous constatez que tous les éléments du modèle résultants de ce paramètres sont affectés et deviennent automatiquement des listes de valeurs.


Evolution de notre modèle

Nous pouvons donc maintenant modifier notre modèle pour faire en sorte de découper plusieurs sources de données, en une seule exécution du modèle. Par exemple, on pourra découper en une seule fois, toutes les données cadastrales (les parcelles, les batiments et les sections).


Le résultat du géotraitement sera alors constitué des 3 couches découpées.



Notre modèle ressemble désormais à ceci :



A bientôt pour la suite …

17 janvier 2008

La version française d'ArcGIS Explorer est disponible



Nous évoquions dans arcOrama il y a quelques semaines, la disponibilité de la nouvelle version d'ArcGIS Explorer, l'explorateur de cartes et de services Web gratuit d'ESRI. Comme promis, ESRI France vient de mettre en ligne le supplément français de la version "build 440". Vous le trouverez sur le site du support d'ESRI France à l'adresse suivante.


16 janvier 2008

Gagner plus avec ArcGIS Server !

A l'occasion du prochain Developer Summit d'ESRI, un grand concours de développement autour d'ArcGIS Server a été lancé il y a quelques jours : le "2008 ArcGIS Server Code Challenge". Ce concours a ceci de particulier qu'il est particulièrement bien doté : 15000$ pour le premier prix, 7500$ pour le deuxième et 2500$ pour le troisième prix (l'année dernière , le premier prix était une XBox !). Pour participer, il faut charger son développement sur ArcScripts et s'inscrire au concours avant le 29 février. Ce sont des utilisateurs/développeurs qui voteront pour désigner les vainqueurs et le résultat des courses sera révélé lors du Developer Summit fin mars à Palm Springs.

Les règles du jeu sont .

Avis aux amateurs !

12 janvier 2008

Géotraitements - N°2 : Changement de types

Le modèle de géotraitement que nous avons commencé lors du précédent épisode, ajoute à la couche découpée un champ REFERENCE dont la valeur est calculée en fonction de la chaîne saisie par l'utilisateur. Cette référence est le nom du secteur utilisé pour effectuer le découpage.

L'idée est maintenant d'améliorer ceci en évitant à l'utilisateur de saisir le nom du secteur en allant de chercher directement à partir du nom de la source de données de la couche de découpage. Ainsi, si ma couche de découpage est stockée dans "c:\sig\secteur_nord.shp" le nom du secteur sera automatique fixée à "secteur_nord" ce qui rendra mon modèle encore plus générique.

Changer le type d'un paramètre

Le problème qui se pose alors est de pouvoir récupérer le paramètre en entrée qui est de type "Feature Class" et de le convertir en une valeur de type "Expression" (paramètre entrant de l'outil "Calculer un champ".


Pour résoudre ce genre de problème, le plus simple est d'écrire un script Python (VBScript, Javascript ou encore Perl) qui permettra de réaliser la transformation puis d'intégrer ce script en tant qu'outil dans notre modèle.

Dans notre cas le script Python pourra s'écrire de la manière suivante :


Vous remarquerez l'utilisation des méthodes GetParameterAsText() et SetParameterAsText() qui permettent de manipuler les différents types de variables comme des chaînes de caractères ce qui simplifie largement les choses.

Le script est disponible ici.


Ajouter un script Python dans un modèle de géotraitement

Pour ajouter un script dans un modèle, il faut suivre les étapes suivantes :

1) Ajouter le script dans une boîte à outils



2) Spécifier le nom (nom interne) et l'étiquette (nom externe) de l'outil


3) Définir le chemin d'accès au script


4) Définir le nom "Classe d'entités" et le type du paramètre en entrée "Feature Class"


5) Définir le nom "Expression" et le type du paramètre en sortie "String". Vous préciserez également qu'il est de type "Derived" c'est à dire non définie par l'utilisateur ainsi qu'une valeur par défaut (ici "valeur") pour pouvoir valider le modèle durant la phase de conception.


6) Cliquer enfin sur le bouton "Terminer".


L'outil est maintenant créé.


Après en avoir fait éventuellement une sauvegarde, éditez maintenant votre modèle puis supprimez le paramètre "Secteur". Faites ensuite glisser dans votre modèle en le nouvel outil en mettant en relation avec le paramètre "Couche de découpage" d'une part et le paramètre "Expression" de l'outil "Calculer un champ".

Votre modèle doit désormais ressembler à ceci :


Lors de son exécution, seulement deux informations sont maintenant demandées et le nom du secteur est automatiquement calculé.


A bientôt pour la suite …

09 janvier 2008

Géotraitements - N°1 : Variables et paramètres

Comme annoncé il y a quelques jours, nous commençons donc une série d'articles illustrant quelques points clés dans la création d'un modèle géotraitement. Je vous parle aujourd'hui de la notion de variables et de paramètres.

Le modèle de géotraitement ci-dessous est un modèle (volontairement très simple) qui va me permettre d'expliquer comment passer d'un modèle figé à un modèle paramétrable en utilisant des variables et des paramètres.


Que fait ce modèle ?

Dans un premier temps, le géotraitement découpe une couche (couche à découper) selon les contours d'une autre couche (couche de découpage).

Dans un deuxième temps, le géotraitement ajoute un nouveau champ (REFERENCE) à la couche découpée. Enfin le géotraitement, calcul les valeurs de ce champ REFERENCE en affectant le nom du secteur de découpage "Secteur Est" à toutes les entités de la couche.
Le modèle fonctionne correctement sur le jeu de données initial avec lequel j'ai conçu mon modèle. Cependant, mon modèle à un inconvénient notable. Que ce passe t'il si je veux changer la source de données pour la couche à découper, la source de données pour la couche de découpage ou encore le nom de la référence de mon secteur.

Utiliser des paramètres

Pour qu'un utilisateur puisse choisir lui même les éléments en entrée ou en sortie d'un modèle, ces derniers doivent tout simplement être définis comme étant des paramètres du modèle. Pour cela, il suffit de faire un clic-droit sur l'élément et de cocher la propriété "Paramètre du modèle". De cette manière, on pourra rendre paramétrable les sources de données de la couche à découper et de la couche de découpage.


On notera que le moteur de Géotraitement distingue automatiquement les paramètres entrant et sortant d'un modèle, ce n'est pas l'auteur qui le spécifie.

Utiliser des variables

Les modèles de Géotraitement permettent de travailler avec des variables. Ces variables permettent d'indiquer en tout point d'un modèle un nom de substitution pour une valeur (chaine, nombre, classe d'entités, distance, unité, …) qui sera renseignée par l'utilisateur lors de l'exécution du modèle.

Pour insérer une variable dans un modèle, il suffit de faire un clic-droit dans une zone vide du modèle et d'exécuter la commande "Créer une variable", de préciser son type (ici: Chaîne) puis de donner un nom à la variable (en la renommant). Pour pouvoir proposer cette variable à l'utilisateur, il faut ensuite indiquer que c'est un paramètre du modèle.


Ainsi, dans mon modèle je vais pouvoir remplacer la chaine de caractère "Secteur Est" de mon expression de calcul par une variable que l'utilisateur pourra définir lors de l'exécution du modèle. Une variable porte un nom (ici : Secteur) et s'utilise avec la syntaxe %nom_de_la_variable%, ainsi mon expression de calcul devient : "%Secteur%"


Notre modèle ressemble maintenant à ceci :


Il est désormais paramétrable et peut s'utiliser sur différents jeux de données. Ci-dessous l'interface du modèle lors de son exécution :



A bientôt pour la suite ...