VBA Arcgis
VBA Arcgis
VBA Arcgis
ISA
Rseau
du 12 au 17 septembre 2005
Messigny et Vantoux (Cte d'Or)
http://www.univ-tours.fr/isa
UMS 2913
ArcInfo Workstation :
Les scripts sont dvelopps en AML (Arc Macro Langage)
Linterface de dveloppement est le kit ODE (Open Development Environnement)
qui permet de mettre disposition des bibliothques dobjets (DLL, activeX). Le langage de
dveloppement est le visual basic ou le C++.
Arcgis Desktop :
Les scripts sont dvelopps en VBA (Visual Basic for Application).
Les dveloppements externes sont raliss partir de Visual basic qui permet
lutilisation de composant active X (DLL ou OCX).
Dans les deux cas on va utiliser la bibliothque dobjets ArcObject, mais avec VBA mme si la personnalisation
de lapplication peut-tre trs pousse, le code est dit interprt donc beaucoup moins rapide que celui gnr
par Visual basic qui est dit compil et qui permet de crer des applications indpendantes.
Remarque : lutilisation de bibliothque ArcObject pour la cration de scripts et dapplications autonomes
ncessite bien videmment de possder une licence Arcgis (Arcview, Arceditor ou Arcinfo. Il est aussi ncessaire
de possder ces licences pour utiliser ces applications
Dans cet atelier nous nous limiterons lenvironnement ArcGis desktop et lutilisation de son module de
programmation Visual Basic Editor (VBE).
I. Gnralits :
A.Dfinitions :
1.Notion dobjet :
Visual basic est un langage dit orient objet .
Lobjet est donc llment de base de ce langage. Il peut sagir dun contrle, dun formulaire, dune mise en
page, etc.
Chacun dentre eux se caractrise par des proprits, des mthodes et des vnements.
Une proprit est un attribut de lobjet qui dfinit une de ses caractristiques (le nom, la couleur, la position, la
taille, etc.)
Remarque : Selon leur nature certaines proprits ne pourront tre dfinies que pendant la phase de conception,
dautres pendant la phase de conception et dexcution, dautres encore ne pourront tre que lues. Dune
manire gnrale elles sont toutes lisibles.
Une mthode est une action quun objet peut raliser, par exemple Add associe un contrle de type listbox
va permettre dajouter un lment la liste quil prsente.
Les vnements sont des actions que reconnat lobjet. Un bouton dtecte le clic de la souris
2.Notion de classe :
Tous les objets qui possdent les mmes proprits et les mmes mthodes, sont des instances dune
mme entit quon appelle classe. On parle de classe dobjets.
les fonctions : Il sagit de procdures routinires qui peuvent renvoyer une valeur.
Private Sub conversion_m_hectare()
End Sub
Les modules :
Ces procdures ou fonctions prsentes sont organises en modules selon leur rle et leur relation au sein du
document Arcgis.
Il y a 3 catgories de module :
- Le module de feuille : Chaque formulaire prsent dans le document Arcgis possde un
module de ce type. Ce module regroupe toutes les procdures vnementielles associes
au formulaire ainsi que celles codant pour les contrles contenus par ce formulaire. Il
contient en plus les donnes associes aux contrles.
- Le module standard : Il runit toutes les procdures et fonctions qui ne sont pas
rattaches un formulaire ou un contrle. Il ne contient que du code et pas de donne car
pas de contrle..
Figure 1.
Lditeur visual basic reprsent figure 1/ci-dessus est accessible dans ArcMap partir du menu
Outils/Macros/Editeurs_visual_basic.
Il est compos de 7 fentres principales :
- Lexplorateur de projet (1) : Elle numre les diffrents modules qui sont contenus dans
le document Arcgis et qui sont autant de fichiers qui constituent le projet.
- La fentre de proprit (2) : Elle numre les proprits de lobjet slectionn, dans le
cas prsent il sagit du formulaire.
- La fentre de code (3) : Elle permet de taper le texte du code du projet. Il en existe une
pour chaque module.
- La fentre de conception de feuille (4) : Elle permet la ralisation de linterface
graphique de chaque formulaire. Il y en a une par formulaire.
- La fentre explorateur dobjet (5) : Elle permet de parcourir les objets et leur mthode
disponible pour notre projet et offre une aide prcieuse pour la rdaction du code.
- La boite outil (6) : Elle possde tous les contrles ncessaires la conception dun
formulaire.
- La fentre dexcution (7) : Elle permet de tester les lignes de code tapes. Elle constitue
avec les fentres variables locales et espions des outils trs utiles pour le dbogage de
lapplication (ces 2 fentres ne sont pas prsentes sur la figure 1).
Remarque : Dans le menu outils/options de lditeur de visual basic il est possible de personnaliser lditeur en y
ajoutant des fonctionnalits daide la rdaction du code, telles que la saisie semi-automatique ou lobligation de
dclaration des variables.
Le niveau modle de base qui est un document qui possde des mises en pages
prdfinies et qui permet de reproduire de nouvelles cartes rapidement. Tous les nouveaux
documents qui utiliseront ce modle se verront affecter ses modifications. Ceci se fait en
utilisant le menu fichier/enregistrer sous et en choisissant comme type de fichier
ArcMap template . Ils ont comme extension .mxt .
Le niveau modle normal, modle spcial qui est automatiquement charg louverture
dArcMap. Ceci se fait en utilisant le menu fichier enregistrer sous. Ainsi tous les
documents ArcMap ouverts quel que soit le modle utilis possderont les modifications.
Ils ont comme extension .mxt , la mme que prcdemment car il sagit aussi dun
modle et non pas dun document.
B. Personnalisation du document :
Dans cette partie nous allons voir diffrents types de fichiers pouvant contenir du code en visual basic
et les manires de lincorporer notre application.
De nombreux fichiers de ce type sont en ligne sur le site desrifrance http://support.esrifrance.fr
1. Cration dune barre doutil :
La premire chose faire quand on veut rajouter une fonctionnalit son application est de rflchir lendroit
ou elle va se positionner. Il peut sagir dune barre doutil, dun menu, etc.
Exercice : Cration dune barre doutil
1. Lancer ArcMap
2. Ouvrir un nouveau document vide.
3. Lenregistrer sous en lappelant Ecole_thmatique.
4. Cliquer sur outils/personnaliser.
5. Cliquer sur nouvelle dans longlet barre doutil.
6. Saisir un nom Ma barre doutil moi et choisir de lenregistrer dans le document Ecole
thematique.
7.Positionner la nouvelle barre doutil dans la fentre ArcMap.
Cette barre doutil va servir positionner de nouvelles fonctionnalits dans notre document.
2. Fichiers exe ou dll :
Ces deux types de fichiers sont raliss laide du logiciel visual basic, et ne peuvent en aucun cas tre faits avec
lditeur visual basic de ArcMap. Il sagit de code compil.
Sous
le
rpertoire
Atelier_Vb/fichiers_tlchargs_zipps,
ouvrir
le
fichier outildeflux.zip
2. Le dcompresser sous le rpertoire Atelier_VB/fichiers_dezipps.
3. Dans ArcMap, cliquer sur outils/personnaliser.
4. Slectionner longlet commande et slectionner dans la liste loutil Uicontrols.
5. Cliquer sur ajouter depuis un fichier.
6. Parcourir larborescence et slectionner le fichier outildeflux.dll que vous venez de
dcompresser.
7. Une nouvelle commande apparat dans la bote de dialogue.
8. Slectionner la et glisser la jusque sur la barre de contrle que vous avez cre dans
lexercice prcdent.
9. Enregistrer votre document.
10. Cette nouvelle fonctionnalit est dsormais oprationnelle et fait partie de votre document
Ecole thmatique .
Exercice : Cration dun contrle partir dun fichier . exe .
1.
2.
3.
4.
5.
6.
Sous
le
rpertoire
Atelier_Vb/fichiers_tlchargs_zipps,
ouvrer
le
fichier transformationDAO.zip .
Le dcompresser sous le rpertoire Atelier_VB/fichiers_dzipps.
Cliquer sur le fichier install.
Cliquer sur outils/personnaliser.
Parcourir le menu droulant des barres doutil, trouver la barre doutil gorfrencer
un fichier DAO.
Cocher-la. Elle apparat prte lemploi. Il vous suffit de la positionner dans votre
fentre ArcMap et puis denregistrer votre document.
3. Fichiers.bas.frm et.cls :
Il sagit de fichiers qui peuvent tre gnrs par lditeur visual basic.
Ces 3 types de fichiers correspondent aux 3 types de modules de code dcrits prcdemment. Ils ont t rdigs
et enregistrs dans un de ces 3 modules puis exports.
Exemple : Cration dun contrle partir dun fichier .bas .
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sous
le
rpertoire
Atelier_VB/fichiers_tlchargs_zipps,
ouvrir
le
fichier Dropshadows.zip .
Le dcompresser sous le rpertoire Atelier_VB/fichiers_dzipps.
Dans ArcMap, cliquer sur outils/macros/editeur visuel basic.
Dans la fentre de projet, faire un clique droit sur module et slectionner importer un
fichier.
Parcourir larborescence et slectionner le fichier dropshadows.bas . Dans la
fentre de projet un nouveau module est apparu, il sagit dun module standard
correspondant lextension du fichier import, .bas et portant le mme nom. Si vous
double-cliquer dessus vous verrez apparatre la fentre de code lui correspondant.
Fermer lditeur visual basic.
Cliquer sur outils/personnaliser.
Slectionner longlet commande et faire dfiler la liste des contrles jusqu macro.
Une commande apparat portant le nom du fichier.bas.
Il suffit de la slectionner et de la faire glisser jusqu la barre doutil.
Sauvegarder ensuite votre document ArcMap.
Dans cette partie il va sagir de rdiger son propre code et de lassocier la fentre ArcMap.
Ce code correspondant une srie dinstructions utilise comme une commande unique, est appel aussi une
Macro.
Exercice Rdaction dune macro :
1.
2.
Les cardinalits
Elles existent pour les relations de composition et dassociation uniquement.
- 1 signifie quun objet peut tre en relation avec un et un seul objet.
- 0..1 signifie quun objet peut tre en relation avec zro ou un objet.
- M..N signifie que M Objets peuvent tre en relation avec N objets.
- * ou 0..* signifie quun objet peut tre en relation avec zro ou plusieurs objets
- 1..* signifie quun objet peut tre en relation avec un ou plusieurs objets
Les proprits
-
ou
Il existe un petit utilitaire intitul EOBrowser.exe qui va permettre dexplorer de faon plus prcise quavec
lexplorateur dobjet VBA et avec plusieurs modes de reprsentation diffrents.
Il est situ dans le rpertoire c:\ ArcGIS\DeveloperKit\tools
IV Manipulations dobject :
Raliser un dveloppement dans ArcGis sous visual basic va donc consister
naviguer au sein de cet OMD en passant dune interface lautre afin daccder la classe dobjet recherche, de
linstancier et enfin de travailler sur lobjet souhait.
Variables Globales
Dans ArcObject il existe 2 variables qui sont accessibles tout le temps, sans dclaration ni initialisation et qui
vont servir de cls dentre dans lOMD.
Application qui pointe sur linterface Iapplication de la classe Application.
Thisdocument qui pointe sur linterface Idocument de la Classe Mxdocument. (Document
Arcmap)
Le pointeur tant plac sur un de ces deux objets, il va sagir de le dplacer.
Exercice
1. Ouvrer un nouveau document ArcMap.
2 .Renommer le bloc de donnes.
3. Ouvrer lditeur visual basic.
4. Crer un nouveau module standard.
5. Ouvrer sa fentre de code.
6. Crer une nouvelle procdure intitule recupnomcouches
7. Saisir le code suivant dans cette procdure :
Dim pMxDOc as Imxdocument
Set pMxDOc= thisdocument
Msgbox pMxDoc.focusmap.name
8. Basculer dans le document arcMap.
9. Rajouter un bouton linterface avec comme code la macro recupnomcouche.
10.Executer la macro.
11.Enregistrer le document arcMap en lui donnant un nom.
REMARQUE :
Dans le code prcdent le pointeur est pass de linterface Imxdocument linterface Idocument, toutes
les deux appartenant la classe ImxDocument.
Ceci en plaant le curseur sur une premire interface et ensuite en crant une deuxime variable qui
pointe sur la seconde interface vers laquelle on fait basculer le pointeur laide de linstruction SET
Ceci sappelle une QUERY INTERFACE
Exercice :
1. Dans le mme document ArcMap que celui de lexercice prcdent, rajouter des
couches au bloc de donnes.
2. Basculer dans lditeur visual basic et crer un nouveau module standard avec une
nouvelle procdure intituls listecouches
3.Taper le code suivant :
Dim pMxDoc as Imxdocument
Dim Pmap as Imap
Dim pEnumlayer as IenumLayer
Dim player as Ilayer
Dim lareponse as string
Set pMxDoc = thisdocument
Set pMap =pMxDoc.FocusMap
REMARQUE :
Dans les lignes de codes prcdents les changements dinterface se sont produits en utilisant la capacit
dune classe dimplmenter un objet dune autre classe laide dune mthode quelle possde
Set pMap =pMxDoc.FocusMap
.
10
Exercice
Dans ce dernier exercice nous allons rcapituler tout ce qui a t vu au tout au long de cet atelier. Il va
sagir de raliser un formulaire qui va afficher la liste des cartes prsentes dans un document ArcMap. Ce mme
formulaire, aprs slection dune de ces cartes affichera la liste des couches quelle possde et enfin dans une
3me liste saffichera la liste des champs de la table de la couche slectionne.
1. Ouvrer le document ArcMap, intitul Formulaire situ sous le rpertoire
C:\Atelier_VB\Documents Arcmap.
2. Lancer lditeur Visual Basic.
3. Crer un module de feuille et le nommer listing.
4. Crer 3 contrles de type listbox, que vous nommer respectivement lstmaps,
lstlayers et lstfields. (cf. figure 4)
5. Crer 1 contrle de type bouton de commande, que vous nommer fermer.
6. Renseigner la proprit Caption de ce bouton de commande par Quitter et
par formulaire celle du formulaire.
11
12
Il ne vous reste plus qu tester une dernire fois votre code en relanant le formulaire et faire afficher la liste
des champs dans le 3me listing.
Vous aller maintenant crer une procdure pour raliser louverture de votre formulaire partir de votre
document ArcMap et non depuis lditeur visual basic. Cette nouvelle procdure va tre rdige dans un
module standard du projet que vous allez crer et ensuite vous lassocierez un contrle sur linterface du
document ArcMap.
15. Dans le projet, crer un module standard et le nommer standard .
16. Crer une procdure appeler ouvertureformulaire
17. Saisir le code suivant dans cette nouvelle procdure :
Load Listing
Listing.Show
13
18. Basculer dans Arcmap et rajouter une commande linterface dArcmap avec
cette procdure associe. Tester votre nouvelle commande.
19. Retourner dans lditeur visual basic et partir de la fentre de ^projet exporter
les modules standard et listing dans le rpertoire C:\Atelier_Vb\export.
20. Ouvrer un nouveau document ArcMap. Ouvrer lditeur visual basic et importer
les 2 fichiers listing.frm et standard.bas que vous venez de crer. Excuter le formulaire
listing.
14
15