programmation d`ArcGIS avec VBA

Transcription

programmation d`ArcGIS avec VBA
Initiation à la programmation
d’ArcGIS avec VBA
Hervé BOHBOT
v. 1.9 – décembre 2011
HB – Programmation d’ArcGIS – Support de cours
Hervé BOHBOT
Ingénieur de recherche, SIG et télédétection
Archéologie des Sociétés Méditerranéennes – CNRS UMR 5140
390, avenue de Pérols – 34970 Lattes
 04 67 15 61 35 –  04 67 22 55 15 – [email protected]
1
Sommaire
Introduction
3
1ère partie – Principes
1. Personnalisation de l'interface d'ArcGIS
2. Rappels sur la programmation avec VBA
3. Introduction à ArcObjects
4. Le modèle objet d’ArcGIS
4
8
13
18
2ème partie - Développements thématiques
5. Sources de données (accès, création)
6. Filtres, curseurs et sélections
7. Géométrie et géotraitements
8. Symboles et représentation des données
9. Contrôles outils et événementiels
10. Eléments de mise en page
25
36
42
52
62
69
Annexes
76
2
Introduction
Pourquoi programmer avec ArcGIS ?
 On a souvent besoin d’une fonction non fournie en standard.
L
L’utilisation
utilisation de programmes faits par d’autres
d autres est parfois frustrante.
frustrante
 Pour être autonome.
 Il est valorisant de créer ses propres outils.
De la simple personnalisation de l’interface à la construction d’une nouvelle
application, tout est possible.
Objectifs de ce cours
 Expliquer les principaux concepts de manière pratique.
 Présenter une vue générale de ce qu’il est possible de faire.
 Permettre de comprendre et d’adapter des programmes existants.
 Donner des clés pour s’approprier le logiciel.
 Donner envie de faire ses propres programmes et d’aller plus loin.
5
HB – Programmation d’ArcGIS – Support de cours
3
1. Personnalisation de
l’interface d’ArcGIS
HB – Programmation d’ArcGIS – Support de cours
Sommaire
 La boîte de dialogue « Personnaliser »
 Rappel sur le langage Visual Basic pour Applications
 Notions de programmation objet : objets, propriétés et méthodes
 L'éditeur Visual Basic
8
HB – Programmation d’ArcGIS – Support de cours
4
Personnalisation et développement
L’environnement de développement d’ArcGIS est constitué de plusieurs outils :
 La boîte de dialogue « Personnaliser » (modification de l’interface utilisateur).
 Model builder : interface graphique pour enchaîner des traitements.
 Scripts Python : géotraitements sans interface graphique.
 AddIn : développés avec Visual Studio Express pour .NET, ou Eclipse pour Java.
 L’éditeur VBA pour créer des formulaires, boîtes de dialogue, rédiger du code.
Tout document ArcMap est basé sur un modèle de document : par défaut
normal.mxt ou un modèle personnalisé. La sauvegarde des personnalisations
peut se faire au niveau du :
 Document ArcMap courant (Project *.mxd)
 Modèle général de document (Normal template : normal.mxt)
mxd = document ArcMap – mxt = modèle de document ArcMap (template)
gxt = paramètres et environnement d’ArcCatalog
9
HB – Programmation d’ArcGIS – Support de cours
Boîte de dialogue Personnaliser
Menu Personnaliser / Mode personnalisation
 Gestion des barres d’outils et des boutons de commande (création, suppression).
 Affectation de commandes prédéfinies ou personnalisées à des boutons.
p
de p
programmes
g
complémentaires
p
(p
(plug
g in).
)
 Importation
 Création de raccourcis clavier.
UIControls : contrôles
d’interface utilisateur (UI)
Permet d’importer un
plug in utilisateur.
Par défaut :
personnalisation du
document en cours.
10
HB – Programmation d’ArcGIS – Support de cours
5
Visual Basic pour Applications
 VBA : environnement de développement intégré (EDI) à une application.
 Version simplifiée du langage Visual Basic (Visual Studio VB.net)
 Adopté par de nombreux logiciels : Microsoft Office (Word,
(Word Access
Access, Excel
Excel...),
)
AutoCAD, Statistica, Visio... En connaissant VBA, il « suffit » de se familiariser
avec la bibliothèque d’objets d’ArcGIS pour commencer à programmer.
 Évolution par rapport aux langages propriétaires présents dans les premières
versions d’ArcView et ArcInfo :
Arc Macro Language (ArcInfo)
Avenue (ArcView)
VBA
 Depuis 10 ans, une énorme quantité de scripts disponibles...
 … mais une fin programmée par ESRI (version 11 ?).
PYTHON : langage de script
Editeur Python IDLE fourni avec ArcGIS (fichiers *.py dans \Programmes\ArcGIS\Desktop10.0\arcpy).
11
Éditeur Visual Basic
HB – Programmation d’ArcGIS – Support de cours
Menu Outils / Macros / Editeur Visual Basic
ou Alt-F11 pour lancer VBE
Explorateur
de projet
Propriétés
de la
feuille
Formulaire personnalisé (feuille)
12
Code associé à la feuille
HB – Programmation d’ArcGIS – Support de cours
6
Notions de programmation objet (I)
Méthode de programmation se rapprochant du monde réel :
 composé d’objets : une carte, une voiture...
 possédant des propriétés (ou champs, attributs) : une échelle, une couleur…
 supportant des actions, appelées méthodes (procédures et fonctions) : zoomer,
démarrer...
 répondant à des événements (clic, contact) les affectant.
Les objets sont regroupés en classes (Cartes, Voitures) possédant les mêmes
propriétés, méthodes et événements.
La syntaxe des instructions est de la forme : objet.méthode, objet.propriété
P
Programmation
ti : manipulation
i l ti « d’instances
d’i t
» (exemples)
(
l ) d’élé
d’éléments
t d’
d’une
classe) d’objets. D’où les mots instancier, instanciable, instanciation.
ArcGIS utilise des objets d’interface Windows comme les barres d’outils, les boîtes de
dialogue, les boutons de commande mais aussi des objets spécifiques comme des
couches vectorielles, des tables ou des symboles cartographiques.
13
HB – Programmation d’ArcGIS – Support de cours
Exercice 1
 Découverte de l’éditeur VBA.
 Création d’un formulaire.
 Définitions
f
de propriétés d’objets
’
de l’interface
’
f
utilisateur.
 Création d’une procédure événementielle.
 Ajout d’un bouton de barre d’outils à l’interface d’ArcMap.
14
HB – Programmation d’ArcGIS – Support de cours
7
2. Rappels sur la
programmation en VBA
HB – Programmation d’ArcGIS – Support de cours
Sommaire
 Variables
 Constantes
 Procédures et fonctions
 Opérations courantes
 Tests conditionnels
 Boucles
 Manipulation d’objets
16
HB – Programmation d’ArcGIS – Support de cours
8
Variables
Option Explicit
en tête de module: force la déclaration de toutes les variables.
Types et conventions
de nommage
Déclaration et portée
Type
Préfixe
Description
String
str
Chaîne de caractères
Valeur
Boolean
f
Logique
True ou False
Date
dtm
Date
#31/12/1999#
Byte
byt
Octet
0 à 255
Integer
int
Entier
-32768 à 32767
Long
l
Entier long
± 29
Mot
réservé
Déclaration
Portée
Vie
Dim
Procédure
Procédure
Procédure
Static
Procédure
Procédure
Application
Single
sng
Réel simple
± 10-38 à 1045 ~
Private
Module
Module
Application
Double
dbl
Réel double
± 10-324 à 10308 ~
Public
Module
Projet
Application
Variant
var
Variant
Toutes sortes…
Exemples de déclarations ( initialisation)
Public lCount as Long
Dim strToto as String, strTata as String

Dim strToto, strTata as String
Tableaux (dimension définie ou non lors de la création)
Dim strNoms() as String -> ReDim
Dim intNombres(12) as Integer -> 0 à 12
17
HB – Programmation d’ArcGIS – Support de cours
Constantes
Valeurs numériques ou chaînes de caractères invariantes :
 lisibilité du programme améliorée,
 maintenance facilitée.
Prédéfinies (dites intrinsèques) : leur nom commence par le préfixe vb
 Définition des boîtes de dialogue (MsgBox) : boutons (vbOkOnly, vbYesNo…),
icônes (vbExclamation, vbCritical…), bouton par défaut (vbDefaultButton1…)
 Valeur retournée par MsgBox (vbOk, vbCancel, vbYes…)
 Retour à la ligne : vbCrLf, vbNewLine
Définies par l’utilisateur
 Déclaration au niveau d’un module ou d’une procédure
 Forme générale :
[Public | Private] Const NomConstante [As Type] = expression
Exemples
Const cstPi = 3.14159
Private Const cstCentimetresParPouce as Single = 2.54
18
HB – Programmation d’ArcGIS – Support de cours
9
Procédures et fonctions
Procédure
Série d’instruction ne renvoyant pas de valeur via son nom mais susceptible
d’échanger des informations avec le programme appelant via des paramètres.
Private Sub MaProc(strMessage as String)
MsgBox strMessage
E d S
End
Sub
b
Appel : MaProc "Bonjour"
Procédure évènementielle
Procédure associée à un évènement sur un objet : object_évènement(paramètres)
Private Sub cmdBouton_Click()
‘code exécuté lorsqu’on clique le bouton cmdBouton
End Sub
Appel : automatique lorsque l’évènement se réalise.
Fonction
Série d’instructions renvoyant
y
une valeur via son nom.
Private Function Moitie(dblNum as Double) as Double
Moitie = dblNum / 2
End Function
Appel : dblTest = Moitie(10)
Si la valeur renvoyée n’est pas utilisée, s’utilise comme une procédure (sans parenthèses).
Sortie prématurée de procédure/fonction
: Exit Sub
ou Exit Function
Passage d’arguments par référence (ByRef, défaut) ou par valeur (ByVal)
19
HB – Programmation d’ArcGIS – Support de cours
Quelques opérations courantes
Fonctions de manipulation de chaînes de
caractères
(avec variable strVille = "Montpellier")
Fonctions de manipulation de nombres
Opérations arithmétiques : +, -, *, / Puissance: ^
Pour une valeur numérique n :
 CStr(n) Conversion de n en chaîne de caractères
 Fix(n) Partie entière de n
 Round(n, x) Arrondi de n à x décimales
 Sqr(n) Racine carrée de n
 Abs(n) Valeur absolue de n
 Sin(n), Cos(n), Tan(n), Atn(n)... Fonctions trigo
Transformation d'une chaîne en nombre : Val(chaîne)
Tester une variable IsNumeric(variable)
Convertir une chaîne en majuscules, minuscules :
 UCase(strVille)
 "MONTPELLIER"
 LCase(strVille)
 "montpellier"
Extraire des parties d'une chaîne :
 Right(strVille, 3)
 "ier"
 Left(strVille, 4)
 "Mont"
 Mid(strVille, 3, 4)
 "ntpe"
Calculer la longueur d'une chaîne :
 Len(strVille)
 11
LBound(tabToto) et UBound(tabToto) renvoient les
indices minimum et maximum d'un tableau.
Remplacer une chaîne par une autre :
 Replace(strVille,
Replace(strVille "pel",
"pel" "o")
 "Montolier"
IsDate(uneDate) teste si uneDate peut être
interprêté comme une date.
Tester la présence d'une chaîne dans une autre
(renvoie la position ou 0) :
 InStr(strVille, "p")  5
Opérateur & convertit en chaîne de caractères et concatène les 2 opérandes :
"Montpellier a " & 250000 & " habitants."  "Montpellier a 250000 habitants."
20
HB – Programmation d’ArcGIS – Support de cours
10
Instructions conditionnelles
If… Then… Else…
If condition Then
instructions
‘instructions
[Else
‘autres_instructions]
End If
Select Case
Remplacement de ElseIf si l’expression à
comparer peut prendre plusieurs valeurs.
valeur peut être une valeur discrète (1), une
énumération (2,3), un intervalle (4 To 6), un
test (Is > 6)
21
If condition Then
‘instructions
[ElseIf condition-n Then
‘InstructionsElseIf
InstructionsElseIf
Else
‘InstructionsElse]
End If
Select Case ExpressionTest
Case valeur
‘instructions
Case valeur-n
valeur n
‘instructions-n
Case Else
‘instructions
End Select
HB – Programmation d’ArcGIS – Support de cours
Boucles
For … Next
Répétition d’un bloc d’instructions un certain nombre de fois (selon une variable
incrémentée ou décrémentée à chaque itération).
For i = 2 To 10 Step 2
instructions
Next i
Si omission de Step le pas par défaut est de un.
Do … Loop
Répétition d’un bloc d’instructions tant qu’une condition est remplie (While) ou
jusqu’à ce qu’elle le soit (Until)
Do {While | Until} condition
instructions
Loop
Sortir d'une boucle prématurément (à utiliser avec parcimonie et bon escient)
Exit For ou Exit Do : passage à la première instruction suivant le mot-clé Next ou Loop).
22
HB – Programmation d’ArcGIS – Support de cours
11
Manipulation d’objets
Set pObjet = New nomClasse
Création d’un nouvel objet (ou instance) du type de la classe nomClasse, qui sera
manipulable via la variable (ou pointeur) pObjet avec la notation pObjet.methode
ou pObjet.propriete
Set p2Objet = p1Objet
Affectation de la référence de p1Objet à p2Objet : les 2 pointeurs désignent le
même objet. On obtient ainsi 2 alias sur un même objet, le nouvel alias (p2Objet)
étant souvent plus abrégé que le pointeur préexistant (souvent issu d’une fonction)
p1Objet Is p2Objet
L'expression est vraie si les deux variables pointent vers le même objet.
TypeOf pObjet Is nomClasse
L'
L'expression
i estt vraie
i sii lla variable
i bl pObjet
Obj t supporte
t la
l classe
l
((existante)
i t t )
indiquée par nomClasse.
Nothing
Mot-clé utilisé pour savoir si une variable contient effectivement la référence à un
objet (if pObjet Is Nothing Then) ou pour supprimer la référence à un
objet (Set pObjet = Nothing)
23
HB – Programmation d’ArcGIS – Support de cours
12
3. Introduction à
ArcObjects
HB – Programmation d’ArcGIS – Support de cours
Sommaire
 Présentation des ArcObjects
 Présentation de la norme COM
 Programmation objet (2ème partie) : encapsulation et polymorphisme
 Utilisation des méthodes et propriétés
 Le « changement d'interface »
 Programmation objet (3ème partie) : l'héritage
26
HB – Programmation d’ArcGIS – Support de cours
13
ArcObjects
 ArcGIS est développé à partir de composants
logiciels programmables s’appuyant sur la norme
COM (Component Object Model) développée
par Microsoft.
 création et utilisation indépendante du langage
programmation
de programmation.
ArcInfo
Ex : les ArcObjects sont programmés en C++ et
utilisés dans ce cours en VB pour Application.
ArcEditor
ArcView
ArcGIS Engine
Extensions
Spatial Analyst
Geostatistical Analyst
3D Analyst
y ...
ArcGIS Desktop
ArcGIS Server
27
HB – Programmation d’ArcGIS – Support de cours
Programmation des ArcObjects
Bibliothèques d’objets
(fichiers *.OLB)
L
Langage
d
de programmation
ti
VBA, VB.NET, C#, Java, VC++
Exemple d’utilisation de la classe Point définie
dans la librairie esriGeometry.olb
Dim pPoint As esriGeometry.Ipoint
Set pPoint = New esriGeometry.Point
ou tout simplement...
Dim pPoint As IPoint
Set pPoint = New Point
Menu Outils / Références de l’éditeur VBA
L’ensemble des objets a été décrit en 80 bibliothèques (object libraries). Il faut indiquer à
l’interface de développement qu’il faut utiliser ces références pour que les classes d’objets
correspondantes soient reconnues.
28
HB – Programmation d’ArcGIS – Support de cours
14
Présentation de la norme COM
 COM est une norme de création de classes d’objets.
 Les classes développées selon cette norme peuvent être utilisées par de nombreuses
applications.
 Les
es objets
obje s COM
CO d’une
d u e application
app ca o peuvent
peu e être
ê e utilisés
u sés dans
da s une
u e autre
au e application.
app ca o
 De nombreuses technologies s’appuient sur la norme COM : OLE, OLEDB, ActiveX,
DirectX, DCOM…
Principe
CHIEN
 Les objets COM « communiquent », indépendamment du
IChien
Nom: String
langage qui a servi à les créer, uniquement à l’aide de leurs
« interfaces ».
Aboyer
Grogner
 Une interface regroupe des propriétés et des méthodes.
 Un objet peut avoir une ou plusieurs interfaces.
IAnimal
Couleur: String
 L’utilisation d’interfaces facilite la mise à jour du code.
Manger
 Les interfaces peuvent être rendues visibles ou cachées au
développeur.
Dans la « base de registres » de Windows: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface
29
Programmation Objet
HB – Programmation d’ArcGIS – Support de cours
deuxième partie
Encapsulation
 Les propriétés et méthodes sont implémentées au
sein
i d'
d'une structure non accessible
ibl di
directement.
 Empêche l'accès aux données par un autre moyen
que les services proposés (définis par l’interface).
 Garantit l'intégrité des données contenues dans
l'objet.
Polymorphisme
 Des classes différentes peuvent partager la même
interface
interface.
 L’implémentation des méthodes et propriétés se
fait dans le module de classe et non dans
l’interface.
 Les objets peuvent donc répondre différemment.
30
CHIEN
IChien
Aboyer
IAnimal
Manger
OISEAU
IOiseau
Chanter
IAnimal
Manger
HB – Programmation d’ArcGIS – Support de cours
15
Utilisation des méthodes et des propriétés
1. Déclaration d’une variable qui pointe vers l’interface désirée.
2. Affectation à un objet qui présente cette interface :
- Nouvel objet créé (instancié) avec le mot clé New.
éé par une propriété
iété ou méthode
éth d d’
bj t existant.
i t t
- Obj
Objett créé
d’un objet
- Objet existant déjà pointé par une autre variable.
3. Appel de méthode, définition ou récupération d’une valeur de propriété.
CHIEN
IChien
Aboyer
Objet (« serveur »)
Requête pour un service
Programme (« client »)
31
HB – Programmation d’ArcGIS – Support de cours
Le « changement d’interface » (Query interface)
 Une variable permet d’accéder aux propriétés et méthodes d’une interface
donnée (le type déclaré).
 Pour atteindre des propriétés et méthodes situées sur une autre interface du
même objet
objet, une autre variable est nécessaire pour réaliser ce changement
d’interface (noté CI ou QI).
CHIEN
‘Création d’un nouvel objet «chien»
Dim pChien As IChien
Set pChien = New Chien
pChien.Nom = "Médor" ‘ok
pChien.Manger ‘cause une erreur !
IChien
Aboyer
Grogner
CI
‘Changement d’interface
pAnimal As IAnimal
Dim p
Set pAnimal = pChien
pAnimal.Manger
pChien.Grogner
Nom: String
IAnimal
Couleur: String
Manger
Les variables pChien et pAnimal pointent vers le même objet :
pChien Is pAnimal est Vrai
32
HB – Programmation d’ArcGIS – Support de cours
16
Programmation Objet
troisième partie
Héritage de type
 L'héritage permet de transférer à une classe toutes les
té i ti
d'
t classe.
l
L
l
d
ll
caractéristiques
d'une autre
La classe
dontt elle
hérite est appelée classe mère (ou classe de base, classe
antécédente).
 La classe elle-même est appelée classe fille (ou classe
dérivée, descendante).
 Les interfaces héritées contiennent les propriétés et les
méthodes de la classe mère.
ANIMAL
IAnimal
C
l
St
i
Couleur:
String
Manger
« est un type de »
 Une classe fille peut redéfinir une méthode héritée.
CHIEN
Dim pAnimal As IAnimal
Set pAnimal = New Chien
IChien
Dim strCouleur As String
strCouleur = pAnimal.Couleur
Nom: String
Aboyer
IAnimal
Grogner
Pas de programmation d’héritage avec VBA. Il faut utiliser VB.net, VC++…
33
HB – Programmation d’ArcGIS – Support de cours
Exercice 2
 Utilisation d'interfaces
 Création et implémentation de classes d'objet
 Création
C
d'interfaces
f
34
HB – Programmation d’ArcGIS – Support de cours
17
4. Le modèle objet d’ArcGIS
HB – Programmation d’ArcGIS – Support de cours
Sommaire
 Présentation des diagrammes de modèles objet (ArcObjects OMD).
 Légende et conventions graphiques des diagrammes.
 Les types de classes et leurs relations.
 Lecture et écriture de propriétés.
36
HB – Programmation d’ArcGIS – Support de cours
18
Modèle objet : vue générale
Les classes d’objets sont représentées sur des diagrammes (OMD : Object
Model Diagrams) qui décrivent :
 leurs interfaces, p
propriétés
p
et méthodes,
 les types de relations entre elles (représentation type UML),
 si et comment les objets peuvent être créés.
Les diagrammes d’ArcGIS sont fournis au format PDF
C:\Program Files\ArcGIS\DeveloperKit10.0\Diagrams
 Il existe une centaine de diagrammes (un ou plusieurs par fichier)
 Leurs noms et leur répartition changent selon les versions d’ArcGIS.
 Il faut apprendre à naviguer dedans et à les interpréter :
 Indispensable
I di
bl pour rédiger
édi
d
du code.
d
Ce qui fait beaucoup de propriétés et méthodes...
37
HB – Programmation d’ArcGIS – Support de cours
Aide d’ArcGIS Developer
Aide en ligne : http://help.arcgis.com/en/sdk/10.0/vba_desktop/ao_home.html
Quelques fichiers PDF des modèles objet
Diagrammes
Thème
Diagrammes correspondants
C:\Program Files\ArcGIS\DeveloperKit10.0\Diagrams
ArcCatalog
ArcCatalog, Catalog, CatalogUI...
regroupés dans un fichier AllDesktopOMDs_10.pdf
ArcMap
ArcMap, ArcMapUI, Carto (Map)
38
Symbologie
Sy
g
Display
p y (Sy
(Symbols),
), C
Carto ((Rendering)...
g)
Structures de données
Geodatabase, DataSources...
Géométrie
Geometry...
Couches
Carto (Layers)...
Sorties (impression, export)
Output, OutputUI, Output Extensions...
Mise en page
cartographique
Carto (Map and Page), Map Elements...
Références spatiales
Geometry (Spatial reference)
HB – Programmation d’ArcGIS – Support de cours
19
Les trois sortes de classes et leur relations
Class X in Y
« Passerelle » vers
un autre diagramme
Interface événementielle
Interface connectée à l’extérieur
de la boîte : détaillée (ou pas)
sur un autre diagramme, en bas
de page ou sur un autre objet.
Conventions graphiques
39
HB – Programmation d’ArcGIS – Support de cours
Classe « abstraite » (AbstractClass)
 On ne peut créer (instancier) d’objet de cette classe.
 Symbole : rectangle légèrement grisé.
 Définit des interfaces, propriétés et méthodes
générales dont héritent ses classes filles.
Ex: la classe abstraite Layer (couche) possède de nombreuses
classes filles correspondant aux différents types de couches.
Relation d’héritage de type
« est un type de »
Héritage
d’interface
etc.
Héritage d’interface
Une interface peut hériter directement d’une autre : accès à
ses propriétés et méthodes sans changement d’interface.
40
HB – Programmation d’ArcGIS – Support de cours
20
Classes « concrètes »
Bloc de données
 On peut créer (instancier) un objet de ces classes.
 Sont de deux types suivant la méthode d’instanciation.
*
CoClass (Component Object class)
 Symbole : rectangle 3D grisé.
 Instance de cette classe créée :
- avec le mot-clé New (creatable)
Document ArcMap
Dim pMap as IMap
Set pMap = New Map
- à l’aide d’une propriété ou méthode
d’une autre classe (instantiable)
Dim pMap as IMap
Set pMap = pMxDoc.FocusMap
Class (Regular
Cl
(R
l Class)
Cl
)
 Symbole : rectangle 3D blanc.
 Instanciée uniquement à partir
d’une autre classe.
ligne
« crée un »
Dim pRow as IRow
Set pRow = pTable.CreateRow
Relation d’instanciation
41
HB – Programmation d’ArcGIS – Support de cours
Relations entre classes
MxDocument
Composition
L’objet de la classe "parent " conditionne
l’existence d’objets
j
de la classe "enfant ".
*
*
Layer
Map
Association
Simple relation entre 2 classes indépendantes l’une de l’autre. Une propriété
ou méthode de l’une renvoie un pointeur sur une interface de l’autre.
Ring
*
Polygon
Path
boucle: suite de
segments
t fermée
f
é
Polyline
*
chemin: suite de
segments
t ouverte
t
La cardinalité est indiquée de
part et d’autre des relations de
composition ou d’association
42
(rien)
Un et un seul
0..1
0 ou 1 objet
m..n
m objets reliés à n autres
* ou 0..*
De 0 à plusieurs
1..*
De 1 à plusieurs
HB – Programmation d’ArcGIS – Support de cours
21
Lecture et écriture
des propriétés
Affectation d
d’un
un pointeur
Affectation d’un scalaire
{
Propriétés en lecture seule
partie gauche : lecture
Lecture d’une propriété retournant une valeur
scalaire (Boolean, Long, String ...) :
directement
ec e e
d
Dim lNbLayers As Long
lNbLayers = pMap.LayerCount
partie droite : écriture
Affectation d’une valeur scalaire (String, Boolean...) :
 directement
pMap.IsFramed = False
Lecture d’une propriété retournant un pointeur
sur une interface (ILayer, ISelection ...) :
 utiliser le mot-clé Set)
Dim pLayer as ILayer
Set pLayer = pMap.Layer(0)
Affectation d’un pointeur :
 utiliser le mot-clé Set :
Set pMap.FeatureSelection = pSelection
43
HB – Programmation d’ArcGIS – Support de cours
Exercice 3
 Interprétation d'un modèle objet.
 Ecriture de code à partir de ce modèle
modèle.
44
HB – Programmation d’ArcGIS – Support de cours
22
Points d’entrée dans le modèle objet d’ArcGIS
Deux variables globales sont prédéfinies :
 Application (pointe sur l’interface IApplication de l’objet Application)
 ThisDocument (pointe sur l’interface IDocument de l’objet MxDocument)
ArcMap
Application
Document ArcMap
OMD: ArcMap, ArcMapUI
ThisDocument
Application.Caption = "Mon application"
MsgBox ThisDocument.Title
45
HB – Programmation d’ArcGIS – Support de cours
Explorateur d’objet ESRI
Utilitaire qui n’est plus livré avec la version 10 !
Plusieurs librairies à référencer (menu Files > Object Libraries reference : fichiers esri*.olb dans \ArcGIS\com
 Recherche avancée
 Affichage type diagramme ou
syntaxe VB
 Infobulles
 Visualisation rapide des interfaces
héritées
 Lien vers l’aide complète (clic droit).
46
HB – Programmation d’ArcGIS – Support de cours
23
Exemple : Lire des informations sur une couche
 Propriété SelectedLayer de l’objet MxDocument
Dim
Set
Dim
Set
pMxDoc
pMxDoc
pLayer
pLayer
As IMxDocument
= ThisDocument
As ILayer
= pMxDoc.SelectedLayer
Document ArcMap
Tester si aucune couche n’est sélectionnée : mot-clé Nothing
(If pLayer Is Nothing Then…)
 Couches de l’objet Map (bloc de données) courant
Dim
Set
Dim
Set
Dim
Set
pMxDoc As IMxDocument
pMxDoc = ThisDocument
pMap As IMap
pMap = pMxDoc.FocusMap
pLayer As ILayer
pLayer = pMap.Layer(0)
*
Bloc de données
*
Tester le type de la couche sélectionnée : mot-clé
mot clé TypeOf
(If TypeOf pLayer Is IFeatureLayer Then…)
Function FindLayerByName (pMap as IMap, sName as String) as ILayer
Dim i as Integer
For i = 0 to pMap.LayerCount -1
If pMap.Layer(i).Name = sName Then
Set FindLayerByName = pMap.Layer(i)
End If
Next
End Function
47
HB – Programmation d’ArcGIS – Support de cours
Exercice 4
 Apprentissage des diagrammes ArcObjects.
 Navigation et interprétation du modèle objet
objet.
 Ecriture de code à partir du modèle et de la variable Application.
 Travail avec les blocs de données du document.
 Test du type de couche sélectionnée.
48
HB – Programmation d’ArcGIS – Support de cours
24
5. Les sources de données
(accès, création)
HB – Programmation d’ArcGIS – Support de cours
Sommaire
Accès aux données
 Accès aux blocs de données et aux couches
 Collections et énumérations
 Ajout d’une couche à un bloc de données
 Objets permettant de créer des données
 Création d’un espace de travail (Workspace)
 Accès aux classes d’entités
Création de nouveaux jeux de données (tables, classes d’entités…)
 Champs et collections de champs
 Ajout d’enregistrements
 Mise à jour de valeurs
50
HB – Programmation d’ArcGIS – Support de cours
25
Accès aux blocs de données
 bloc actif (par IMxDocument)
Dim
Set
Dim
Set
pMxDoc As IMxDocument
pMxDoc = ThisDocument
pMap As IMap
pMap = pMxDoc.FocusMap
 tous les blocs (par IMxDocument) : collection
Dim pMaps As IMaps
Set pMaps = pMxDoc.Maps
IMaps
Accès aux couches
 couche sélectionnée (par IMxDocument)
Dim pLayer As ILayer
Set pLayer = pMxDoc.SelectedLayer
 couche particulière (par IMap)
Set pLayer = pMap.Layer(i)
 toutes les couches (par IMap) : énumération
Set pEnumLayer = pMap.Layers
IEnumLayer
51
HB – Programmation d’ArcGIS – Support de cours
Boucler sur les collections et les énumérations
Une collection est ordonnée :
 Eléments référencés par leur position.
 Index commence à 0.
 boucle For…
For Next avec variable compteur
compteur.
Dim
Dim
Set
For
i As Integer
pMaps as IMaps
pMaps = pMxDoc.Maps
i = 0 to pMaps.Count – 1
MsgBox pMaps.Item(i).Name
N t i
Next
chaînage d’interfaces
Une énumération (objet de type IEnumXXX) possède 2 méthodes :
 Next (renvoyer l’élément suivant).
 Reset (se replacer en haut de l’énumération = avant le premier élément).
 boucle Do While ou Do Until… Loop
Début
Dim pEnumLayer as IEnumLayer
Set pEnumLayer = pMap.Layers
‘Se placer sur le premier élément
Dim pLayer as ILayer
Set pLayer = pEnumLayer.Next
pEnumLayer.Reset
Do Until pLayer Is Nothing
MsgBox pLayer.Name
Set pLayer = pEnumLayer.Next
Loop
Nothing
52
HB – Programmation d’ArcGIS – Support de cours
26
Ajouter une nouvelle couche à un bloc de données
Layer est une classe abstraite : propriétés générales de tous les types de couches.
 ILayer : propriétés Name, Visible, MaximumScale, MinimumScale...
 IGeoDataset : propriétés Extent, SpatialReference...
Classes filles (CoClasses) : RasterLayer, FeatureLayer, CADLayer, TINLayer…
‘Référence du bloc de données en cours
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pMap As IMap
Set pMap = pMxDoc.FocusMap
‘Création d’un objet couche vectorielle
Dim pFLayer As ILayer
Set pFLayer = New FeatureLayer
pFLayer.Name = "Toto"
‘Ajout de la couche au bloc de données
pMap.AddLayer
p
p
y
pFLayer
La couche ne contient pas de données, il faut
spécifier une source de données (ici la source
d'une autre couche):
Dim pFClass As IFeatureClass
Set pFClass = pAutreCouche.FeatureClass
pMap.AddLayer pFLayer
53
HB – Programmation d’ArcGIS – Support de cours
Objets permettant d’accéder/créer des données
Extraits des diagrammes DataSourcesFile, DataSourcesGDB, Geodatabase
WorkspaceFactory
IWorkspaceFactory
Workspace
etc.
Types d’espaces
de travail
(Workspaces)
Jeu de données : images,
tables, classe d’entité…
*
Dataset
ShapeFileWorkspaceFactory
(répertoire)
Field
AccessWorkspaceFactory
1..*
ArcInfoWorkspaceFactory
Fields
(géodatabase)
Classes d’entités
(FeatureClass)
Jeu de classes d’entités
(FeatureDataSet)
Row
Table
FeatureDataSet
*
54
FeatureClass
HB – Programmation d’ArcGIS – Support de cours
27
Créer un espace de travail (Workspace)
AccessWorkspaceFactory
IWorkspaceFactory : interface générale pour tous les
types de WorkspaceFactory
Ses méthodes renvoient un objet Workspace
 OpenFromFile : accède à un répertoire du disque ou
une géodatabase personnelle.
 Open : connexion à une base de données ArcSDE,
liaison ODBC…
Dim pWFactory As IWorkspaceFactory
Set pWFactory = New AccessWorkspaceFactory
Dim pWorkspace As IWorkspace
Set pWorkspace = pWFactory.OpenFromFile("C:\Stage\Data\Montpellier.MDB", Application.hWnd)
hWnd (window handle) : identifiant
unique de la fenêtre appelante
ou
Set pWorkspace = pWFactory.Open(pParamConnexion, Application.hWnd)
 Tester l’existence du Workspace
(chemin, nom de fichier…) avec la
méthode IsWorkspace.
De type IPropertySet (collection de couples propriété-valeur),
ensemble des paramètres requis pour la connexion : login, mot de
passe, nom du serveur… Nothing si inapproprié.
55
HB – Programmation d’ArcGIS – Support de cours
Accès aux classes d’entités (FeatureClass)
 Interface IFeatureWorkspace de la classe Workspace.
 Directement (méthode OpenFeatureClass) ou à travers un jeu de classes
d’entités (méthode OpenFeatureDataset).
IWorkspace
p
Dim
Set
Dim
Set
Dim
Set
pFWorkspace
pFWorkspace
pFCCommunes
pFCCommunes
pFDCaptages
pFDCaptages
As IFeatureWorkspace
= pWorkspace 'QI pour IFeatureWorkspace
As IFeatureClass
= pFWorkspace.OpenFeatureClass("communes")
As IFeatureDataset
= pFWorkspace.OpenFeatureDataset("Captages")
Dim
Set
Dim
Set
pFCC As IFeatureClassContainer
pFCC = pFDCaptages 'QI pour IFeatureClassContainer
pFCPtsCaptage As IFeatureClass
pFCPtsCaptage = pFCC.ClassByName("PtsCaptage")
IFeatureDataSet
Propriétés permettent d’accéder à la
classe d’entités de diverses façons
56
HB – Programmation d’ArcGIS – Support de cours
28
Exercice 5
 Parcourir les blocs de données et les couches d’un document.
 Ajouter une couche à un bloc de données.
 Renseigner sa source de données et d’autres
d autres propriétés
propriétés.
57
HB – Programmation d’ArcGIS – Support de cours
Création de nouveaux jeux de données
 Méthodes de l’interface IFeatureWorkspace d’un objet Workspace :
CreateFeatureClass, CreateFeatureDataset, CreateTable...
 Type de données créé dépend du type de Workspace utilisé :
CreateFeatureClass
CreateFeatureDataset
ShapeFileWorkspaceFactory
ShapeFile (3 fichiers)
-
CreateTable
Fichier DBF
AccessWorkspaceFactory
Classe d’entités
Jeu de classes d’entités
Table de géodatabase
ArcInfoWorkspaceFactory
Classe "arc", "polygon",
"point", "node“, “label”…
Couverture
Table Info
CreateTable
• Nom
• Collection de champs
p
• ClsID, ExtClsID (UID de classes COM, pour créer
une classe d’entité personnalisée)  Nothing si
inutilisé (car interface attendue).
• ConfigKeyWord (pour ArcSDE)  "" (chaîne vide
si inutilisé, car String attendu).
CreateFeatureClass = CreateTable + géométrie (ShapeFieldName, esriFeatureType)
Nom du champ de type GeometryDef
(géométrie préalablement définie)
CreateFeatureDataset = Nom + référence spatiale
58
HB – Programmation d’ArcGIS – Support de cours
29
Champ (Field) et collection de champs (Fields)
FeatureClass
 Tables et classes d’entités sont associés à un objet Fields.
 Fields : collection de un ou plusieurs Field (indexés).
 CoClasses (instanciables avec New).
 Interface de lecture des propriétés (IField ou IFields)
T bl
Table
 Interface d’écriture des propriétés (IFieldEdit ou IFieldsEdit)
 attention aux "s"
Création d'une
collection et ajout
d'un champ
Dim pFieldsEdit As IFieldsEdit
Set pFieldsEdit = New Fields
Dim pField_Name As IFieldEdit
Set pField_Name = New Field
With pField_Name
.Name = "Nom"
.Type = esriFieldTypeString
.Length = 50
End With
pFieldsEdit.AddField pField_Name
IFields
IFieldsEdit
Fields
IField
IFieldEdit
Field
1..*
Champ de type OID: compteur donnant un numéro unique à chaque
enregistrement, géré en interne par ArcGIS, appelé le plus souvent
"ObjectId" ou "FID". Obligatoirement un (et un seul) par collection.
Champ de type Geometry :
appelé le plus souvent "Shape"
59
HB – Programmation d’ArcGIS – Support de cours
Exemple : Création d’une table dBase (*.dbf)
‘Déclaration d’un nouvel espace de travail de type ShapeFile
Dim pWSFactory As IWorkspaceFactory
Set pWSFactory = New ShapefileWorkspaceFactory
‘Récupération d’un Workspace
Dim pWorkspace As Iworkspace
Set pWorkspace = pWSFactory.OpenFromFile(“C:\Stage\Data”,
\
\
Application.hWnd)
‘CI pour IFeatureWorkspace
Dim pFWorkspace As IFeatureWorkspace
Set pFWorkspace = pWorkspace
‘Création de la collection de champs
Dim pFieldsEdit As IFieldsEdit
Set pFieldsEdit = New Fields
‘Création des champs
Dim pField_Pays As IFieldEdit
Set pField_Pays = New Field
‘Définition des propriétés des champs
With pField_Pays
.Name = “Pays”
Pays
.Type = esriFieldTypeString
.Length = 50
End With
‘Ajout du champ à la collection
pFieldsEdit.AddField pField_Pays
‘Création de la table
Dim pTable As ITable
Set pTable = pFWorkspace.CreateTable(“MonPays”, pFieldsEdit, Nothing, Nothing, “”)
60
HB – Programmation d’ArcGIS – Support de cours
30
Travailler avec les champs
Avec l'interface IFieldsEdit :
 AddField, ajoute un champ.
 DeleteAllFields, supprime tous les champs.
d index n.
n
 DeleteField (n: Integer) efface le champ d'index
Avec l'interface IFields :
 Fieldcount, renvoie le nombre de champs.
 FindField (nom: String), renvoie l'index du champ nom s'il existe (sinon -1).
 Field (n: Integer), renvoie le IField correspondant à l'index n.
Avec ITable et IFeatureClass
 AddField, FindField, DeleteField sont proposées par héritage.
 Propriété Fields qui renvoie la collection IFields.
Afficher tous les champs un à un :
Si le champ 'Surface' existe, l'affecter
à une variable pSurfaceField :
For i = 0 To pFClass.Fields.FieldCount - 1
MsgBox pFClass.Fields.Field(i).Name
Next i
Dim pSurfaceField As IField
intFNum = pFClass.FindField("Surface")
If intFNum <> -1 Then
Set pSurfaceField = pTable.Fields.Field(intFNum)
End If
61
HB – Programmation d’ArcGIS – Support de cours
Ajouter des enregistrements et des valeurs à une table
Ajout d'un enregistrement (ligne d'une table) :
 CreateFeature sur IFeatureClass renvoie un
objet Feature.
 CreateRow sur ITable renvoie un objet Row
Row.
La ligne possède la même propriété Fields que
sa table d'origine.
La propriété Value (index: Integer) permet
d'accéder en lecture/écriture à la valeur d'une
cellule.
IRow
Row
Feature
Table
FeatureClass
Méthodes de IRow :
 Store : enregistre les modifications apportées sur une ligne (y compris création).
 Delete : supprime une ligne.
Dim pRow as IRow
Set pRow = pTable.CreateRow 'Création
pRow.Value(3) = "Toto"
pRow.Value(pTable.FindField("Age"))= 12
pRow.Store 'Enregistrement de la ligne
Dim pFeature as IFeature
Set pFeature = pFClass.CreateFeature 'Création
pFeature.Value(3) = "Encore Toto"
Set pFeature.Shape = pPolygon
pFeature.Store 'Enregistrement de la ligne
62
HB – Programmation d’ArcGIS – Support de cours
31
Références spatiales et champ Géométrie
La propriété GeometryDef du champ qui porte la géométrie
d'une classe d'entités doit être définie lors de la création de
cette classe.
1.
IFields
IFieldsEdit
Fields
0..1
Dim pSpatialReference as ISpatialReference
'Système inconnu
Set pSpatialReference = New UnknownCoordinateSystem
IGeometryDef
IGeometryDefEdit
'Utiliser un fichier PRJ existant
Dim pSRFactory As ISRFactory
Set pSRFactory = New SpatialReferenceEnvironment
Set pSpatialReference = pSRFactory._
GeometryDef
1. Définir le système de référence
2. Créer l'objet GeometryDef
3. Affecter la géométrie au champ "shape"
CreateESRISpatialReferenceFromPRJFile(strPRJfile)
'Utiliser une projection prédéfinie
Set pSpatialReference = pSRFactory._
CreateGeographicCoordinateSystem(esriSRGeoCS_WGS1984)
C
G
hi C
di
S
(
iS G CS GS1984)
2.
3.
Dim pGeometryDef As IGeometryDefEdit
Set pGeometryDef = New GeometryDef
With pGeometryDef
.GeometryType = esriGeometryPolygon
Set .SpatialReference = pSpatialReference
End With
63
Dim pShapeField as IFieldEdit
Set pShapeField = New Field
With pShapeField
.Name = "Shape"
.Type = esriFieldTypeGeometry
Set .GeometryDef = pGeometryDef
End With
HB – Programmation d’ArcGIS – Support de cours
Création d'un nouveau Workspace
 Méthode Create de IWorkspaceFactory renvoie un objet
WorkspaceName et non un Workspace.
 Les objets Name sont une version 'allégée' de l'objet qu'il
représentent et héritent tous une méthode Open (sur IName)
question
qui permet d'atteindre
d atteindre l'objet
l objet en question.
WorkspaceName
Workspace
'Création d'un nouvel objet WorkspaceFactory de type Geodatabase
Dim pAccessWSFactory As IWorkspaceFactory
Set pAccessWSFactory = New AccessWorkspaceFactory
'Création du WorkspaceName
Dim pWorkspaceName As IWorkspaceName
Set pWorkspaceName = pAccessWSFactory.Create("C:\Stage\Data", _
"MaGDB", Nothing, Application.hWnd)
'QI pour IName
Dim pName As IName
Set pName = pWorkspaceName
'Ouverture du Workspace
Dim pAccessWorkspace as IWorkspace
Set pAccessWorkspace = pName.Open
64
HB – Programmation d’ArcGIS – Support de cours
32
Exercice 6
 Création d'une géodatabase personnelle
 Création d'une collection de champs
 Définition d’un champ de type Geometry
 Création d'une nouvelle classe d'entités de géodatabase
 Ajout d'enregistrements
 Edition de valeurs
65
HB – Programmation d’ArcGIS – Support de cours
Les objets Name
 Simple référence aux objets qu’ils représentent : jeux de données, tables,
espaces de travail…
 Nombre de propriétés et de méthodes limité.
O
 La méthode IName::Open
permet d’instancier l’objet véritable.
Utilisés pour parcourir rapidement un
espace de travail, comme paramètres lors
de conversions de fichiers...
Name
DataSetName
WorkspaceName
Un objet Workspace peut
renvoyer une énumération de
DatasetNames et ainsi
accéder rapidement à un jeu
de données.
etc.
RasterDataSetName
FeatureDataSetName
TableName
FeatureClassName
(OMD: Geodatabase / Name)
66
HB – Programmation d’ArcGIS – Support de cours
33
Exemple : Ouvrir rapidement une classe d’entités de SHP
Public Function OuvrirClasse(strDir As String, strSHPName As String) As IFeatureClass
‘Créer un espace de travail de type fichier de formes
Dim pWSFactory As IWorkspaceFactory
Set pWSFactory = New ShapefileWorkspaceFactory
‘Récupérer l’espace de travail: répertoire strDir
Di pWS
Dim
WS A
As IW
IWorkspace
k
Set pWS = pWSFactory.OpenFromFile(strDir, Application.hWnd)
‘Récupérer la liste des jeux de données de l’espace de travail
Dim pEnumDSNames As IEnumDatasetName
Set pEnumDSNames = pWS.DatasetNames(esriDTFeatureClass)
Dim pFClass As IFeatureClass
‘Parcourir l’énumération à la recherche de strSHPName
Dim pDSName As IDatasetName
Set pDSName = pEnumDSNames.Next
Do Until pDSName Is Nothing
If pDSName.Name = strSHPName Then
Dim p
pName As IName
Set pName = pDSName
'QI
Set pFClass = pName.Open
Exit Do
End If
Set pDSName = pEnumDSNames.Next
Loop
Set OuvrirClasse = pFClass ‘Affecter à la fonction la classe d’entités recherchée.
End Function
67
HB – Programmation d’ArcGIS – Support de cours
Objets pour manipuler les données
FeatureDataConverter
(OMD: Geodatabase / DataTransfer)
Conversions entre les formats
fichiers de formes, couvertures
et géodatabases.
ExportOperation
(OMD: GeodatabaseUI)
Exportation d’une classe d’entité ou
d’une table. Correspond à l’option
Données / Exporter des données dans
ArcMap.
ObjectLoader
(OMD: EditorExt / Data converter)
Ajoute des données à une classe
d’entité ou table existante.
68
HB – Programmation d’ArcGIS – Support de cours
34
Exercice 7
 Vous avez récupéré un grand nombre de couvertures ArcInfo que
vous souhaitez convertir en géodatabases…
 Cherchez dans l’aide d’ArcGIS Desktop Help for VBA developers
quelque chose qui pourrait vous aider.
 Testez et analysez votre trouvaille.
 Essayez de comprendre le code et de le rendre plus lisible.
69
HB – Programmation d’ArcGIS – Support de cours
35
6. Filtres, curseurs et
sélections
HB – Programmation d’ArcGIS – Support de cours
Sommaire
 Modèle objet simplifié
 Récupérer la sélection courante d'une table ou d'une couche
- SelectionSet
S l i S
 Récupérer un sous-ensemble d'enregistrements
- Filtres attributaires
- Filtres spatiaux
- Curseurs et curseurs d'entités
- Curseurs de recherche
- Curseurs de mise à jour
 Afficher un sous-ensemble d'entités d'une couche
- Ensemble de définition
72
HB – Programmation d’ArcGIS – Support de cours
36
Modèle objet simplifié
SelectionSet
Row
Cursor
Table
QueryFilter
SpatialFilter
Feature
FeatureCursor
FeatureClass
en conjonction avec
crée un
73
Extrait du diagramme Geodatabase
HB – Programmation d’ArcGIS – Support de cours
Récupérer la sélection courante
 À partir d'une couche vectorielle (FeatureLayer) :
propriété SelectionSet de IFeatureSelection
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pFSelection As IFeatureSelection
Set pFSelection = pMxDoc.SelectedLayer 'QI
Dim pSelectSet As ISelectionSet
Set pSelectSet = pFSelection.SelectionSet
MsgBox pSelectSet.Count & " entités sélectionnées."
 À partir d'un bloc de données
((Map)
p) :
propriété FeatureSelection de IMap
renvoie un ISelection
IEnumFeature
ISelection
MapSelection
Dim pEnumFeat As IEnumFeature
S
t pEnumFeat
E
F t = pMxDoc.FocusMap.FeatureSelection
M D
F
M
F t
S l ti
'QI
Set
Dim pFeat As IFeature
Set pFeat = pEnumFeat.Next 'Se placer en haut
Dim i As Integer
Do While Not (pFeat Is Nothing)
i = i + 1
Set pFeat = pEnumFeat.Next
Loop
MsgBox "Il y a " & i & " entités sélectionnées."
74
HB – Programmation d’ArcGIS – Support de cours
37
Filtre attributaire : QueryFilter
 Requête SQL sur un ou plusieurs
attributs d'une table.
 Rédiger la clause Where.
<champ> <opérateur> <valeur>
La syntaxe SQL varie suivant la source de données :
Géodatabase
Fichier de formes
Couvertures
Caractère quelconque
?
_ (underscore)
Chaîne quelconque
*
%
indifférent
sensible
Casse
Exemple : sélectionner les entités de pCoucheCommune
dont le nom commence par A
Dim pQFilter As IQueryFilter
Set pQFilter = New QueryFilter
pQFilter.WhereClause = "NOM_COM like 'A%'"
Dim pFSelection As IFeatureSelection
Set pFSelection = pCoucheCommune 'QI
pFSelection.SelectFeatures pQFilter, esriSelectionResultNew, False
75
Ne sélectionner qu'un
enregistrement V/F
HB – Programmation d’ArcGIS – Support de cours
Filtre spatial : SpatialFilter
 Type de QueryFilter (hérite de la propriété
ClauseWhere pour ajouter un critère attributaire).
 Sélectionne des entités selon leurs relations spatiales.
 Utilisable avec classes d'entités uniquement.
 Critère de recherche défini par les propriétés Geometry
(tous types de Geometry, géométrie de référence pour
filtrer les entités), GeometryField (le champ qui contient
les entités) et SpatialRel.
Exemple : trouver l’entité de pUneCouche qui contient pUnPoint
‘Création d’un nouveau filtre spatial
Dim pSFilter As ISpatialFilter
Set pSFilter = New SpatialFilter
‘Affectation de ses propriétés
Set pSFilter
Geometry = pUnPoint
pSFilter.Geometry
pSFilter.SpatialRel = esriSpatialRelWithin
‘QI pour l’interface IFeatureSelection de pUneCouche
Dim pFSelection As IFeatureSelection
Set pFSelection = pUneCouche 'QI
pFSelection.SelectFeatures pSFilter, esriSelectionResultNew, False
IFeatureLayer
IFeatureSelection
76
FeatureLayer
HB – Programmation d’ArcGIS – Support de cours
38
Curseur (Cursor) et curseur d'entités (FeatureCursor)
 Sous-ensemble d'enregistrements (Row ou Feature)
accessibles un à un, géré comme un seul objet.
 Invisible pour l'utilisateur (différent d'une sélection).
 Peut-être défini par un filtre attributaire et/ou spatial.
 Possède une propriété Fields, identique à celle de la table
ou de la classe d'entité d'origine, qui permet d'accéder aux
champs et à leur contenu (value).
 Les méthodes pour travailler sur les lignes ou les entités
(Delete, Insert, Next, Update) disponibles ou non selon la
méthode qui a créé le curseur (Search, Update ou Insert).
Dim pFCursor As IFeatureCursor
Set pFCursor = classedentité.méthode(filtre, recyclage)
Search
Insert
Update
Un QueryFilter, SpatialFilter ou
Nothing (renvoie toute la classe)
Utiliser la même adresse mémoire
pour chaque élément du curseur O/N
77
HB – Programmation d’ArcGIS – Support de cours
Les trois types de curseurs
Dim pFeatureCursor As IFeatureCursor
Le type est déterminé par la méthode utilisée pour renvoyer le curseur.
Curseurs renvoyés par la méthode Search.
 Analyse en lecture seule d'un ensemble d'enregistrements (calcul de statistiques,
comptage d'enregistrements...).
 Utilisable avec ou sans filtre.
 Méthode Next disponible.
Set pFeatureCursor = pFClass.Search(pQFilter,
True)
Curseurs renvoyés par la méthode Update
 Mettre à jour ou supprimer les enregistrements d'une base de données.
 Utilisable avec ou sans filtre.
 Méthodes Next, Delete, Update disponibles
Set pFeatureCursor = pFClass
pFClass.Update(pQFilter,
Update(pQFilter False)
Curseurs renvoyés par la méthode Insert
 Ajouter des enregistrements dans une base de données.
 Pas de filtre.
 Méthode Insert disponible.
Set pFeatureCursor = pFClass.Insert(False)
78
HB – Programmation d’ArcGIS – Support de cours
39
Accéder aux enregistrements d'un curseur
 Lors de leur création, les curseurs pointent au-dessus du premier enregistrement.
 NextRow | NextFeature pour pointer sur le premier enregistrement.
 Puis NextRow | NextFeature pour faire défiler les enregistrements.
 Nothing
g est renvoyé
y en fin de curseur.
 Impossible d'atteindre un enregistrement particulier (position), ni de "remonter" dans le
curseur, ni même de revenir au début (pas de "Reset"), il faut pour cela réinitialiser le
curseur.
Exemple : création d'un
curseur Search à partir de
l'ensemble des entités
sélectionnées de la
couche (SelectionSet)
(SelectionSet).
Les curseurs s’utilisent
comme des énumérateurs.
'QI entre IFeatureLayer et IFeatureSelection
Dim pFeatSelection As IFeatureSelection
Set pFeatSelection = pFLayer 'QI
'Récupération du jeu d'entités sélectionnées
Dim pSelectionSet As ISelectionSet
Set pSelectionSet = pFeatSelection.SelectionSet
'Création du curseur sur toute la sélection
Dim pFCursor As IFeatureCursor
pSelectionSet.Search Nothing, False, pFCursor
'Parcours du curseur
Dim pFeature As IFeature
Set pFeature = pFCursor.NextFeature
Do Until pFeature Is Nothing
MsgBox "Commune = " & pFeature. _
Value(pFeature.Class.FindField("NOM_COM"))
Set pFeature = pFCursor.NextFeature
Loop
79
HB – Programmation d’ArcGIS – Support de cours
Exemple de curseur de mise à jour
Mise à jour d'un champ DensitePop sur l'ensemble d'une classe :
'Définition du curseur de mise à jour
Dim pUpdateCursor As IFeatureCursor
Set pUpdateCursor = pFClass.Update(Nothing, False) ' Tous les enregistrements
'Mise à jour par le curseur
Dim pFeature As IFeature
Set pFeature = pUpdateCursor.NextFeature
'Se placer sur le premier
Do Until pFeature Is Nothing
pFeature.Value(pFClass.FindField("DensitePop")) = _
pFeature.Value(pFClass.FindField("POP_99")) / _
pFeature.Value(pFClass.FindField("SUPERFICIE"))
pUpdateCursor.UpdateFeature pFeature
'Valider la mise à jour
Set pFeature = pUpdateCursor.NextFeature
'Passage au suivant
Loop
MsgBox "Les entités ont été mises à jour"
80
HB – Programmation d’ArcGIS – Support de cours
40
Appliquer un ensemble de définition à une couche
 Sous-ensemble d'entités pour l'affichage et l'analyse (propriétés de la
couche, onglet Ensemble de définition).
 Utiliser la propriété DefinitionExpression de l’interface IFeatureLayerDefinition
de la classe FeatureLayer.
Public Sub SelectedLayerDef(strSQL As String)
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pFDefine As IFeatureLayerDefinition
Set pFDefine = pMxDoc.SelectedLayer 'QI
pFDefine.DefinitionExpression = strSQL
pMxDoc.ActiveView.Refresh
'Rafraîchit la fenêtre
End Sub
ILayer
IFeatureLayerDefinition
81
FeatureLayer
HB – Programmation d’ArcGIS – Support de cours
Exercice 8
 Afficher un sous-ensemble des entités d'une couche
- IFeatureLayerDefinition.DefinitionExpression
IFeatureLayerDefinition DefinitionExpression
 Calculer des statistiques pour un sous-ensemble d'entités
- IQueryFilter.WhereClause
- FeatureCursors
 Produire un curseur basé sur un critère attributaire et spatial
- SpatialFilter
- SelectionSet
82
HB – Programmation d’ArcGIS – Support de cours
41
7. Géométries et
géotraitements
HB – Programmation d’ArcGIS – Support de cours
Sommaire
 Classes d'objets du modèle Geometry.
Geometry
 Créer de nouvelles géométries par la programmation.
 Examiner les relations spatiales.
 Afficher des entités.
84
HB – Programmation d’ArcGIS – Support de cours
42
Type d'entités géométriques
 Instance(s) de Point, Multipoint,
PolyLine ou Polygon servent à
représenter une entité (Feature).
peut-être simple
p ou
 Entité p
multiple (sauf couvertures).
 Fichiers de forme : uniquement
segment de type Line.
 Segment, Path, Ring : utilisés
pour l'analyse, le dessin...
Polyligne (PolyLine)
Polygone (Polygon)
Multiple
Multiple
Simple
Simple
Chemin (Path)
Boucle (Ring)
S
Segments
t
BezierCurve
Line
Point (x, y) : base de toute
géométrie (collection de Points)
EllipticArc
CircularArc
Point
2 points reliés
par une courbe
(Curve)
Multipoint
85
HB – Programmation d’ArcGIS – Support de cours
Objets du modèle Geometry
Geometry
Curve
Envelope
*
Point
Multipoint
IGeometryCollection
Segment *
Line
CircularArc
Path
*
Ring
*
Polycurve
Polyline
Polygon
GeometryCollection: ensemble
de géométries du même type
BezierCurve
EllipticArc
IGeometryCollection
Extrait du diagramme Geometry
86
HB – Programmation d’ArcGIS – Support de cours
43
Points et Multipoints
 Point est défini par un couple de coordonnées (X, Y).
 Peut avoir des propriétés M (mesures) et Z (altitude).
 Multipoint est une collection de points.
 N'importe
N importe quel type de géométrie peut être construit
à partir d'une collection de points (interfaces
IPointCollection et IGeometryCollection).
Point
*
Multipoint
IGeometryCollection
IPointCollection
Dim pPoint As IPoint
Set pPoint = New Point
pPoint.X = 12
pPoint.Y = 24
'ou pPoint.PutCoords 12, 24
Dim pMultiPoint As IPointCollection
Set pMultiPoint = New MultiPoint
pMultipoint.AddPoint pPoint
87
HB – Programmation d’ArcGIS – Support de cours
Segments
ToPoint
 Classe abstraite avec 4 classes filles : Line,
CircularArc, EllipticArc, BezierCurve.
FromPoint
 Héritent toutes de Curve leurs principales
propriétés
iété : FromPoint,
F
P i t ToPoint
T P i t ett Length.
L
th
ToPoint
 Les segments permettent d'obtenir des géométries
plus complexes : Path, Ring, PolyLine et Polygon
Dim pSegment As ICurve
Set pSegment = New Line
pSegment.FromPoint = pPointA
pSegment.ToPoint = pPointB
'ou pSegment.PutCoords
pPointA,
p g
p
, pPointB
p
FromPoint
Curve
ICurve
Segment
Line
CircularArc
88
EllipticArc
BezierCurve
HB – Programmation d’ArcGIS – Support de cours
44
Chemins et polylignes
Segment
*
Path (chemin ou cheminement) : collection de
segments connectés.
Polyline : collection de paths connectés ou non.
ISegmentCollection
IPointCollection
*
Création d'une polyligne constituée de 2 chemins d’un segment
'pPoint1 ... pPoint4 déjà définis
Dim pGeometryColl As IGeometryCollection
Set pGeometryColl = New Polyline
Path
IGeometryCollection
IPointCollection
Polyline
pPoint4
pPoint4
Dim pSegmentColl As ISegmentCollection
Set pSegmentColl = New Path
pPoint2
pPoint2
pPoint3
Dim pLine As ILine
Set pLine = New Line
pLine.PutCoords pPoint1, pPoint2
pSegmentColl.AddSegment pLine
pGeometryColl.AddGeometry pSegmentColl
pPoint3
pPoint1
pPoint1
Création d'une polyligne simple
Dim pPointColl As IPointCollection
Set pPointColl = New Polyline
pPointColl.AddPoint pPoint1
pPointColl.AddPoint pPoint2
pPointColl.AddPoint pPoint3
pPointColl.AddPoint pPoint4
Set pSegmentColl = New Path
Set pLine = New Line
pLine.PutCoords pPoint3, pPoint4
pSegmentColl.AddSegment pLine
pGeometryColl.AddGeometry pSegmentColl
89
HB – Programmation d’ArcGIS – Support de cours
Anneaux et polygones
IGeometryCollection
ISegmentCollection
IPointCollection
Polycurve
Ring : boucle ou anneau est un type de Path, fermé.
Polygon
Polygon : collection de Rings.
ISegmentCollection
IPointCollection
IRing
Construction d'un Ring, puis d'un
polygone à partir de segments :
close
'pSegment1 et pSegment2 déjà créés.
Dim pSegmentColl As ISegmentCollection
Set pSegmentColl = New Ring
pSegmentColl.AddSegment pSegment1
pSegmentColl.AddSegment pSegment2
Ring
*
pPoint4
pSegment2
pPoint3
pPoint1
pSegment1
pPoint2
'Créer un Ring à partir de la collection
Dim pRing As IRing
Set pRing = pSegmentColl
'QI
pRing.Close
Création d'un polygone simple à partir
de points :
Dim pPointColl As IPointCollection
Set pPointColl = New Polygon
pPointColl.AddPoint pPoint1
pPointColl.AddPoint pPoint2
pPointColl.AddPoint pPoint3
pPointColl.AddPoint pPoint4
pPointColl.AddPoint pPoint1
'Crée un polygone
Dim pPolygon As IGeometryCollection
Set pPolygon = New Polygon
pPolygon.AddGeometry pRing
90
HB – Programmation d’ArcGIS – Support de cours
45
Lecture de la géométrie d'une entité
 La propriété EnumVertices de IPointCollection
retourne un énumérateur des points de la collection.
 IEnumVertex permet de lire les propriétés des
points (coordonnées
(coordonnées, numéro de partie et numéro de
sommet).
Dim pPointColl As IPointCollection
Set pPointColl = pPolygon 'QI (cf exemple précédent !)
Dim pEnumVertex As IEnumVertex
Set pEnumVertex = pPointColl.EnumVertices
Dim pPoint As IPoint, lNumPart As Long, lNumSommet As Long
'se
se placer en début d'énumération
d énumération (premier sommet)
pEnumVertex.Next pPoint, lNumPart, lNumSommet
Do Until pPoint Is Nothing
'... traitements
'passage au sommet suivant
pEnumVertex.Next pPoint, lNumPart, lNumSommet
Loop
91
HB – Programmation d’ArcGIS – Support de cours
Enveloppes
IGeometry
Geometry
 Plus petit rectangle englobant d'une géométrie.
 Toute géométrie a une enveloppe :
Envelope
- renvoyée par la propriété Envelope de IGeometry.
- nulle pour un objet Point.
ymax
- un objet Envelope a aussi une propriété Envelope qui
renvoie un objet Envelope qui a aussi une propriété Envelope qui ...
Zoomer sur une entité :
pMxDoc.ActiveView.Extent = pFeature.Shape.Envelope
'ou = pFeature.Extent
pMxDoc.ActiveView.Refresh
pMxDoc ActiveView Refresh
92
xmin
ymin
xmax
Enveloppe d'un polygone
HB – Programmation d’ArcGIS – Support de cours
46
Surfaces, longueurs et centroïdes
Longueur (Length)
 Changement d'interface pour ICurve.
 Implémentée
p
p
par Segment,
g
Polycurve,
y
Envelope...
p
Dim pCurve As ICurve
Set pCurve = pLine 'QI
MsgBox pCurve.Length
Surface (Area) et centre de gravité (Centroid)
 Changement d'interface pour IArea.
 Implémentée par Ring, Polygon, Envelope.
Dim p
pArea As IArea
Set pArea = pPolygon 'QI
MsgBox "Surface: " & pArea.Area & vbCrLf & _
" Centroïde : " & pArea.Centroid.X & _
"," & pArea.Centroid.Y
Valeurs numériques renvoyées par Area et Length sont dans les unités dans lesquelles les entités sont
stockées (souvent en mètres)  plus parlant de convertir en kilomètres, hectares ou kilomètres carrés.
93
HB – Programmation d’ArcGIS – Support de cours
Interfaces d'opérateurs spatiaux
ITopologicalOperator
Opérations
p
courantes sur la g
géométrie d'entités ((Buffer, Clip,
p Cut...).
)
IProximityOperator
Mesurer la distance entre 2 géométries.
IRelationalOperator
Examiner les types de relation entre deux géométries.
 Interfaces implémentées par la plupart des CoClasses de Geometry.
 Géométries doivent avoir le même système de référence spatiale.
 Ne s'appliquent pas à des classes d'entités entières.
OMD: Geometry
94
HB – Programmation d’ArcGIS – Support de cours
47
ITopologicalOperator
 Implémentée par Point, Multipoint, Polyline et Polygon :
 changement d'interface vers ITopologicalOperator.
 Méthodes s'appliquent à une seule géométrie.
d
Buffer
ConvexHull (enveloppe convexe)
Clip (découpage)
Difference
Boundary (limites)
Géometrie Simple = topologiquement correcte
(polygones fermés, segments non dupliqués, etc.) :
Tests : IsSimple, IsKnownSimple
Vérification et correction d
d'une
une géométrie : Simplify.
Simplify
'Retourner un buffer autour d'une entité
Dim intDist As Integer
Dim pTopolOp As ITopologicalOperator
Set pTopolOp = pFeature.Shape 'QI
Dim pPolyBuff As IPolygon
Set pPolyBuff = pTopolOp.Buffer(intDist)
95
HB – Programmation d’ArcGIS – Support de cours
IProximityOperator
 Implémentée par Point, Multipoint, Polyline, Polygon
et les sous-classes de Segment.
 Trois méthodes pour renvoyer :
point le p
plus p
proche d'une entité.
- Le p
- La distance minimale à une entité.
pPolyline
'Retourne le point de Polyline le plus proche de InPoint et sa distance.
Dim pNearestPoint As IPoint
Dim pProxOp As IProximityOperator
Set pProxOp = pPolyline 'QI
Set pNearestPoint = pProxOp.ReturnNearestPoint(pInPoint, esriNoExtension)
Dim dblDistance As Double
L'opérateur peut rechercher
Set pProxOp = pNearestPoint 'QI
le point le plus proche sur un
dblDistance = pProxOp.ReturnDistance(pInPoint)
prolongement de l'entité
96
HB – Programmation d’ArcGIS – Support de cours
48
IRelationalOperator
 Implémentée par Point, Multipoint,
Polyline, Polygon et Envelope.
 Méthodes renvoient True ou False selon la
nature de la relation entre deux entités.
Contains : la géométrie contient l'autre géométrie.
Crosses : l'intersection des 2 géométries produit une géométrie de dimension inférieure.
Disjoint : les géométries ne sont pas intersectées.
Equals : les géométries équivalentes.
Overlaps : l'intersection des 2 géométries est de même dimension qu'une d'entre elles.
Touches : les limites (Boundary) des géométries sont intersectées.
Within : la g
géométrie est contenue dans l'autre g
géométrie.
A
B
Dim pRelationOp As IRelationalOperator
Set pRelationOp = pPolygonA
Dim fOverlaps As Boolean
fOverlaps = pRelationOp.Overlaps(pPolygonB)
97
HB – Programmation d’ArcGIS – Support de cours
ITransform2D
 Implémentée par de nombreuses classes : objets
de type Geometry, éléments graphiques, cadres...
Move : déplacement de dx en X et dy en Y
MoveVector : déplacement suivant la direction et la longueur d'un ILine.
Rotate : Rotation de centre IPoint et d'angle (radians) RotationAngle.
Scale : mise à l'échelle de sx en X et sy en Y, seul IPoint n'est pas déplacé.
Transform : transformation définie par ITransformation (géographique, affine, etc.)
(OMD: Map Elements)
98
HB – Programmation d’ArcGIS – Support de cours
49
Géotraitements
 Les méthodes de l'assistant de géotraitement sont
proposées par IBasicGeoprocessor.
 S'appliquent à une classe d'entités entière.
 Renvoient
R
i t un objet
bj t F
Featureclass.
t
l
(OMD Carto Miscellaneous)
Clip
Dissolve
Intersect
Merge
99
Union
HB – Programmation d’ArcGIS – Support de cours
Systèmes de références spatiales
 Toutes les géométries héritent de la propriété
SpatialReference par IGeometry.
 SpatialReference
p
p
permet d'obtenir toutes les
informations de projection.
 SpatialReference est affectée par référence :
si le système de référence spatiale (SRS) de la
classe change, il sera modifié pour toutes les
entités associées.
MsgBox pUnPoint.SpatialReference.Name
Créer un système de référence,
Importer un fichier PRJ ...
ISpatialReference
SpatialReference
GeographicCoordinateSystem
ISpatialReferenceFactory
UnknownCoordinateSystem
100
SpatialReferenceEnvironment
ProjectedCoordinateSystem
HB – Programmation d’ArcGIS – Support de cours
50
Changement de projection
La méthode Project, appliquée sur une
géométrie de SRS définie de la projeter
dans un nouveau système de référence
référence.
Changement du SR du bloc de données :
Public Sub Projeter()
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pSRFactory As ISpatialReferenceFactory
S t pSRFactory
Set
SRF t
= N
New S
SpatialReferenceEnvironment
ti lR f
E i
t
Dim pNewProj As ISpatialReference
Set pNewProj = _
pSRFactory.CreateProjectedCoordinateSystem(esriSRProjCS_ED1950EuropeLambert)
Set pMxDoc.FocusMap.SpatialReference = pNewProj
pMxDoc.ActiveView.Refresh
End Sub
101
HB – Programmation d’ArcGIS – Support de cours
Exercice 9
 Créer un polygone à partir de points.
 Ajouter des entités à une classe.
 Modifier la topologie des nouvelles entités en fonction
d'entités existantes.
 Calculer la surface et le périmètre.
102
HB – Programmation d’ArcGIS – Support de cours
51
8. Symboles et
représentation des couches
HB – Programmation d’ArcGIS – Support de cours
Sommaire
 Modèle objet simplifié Display
 Couleurs et collections de couleurs
 Symboles ponctuels, linéaires et surfaciques
 Eléments graphiques
 Symbologie d'une couche : FeatureRenderer
 Utilisation des fichiers de couche (*.lyr)
104
HB – Programmation d’ArcGIS – Support de cours
52
Modèle objet simplifié
FeatureRenderer
ISymbol
Symbol
SimpleRenderer
Affecté à la propriété Symbol
d'un élément graphique ou
d'un FeatureRenderer.
TextSymbol
UniqueValueRenderer
MarkerSymbol
ClassBreaksRenderer
FillSymbol
ProportionalSymbolRenderer
Attribution d’objets de
type Symbol aux entités
en fonction de valeurs
d'attributs.
LineSymbol
etc.
3DchartSymbol
Boîtes de dialogue
Color
ColorBrowser
ColorRamp
ColorEditor
5 classes
SymbolEditor
etc.
4 classes
Extraits des diagrammes Display / Symbols and Color et Carto / Rendering
105
Couleurs (objet Color)
HB – Programmation d’ArcGIS – Support de cours
IColor
Color
RgbColor
HlsColor
5 manières de définir une couleur :
 RGB : valeur rouge, vert et bleu (0-255).
 Gray : niveaux de gris (blanc: 0 – noir: 255).
CmykColor
HsvColor
 CMYK : cyan, magenta, jaune et noir (0-255).
 HSV : teinte (0-360°), saturation et valeur (0-100%).
GrayColor
 HLS : teinte (0-360°), luminance et saturation (0-100%).
Objet Color sert à affecter la propriété Color d'un objet Symbol
Dim pRgbColor As IRgbColor
Set pRgbColor = New RgbColor
pRgbColor.Red = 255
pRgbColor.Green = 255
pRgbColor.Blue = 0
Set pSymbol.Color = pRgbColor
Utilisation de la propriété RGB de IColor et de
la fonction standard RGB de Visual Basic :
Dim pRgbColor As IRgbColor
Set pRgbColor = New RgbColor
pRgbColor.RGB = RGB(255, 255, 0)
Set pSymbol.Color = pRgbColor
Constantes VB intrinsèques : vbBlue, vbBlack, vbRed... (valeurs RGB)
106
HB – Programmation d’ArcGIS – Support de cours
53
Collections de couleurs
(objet ColorRamp)
4 types de collections :
 Random : couleurs aléatoires.
 Algorithmic : dégradé entre
P
C l R
PresetColorRamp
FromColor et ToColor.
RandomColorRamp
 Preset : 13 couleurs prédéfinies.
 MultiPart : collection de ColorRamp.
M lti tC l R
MultipartColorRamp
AlgorithmicColorRamp
Function GetAlgoRamp(aFromCol As IRgbColor, aToCol As IRGbColor,_
intNumCol As Integer) As IEnumColors
Dim pAlgoColorRamp As IAlgorithmicColorRamp
Set pAlgoColorRamp = New AlgorithmicColorRamp
pAlgoColorRamp.Size = intNumCol
pAlgoColorRamp.FromColor = aFromCol
pAlgoColorRamp.ToColor = aToCol
pAlgoColorRamp.Algorithm = esriHSVAlgorithm
Dim fIsOk As Boolean
pAlgoColorRamp.CreateRamp fIsOk
If Not fIsOk Then
Exit Function
End If
Enumérateur en sortie permettra par
Set GetAlgoRamp = pAlgoColorRamp.Colors
exemple d'affecter des couleurs selon
End Function
un dégradé à des plages de valeurs.
107
HB – Programmation d’ArcGIS – Support de cours
Boîtes de dialogues Color
 Les CoClasses ColorPalette, ColorSelector et
ColorBrowser permettent d’afficher les boîtes de dialogue
’
standard et de récupérer la couleur choisie par l’utilisateur.
Public Function GetUserColor() As IColor
‘Créer le sélecteur de couleur
Dim pColorSelector As IColorSelector
Set pColorselector = New ColorSelector
‘Afficher la boîte de dialogue
Dim fChoix As Boolean
fChoix = pColorSelector.DoModal(Application.hWnd)
ColorSelector
ColorPalette
‘Si l’utilisateur clique sur Annuler
If Not fChoix Then Exit Function
‘Sinon, renvoie la couleur sélectionnée
Set GetUserColor = pColorSelector.Color
ColorBrowser
End Function
OMD: Display (8.x), Framework (9.x)
108
HB – Programmation d’ArcGIS – Support de cours
54
Symboles textuels : TextSymbol
 Texte simple (ISimpleTextSymbol) ou mise en forme
avancée (IFormattedTextSymbol).
 Héritent de ITextSymbol (propriétés de base).
Création d'un symbole texte :
(commence par la création d'une police)
Dim pFont As IFontDisp
Set pFont = New StdFont
pFont.Name = "Arial Black"
pFont.size = 40
Dim pTextSymbol As ITextSymbol
Set pTextSymbol = New TextSymbol
pTextSymbol.Font = pFont
IFontDisp n'est pas une
interface d'ArcObjects : elle fait
partie de la librairie stdole
(Standard OLE COM Library).
109
HB – Programmation d’ArcGIS – Support de cours
Symboles ponctuels : MarkerSymbol
Symbol
ISymbol
5 types
IMarkerSymbol
MarkerSymbol
SimpleMarkerSymbol
Elément de police TrueType
CharacterMarkerSymbol
ArrowMarkerSymbol
Dim pCharMS As ICharacterMarkerSymbol
Set pCharMS = New CharacterMarkerSymbol
Dim pFont As IFontDisp
Set pFont = New StdFont
pFont.Name = "ESRI Default Marker"
pCharMS.Font = pFont
pCharMS.size = 24
pCharMS.CharacterIndex = 34
PictureMarkerSymbol
Collection de
MarkerSymbol
MultilayerMarkerSymbol
Définition d'un symbole ponctuel image
Dim pPictureMarker As IPictureMarkerSymbol
Set pPictureMarker = New PictureMarkerSymbol
pPictureMarker.CreateMarkerSymbolFromFile esriPictureBitmap "c:\Stage\toto.bmp"
110
HB – Programmation d’ArcGIS – Support de cours
55
Symboles linéaires : LineSymbol
Plusieurs types de lignes :
 Simple : trait plein, pointillé...
 Picture : image répétée.
k : symbole
b l ponctuel
t l (IM
k S b l)
M
Marker
(IMarkerSymbol)
 Hash : ligne hachurée.
 Cartographic : ligne habillée, motif répétitif,
extrémités personnalisées...
 MultiLayer : collection de lignes.
Symbol
ISymbol
LineSymbol
ILineSymbol
PictureLineSymbol
MarkerLineSymbol
SimpleLineSymbol
HashLineSymbol
Créer une ligne pointillée simple :
CartographicLineSymbol
Dim pSLineSymbol As ILineSymbol
Set pSLineSymbol = New LineSymbol
pSLineSymbol.Style = esriSLSDot
MultiLayerLineSymbol
111
HB – Programmation d’ArcGIS – Support de cours
Symboles de remplissage : FillSymbol
Nombreuses classes filles :
 Picture : image répétée.
 Line : à partir d'un objet LineSymbol.
M
Marker
k : à partir
ti d'
d'un objet
bj t M
MarkerSymbol.
k S b l
 Gradient : à partir d'un objet ColorRamp.
 DotDensity : densité de points (dépend
d'un attribut).
 MultiLayer : collection de FillSymbol.
Symbol
ISymbol
FillSymbol
IFillSymbol
PictureFillSymbol
LineFillSymbol
SimpleFillSymbol
MarkerFillSymbol
GradientFillSymbol
MultiLayerFillSymbol
Création d'un symbole de remplissage simple :
DotDensityFillSymbol
Dim pSFillSymbol As IFillSymbol
Set pFillSymbol = New FillSymbol
pSFillSymbol.Style = esriSFSForwardDiagonal
112
HB – Programmation d’ArcGIS – Support de cours
56
Objets de type Element
Eléments de mise en page cartographique.
Nombreuses classes filles.
IElement
Element
FrameElement
GraphicElement
LineElement
Eléments dynamiques : FrameElement
(mode mise en page)
 Habillage de la carte : échelle, légende...
 Blocs de carte ou de table de données.
 mis à jour automatiquement suivant les
modifications de la carte par l'utilisateur.
Geometry
TextElement
BmpPictureElement
RectangleElement
CircleElement
cf. Chapitre « Mise en page »
MarkerElement
PolygonElement
EllipseElement
etc.
Eléments statiques : GraphicElement
 Géométriques : point, lignes, polygones...
 Textes, images.
 non mis à jour automatiquement.
(OMD : Carto / Map Elements)
113
HB – Programmation d’ArcGIS – Support de cours
Création d'un élément graphique
Elément
'1. Instanciation élément
Dim pMarkerElement As IMarkerElement
Set pMarkerElement = New MarkerElement
'2. Instanciation symbole
Dim pMarkerSymbol As ISimpleMarkerSymbol
Set pMarkerSymbol = New SimpleMarkerSymbol
'3. Instanciation couleur
Dim pColor As IRgbColor
Set pColor = New RgbColor
'4. Définition couleur
pColor.RGB = RGB(255,0,0)
'5. Affectation de la couleur au symbole
pMarkerSymbol.Color = pColor
'6. Définition du style du symbole
pMarkerSymbol.Style = esriSMSDiamond
'7. Affecter le symbole à l'élément
pMarkerElem.Symbol = pMarkerSymbol
Symbole
Couleur
Définir sa position sur le bloc de données ou la mise en page
 Propriété IElement::Geometry de la classe Element.
 Renseignée avec un point, une ligne ou une enveloppe.
114
HB – Programmation d’ArcGIS – Support de cours
57
Ajouter un élément à la carte / mise en page
Définir la position
 Propriété IElement::Geometry de la classe Element.
 Renseignée avec un point, une ligne ou une enveloppe.
Dim pElement As IElement
Set pElement = pMarkerElement 'QI
Unités Page (Layout) ou unités
du bloc de données (Map)
Dim pPoint As IPoint
Set pPoint = New Point
pPoint.PutCoords 45.1, 23.1
pElement.Geometry = pPoint
Ajouter à la carte ou à la mise en page
((IGraphicsContainer
p
implémenté
p
p
par Map
p et Layout)
y )
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pGContainer As IGraphicsContainer
Set pGraphicsContainer = pMxDoc.FocusMap 'QI
pGContainer.AddElement pElement, 0
pMxDoc.ActiveView.Refresh
Affichage au-dessus des autres éléments.
115
HB – Programmation d’ArcGIS – Support de cours
Symbologie des couches : FeatureRenderer
IGeoFeatureLayer
FeatureRenderer
FeatureLayer
SimpleRenderer
p
IFeatureLayer
Mode par défaut
ScaleDependantRenderer
UniqueValueRenderer
ClassBreaksRenderer
Collection de Renderers
(OMD Display)
ProportionalSymbolRenderer
'Mise à jour de la propriété
'R d
'Renderer
d
de IG
IGeoFeatureLayer
F t
L
Set pFLayer.Renderer = pRenderer
ChartRenderer
'Rafraîchir la zone d'affichage
pMxDoc.ActiveView.Refresh
BiUniqueValueRenderer
116
'Rafraîchir la table des matières
pMxDoc.UpdateContents
HB – Programmation d’ArcGIS – Support de cours
58
SimpleRenderer
Toutes les entités représentées avec le même symbole.
'Instanciation d'un renderer simple
Di pSRenderer
Dim
SR d
A
As ISi
ISimpleRenderer
l R d
Set pSRenderer = New SimpleRenderer
'Instanciation d'un symbole de remplissage
Dim pFillSymbol As ISimpleFillSymbol
Set pFillSymbol = New SimpleFillSymbol
pFillSymbol.Style = esriSFSForwardDiagonal
'Instanciation d'une couleur
Dim pColor As IRgbColor
Set pColor = New RgbColor
pColor.RGB = vbBlue
'Affectation de la couleur au symbole ...
pFillSymbol.Color = pColor
'...puis
p
du symbole
y
au Renderer
Set pSRenderer.Symbol = pFillSymbol
'Affectation de l'étiquette du Renderer
pSRenderer.Label = "Mon joli symbole"
'Affecter la propriété Renderer de IGeoFeatureLayer
Dim pGFLayer As IGeoFeatureLayer
Set pGFLayer = pSomeLayer
Set pGFLayer.Renderer = pSRenderer 'QI
117
HB – Programmation d’ArcGIS – Support de cours
ClassBreaksRenderer
 Un symbole par plage de valeurs numériques.
Propriétés
 Break(i) : Bornes des classes. Définies de manière arbitraire
ou issues d'une classification statistique (objet Classify).
 Field
Fi ld : champ
h
à partir
ti d
duquell lles classes
l
sontt créées.
éé
 BreakCount : nombre de classes à créer.
ScaleDependantRenderer
 Un objet Renderer qui contient des objets Renderer
 Changement du mode de représentation de la couche en fonction de l'échelle
 Plus de détails à une grande échelle, moins à une petite.
Propriétés
 Breaks : Passage d'
d'un
n renderer à un
na
autre
tre (plages d'échelle)
d'échelle). Doi
Doivent
ent être
définies dans le même ordre que les Renderers.
 RendererCount : nombre d'objets de la collection.
pSDRend.AddRenderer
 Renderer(i) : accès à la collection.
pZoomInRend
pSDRend.AddRenderer pZoomOutRend
pSDRend.Break(0) = 1000000
pSDRend.Break(1) = 9000000
Set pFLayer.Renderer = pSDRend
118
HB – Programmation d’ArcGIS – Support de cours
59
UniqueValueRenderer
 Un symbole par valeur unique.
Propriétés
 Field(i) : champ(s) de la classe d'entité pour lequel les valeurs sont
affichées ((i: 0 à 2).
)
 Value(j) : valeur(s) unique(s).
 ValueCount : nombre de valeurs uniques affichées par le Renderer
(par exemple 22 régions pour les 96 départements français).
Dim pUVRenderer As IUniqueValueRenderer
Set pUVRenderer = New UniqueValueRenderer
Dim pColorEnum As IEnumColors
Set pColorEnum = MakeRandomRamp(96)
pUVRenderer.FieldCount = 1
pUVRenderer.Field(0) = "NOM"
Dim pFClass As IFeatureClass
Set pFClass = SomeLayer.FeatureClass
Dim pFCursor As IFeatureCursor
Set pFCursor = pFClass.Search(Nothing, False)
Dim pFeature As IFeature
Dim pSym As ISimpleFillSymbol
Set pFeature = pFCursor.NextFeature
Do Until pFeature Is Nothing
Set pSym = New SimpleFillSymbol
pSym.Color = pColorEnum.Next
pUVRenderer.AddValue
pFeature.Value(pFClass.FindField("NOM")), "Départements", pSym
Set pFeature = pFCursor.NextFeature
Loop
Set SomeLayer.Renderer = pUVRenderer
119
HB – Programmation d’ArcGIS – Support de cours
Travailler avec les fichiers de couche
 Les couches sont sauvegardées dans le document ArcMap ou sur disque dans des
fichiers de couches (*.lyr).
 Les fichiers de couches stockent les informations sur la couche (chemin d'accès aux
données symbologie,
données,
symbologie mode d'étiquetage
d étiquetage, ensemble de définition
définition...))
Accès aux fichiers *.lyr : objet GxLayer
Sauvegarde la première couche
Public Sub SaveFirstLayer(aPath As String)
'Référence au document
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
'Créer un nouvel objet GxLayer
Dim pGxLayer As IGxLayer
Set pGxLayer = New GxLayer
'QI pour récupérer l'interface IGxFile
Dim pGxFile As IGxFile
Set pGxFile = pGxLayer
'Définition du nom du fichier
pGxFile.Path = aPath
'On sauve la première couche du bloc de données actif
Set pGxLayer.Layer = pMxDoc.FocusMap.Layer(0)
'Sauvegarde du fichier
pGxFile.Save
End Sub
120
(OMD Catalog)
HB – Programmation d’ArcGIS – Support de cours
60
Exercice 10
 Créer un nouveau symbole de remplissage et une couleur.
 Créer un SimpleRenderer.
 Représenter les couches d'une carte.
 Sauvegarder une couche du document.
 Ajouter des fichiers de couches au bloc de données actif.
 Utiliser un objet ScaleDependantRenderer.
121
HB – Programmation d’ArcGIS – Support de cours
61
9. Contrôles outils
et évènements
HB – Programmation d’ArcGIS – Support de cours
Sommaire
Modèle objet de l’interface utilisateur – les CommandItems
(
)
Contrôles Outils (ToolControls)
 Présentation
 L'interface IDisplayTransformation
 Classes Feedback
 Classes Rubberband
 Interface IGraphicsContainer
 Mise à jour de l’affichage
Evènements et interfaces évènementielles
124
HB – Programmation d’ArcGIS – Support de cours
62
Modèle objet de l’Interface Utilisateur
Document
Module ArcId renvoie l’UID (unique identifier) de
toutes les commandes d’ArcGIS (CommandItem).
Dim pCommandItem As ICommandItem
S t pCommandItem
C
dIt
D
t _
Set
= Thi
ThisDocument.
CommandBars.Find(ArcId.File_AddData)
pCommandItem.Execute
CommandBars
1 *
1..
CommandItem *
CommandBar
Catégorie de la boîte Personnaliser
Nom de la commande
Command
UIControl
UIToolControl
UIEditBoxControl
MacroItem
COMCommand
UIButtonControl
Button
UIComboBoxControl
Tool
ToolControl
Extrait du diagramme Framework
125
HB – Programmation d’ArcGIS – Support de cours
Présentation des UIToolControls
Permettent de gérer de nombreux événements
et interactions avec l’utilisateur à la souris ou
au clavier.
Select
Événement ‘outil sélectionné’

KeyUp, KeyDown
Codes des touches du clavier

MouseUp, MouseDown,
MouseMove, DblClick
Coordonnées écran
du pixel cliqué

CursorId
Éditeur VB doit être fermé
lors de l’utilisation des outils :
ouvert = mode conception
'Chargement d'un curseur sur le disque (*.ico ou *.cur)
Private Function UIToolControll_CursorID() As Variant
Set UIToolControl1_CursorID = LoadPicture("C:\Windows\Cursors\cross.cur")
End Function
126
HB – Programmation d’ArcGIS – Support de cours
63
Display
Interface IDisplayTransformation
 Conversion de coordonnées entre unités écran (pixels) et
unités cartographiques: ToMapPoint et FromMapPoint.
ScreenDisplay
 TransformCoords : conversion d’un ensemble de
coordonnées
d
é (dans
(d
un sens ou l’autre).
l’ t )
 Permet d’utiliser les coordonnées x et y
(en pixels) renvoyés par les événements de la souris.
Coordonnées d’un clic de souris : pixel (x, y)
Sub UIToolControl1_MouseDown(ByVal button As Long, _
ByVal shift As Long, ByVal x As Long, ByVal y As Long)
MsgBox "X = " & x & " - Y = " & y
End
d Sub
b
Obtention des coordonnées cartographiques du pixel x, y :
Dim pMxApp As IMxApplication
Set pMxApp = Application ‘QI
Dim pPoint As IPoint
Set pPoint = pMxApp.Display.DisplayTransformation.ToMapPoint(x,y)
MsgBox "Latitude: " & pPoint.Y & " et longitude: " & pPoint.X
127
HB – Programmation d’ArcGIS – Support de cours
Classes Feedback
 Donne à l’utilisateur une représentation de
h
t en cours d
êt graphique.
hi
changements
dans lla ffenêtre
MovePolygonFeedback
NewCircleFeedback
ReshapeFeedback
(etc. + 20 autres CoClasses)
(OMD Display)
 Classes filles : méthodes Start, Stop.
 Instanciées depuis un objet ToolControl.
128
HB – Programmation d’ArcGIS – Support de cours
64
Classes Rubberband
Exemple : rectangle de sélection d’entités.
 Implémentées dans des procédures
MoveDown de ToolControl.
 Renvoient un objet de même type de
géométrie.
 TrackNew dessine une nouvelle
forme.
 TrackExisting déplace ou
remodèle une forme existante.
Dim pMxApp As IMxApplication
Set pMxApp = Application ‘QI
Dim pRubberGeo As IRubberBand
C é ti d’
Création
d’une enveloppe
l
Dim pGeo As IGeometry
Set pRubberGeo = New RubberEnvelope
Set pGeo = pRubberGeo.TrackNew(MxApp.Display, Nothing)
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
pMxDoc.FocusMap.SelectByShape pGeo, pMxApp.SelectionEnvironment, False
Dim pActiveView As IActiveView
Set pActiveView = pMxDoc.FocusMap
pActiveView.Refresh
129
d
de sélection
él ti
HB – Programmation d’ArcGIS – Support de cours
Interface IGraphicsContainer
Implémentée par les classes Map et PageLayout.
Gère l’affichage des éléments graphiques :
 Ajout
Aj t / Suppression
S
i
AddElement, AddElements
DeleteElement, DeleteAllElements
 Modification de l’ordre d’affichage
SendBackward, SendToBack
BringToFront, Bringforward
PutElementOrder
'Supprimer
pp
tous les éléments g
graphiques
p q
Set pMxDoc = ThisDocument
pMxDoc.ActiveView.GraphicsContainer.DeleteAllElements
pMxDoc.ActiveView.Refresh
'Mettre les éléments sélectionnés en arrière-plan
Dim pGCSelect As IGraphicsContainerSelect
Set pGCSelect = pGC 'QI
pGC.SendToBack pGCSelect.SelectedElements
pMxDoc.ActiveView.Refresh
130
HB – Programmation d’ArcGIS – Support de cours
65
Mise à jour de l’affichage
IActiveView::Refresh
 Redessine entièrement la zone d’affichage (pas optimal).
IActiveView::PartialRefresh
 Redessine seulement les ‘phases’ précisées.
IScreenDisplay::Invalidate
 Redessine un rectangle donné (enveloppe).
 Appelée par Refresh et PartialRefresh
IMxDocument::UpdateContents
 Met à jour la table des matières du document (liste des couches)
131
HB – Programmation d’ArcGIS – Support de cours
Exercice 11
 Créer un outil pour dessiner des éléments graphiques simples.
 Transformer un point écran en point carte.
 Ajouter un nouvel élément graphique sur la zone d'affichage.
 Changer la couleur d'un symbole en appuyant sur une touche du clavier.
 Mettre à jour la barre d’état.
 Créer différents types de RubberBand suivant une touche pressée au clavier.
132
HB – Programmation d’ArcGIS – Support de cours
66
Interfaces standard et évènementielles
Standard (inbound interface)
Code client appelle propriétés et
méthodes de la classe serveur.
Sub AjouterCouche(aLayer)
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
pMxDoc.FocusMap.AddLayer aLayer
End Sub
Evènementielle (outbound interface)
La classe fait appel au code client.
Function MxDocument_OpenDocument() As Boolean
frmSalut.Show vbModal
End Function
133
HB – Programmation d’ArcGIS – Support de cours
Utilisation des interfaces évènementielles
Déclarations de variable :
 Au niveau du module.
 En utilisant le mot-clé WithEvents.
 Sur le nom de l’objet (interface évènementielle
par défaut) ou le nom entre parenthèses sur le
diagramme si plusieurs interfaces évènementielles
sur le même objet.
Private WithEvents m_pActiveViewEvents As Map
Private WithEvents m_pMapEvents As MapEvents
Dans l’aide VB, rechercher Map ou
MapEvents plutôt que le nom de l’interface
indiquée par le diagramme.
134
HB – Programmation d’ArcGIS – Support de cours
67
Réaction à un évènement
 Affectation d’une variable déclarée avec WithEvents sur un objet
enclenche la « veille » des événements implémentés par cet objet.
 Généralement affectée à ll’ouverture
ouverture du document.
‘Déclaration au niveau du module
Private WithEvents m_pActiveViewEvents As Map
Private Function MxDocument_OpenDocument() As Boolean
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Set m_pActiveViewEvents = pMxDoc.FocusMap ‘Evénements surveillés.
End Function
Si l’on veut suivre le bloc de données actif, quel qu’il soit
il faudra réaffecter la variable évènement s’il change.
Private Sub m_pActiveViewEvents_ItemAdded(ByVal Item As Variant)
MsgBox "Ah aaaahh je t'ai vu, tu viens d’ajouter une couche !"
End Sub
135
HB – Programmation d’ArcGIS – Support de cours
Exercice 12
 Déclarer une variable sur une interface évènementielle
évènementielle.
 Affecter une variable pour coder les évènements d'une couche.
 Affecter l'étendue de la fenêtre graphique selon la visibilité de la couche.
 Explorer les évènements de la sélection et du catalogue.
136
HB – Programmation d’ArcGIS – Support de cours
68
10. Éléments de
mise en page
HB – Programmation d’ArcGIS – Support de cours
Sommaire
 Modèle objet simplifié.
 Eléments cartographiques (FrameElements)
(FrameElements).
 Ajout d’éléments cartographiques à la mise en page.
 Accéder aux éléments d'un objet StyleGallery.
 Les objets StyleSelector.
 Imprimer et exporter une mise en page.
138
HB – Programmation d’ArcGIS – Support de cours
69
Mxdocument
Modèle objet simplifié
PageLayout
Geometry
Element
*
*
Map
FrameElement
GraphicElement
MapSurround
*
MapFrame
ScaleBar
TableFrame
ScaleLine
Legend
OLEFrame
MapTitle
MapSurroundFrame
Extrait des diagrammes ArcMap UI, Carto / Map and
Page Layout, Carto / Map Elements
MarkerNorthArrow
139
Etc.
LegendFormat
Etc.
LegendItem
HB – Programmation d’ArcGIS – Support de cours
Éléments cartographiques (FrameElements)
 Mis à jour dynamiquement en fonction des
changements opérés dans le bloc de données.
 Conteneurs pour des blocs de données, des
éléments d’habillage de carte (MapSurrounds),
des objets d’autres applications ou des tables
de données.
MapSurround
MapSurroundFrame
140
HB – Programmation d’ArcGIS – Support de cours
70
Les classes « StyleGallery »
MxDocument
StyleGallery
*
EnumStyleGalleryItem
StyleGalleryItem
énumération
 StyleGallery donne accès à ll’énumération
de tous les Items d’une GalleryClass
donnée.
 Permet d’exploiter les bibliothèques de
style livrées avec ArcMap.
(OMD Carto Miscellaneous)
141
HB – Programmation d’ArcGIS – Support de cours
Utilisation des symboles de la
bibliothèque
1. Référencer l’objet StyleGallery
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Dim pGallery As IStyleGallery
Set pGallery = pMxDoc.StyleGallery
2. Récupérer l’énumération des éléments du style.
‘Récupérer la classe flèches Nord de ESRI.style
Dim pEnumNorth As IEnumStyleGalleryItem
Set pEnumNorth = pGallery.Items _
("North
(
North Arrows",
Arrows , "ESRI
ESRI.style
style",
, "Default")
Default )
Nom de la classe de style
Nom du fichier .style
( "“ pour ‘tous les styles’)
Nom de la catégorie de
style ( "“ pour ‘toutes les
catégories’)
Depuis ArcMap : Outil / Styles / Gestionnaire de styles
142
HB – Programmation d’ArcGIS – Support de cours
71
3. Référencer un élément (Item) du style : par son nom ou par son rang.
Dim pNorthItem As IStyleGalleryItem
Set pNorthItem = pEnumNorth.Next
'Récupérer la flèche nommée "ESRI North 3"
Do Until pNorthItem Is Nothing
If pNorthItem.Name = "ESRI North 3" Then
Exit Do
End If
Set pNorthItem = pEnumNorth.Next
Loop
Ou boucle For..Next pour
récupérer le nième élément
4. Obtenir le symbole à partir de l’objet StyleGalleryItem
Dim pArrow As INorthArrow
Set pArrow = pNorthItem.Item
5. Ajouter l’élément à la mise en page
'Associer l'objet MapSurround à l'objet Map
Set pArrow.Map = pMxDoc.FocusMap
'Créer un objet MapSurroundFrame
Dim pMSFrame As IMapSurroundFrame
Set pMSFrame = New MapSurroundFrame
'Placer l'élément (Flèche nord) dans un conteneur
Set pMSFrame.MapSurround = pArrow
'Référencer le GraphicsContainer de la mise en page
Dim pGContainer As IGraphicsContainer
Set pGContainer = pMxDoc.PageLayout
'Ajouter le MapSurroundFrame à la mise en page
pGContainer.AddElement pMSFrame, 0
Utiliser la propriété Geometry
de l’élément pour indiquer sa
position sur la page.
143
HB – Programmation d’ArcGIS – Support de cours
Les objets de type StyleSelector
 Laisser à l’utilisateur le choix des éléments de mise en page.
 Appel de boîtes de dialogue standard.
'L'utilisateur
L utilisateur choisit une flèche
Dim pNorthSel As IStyleSelector
Set pNorthSel = New NorthArrowSelector
Dim fChoix As Boolean
fChoix = pNorthSel.DoModal(Application.hWnd)
If Not fChoix Then Exit Sub
1
6
2
7
3
8
1. Symbole d'arrière plan d'un bloc de données (remplissage)
4
2. Symbole du contour du bloc de données (linéaire)
3. Symbole textuel (pour les éléments textuels de la mise en page...)
4. Format des éléments de légende
5. Graticule, carroyage ou repère d'index des blocs de données
6. Flèches du nord
7. Barres d'échelle
8. Symboles textuels pour les échelles sous forme de ratio
9. Symbole des ombres portées des blocs de données (remplissage)
9
'Récupération de l’objet sélectionné
Dim pNArrow As INorthArrow
Set pNArrow = pNorthSel.GetStyle(0)
144
5
(OMD CartoUI)
HB – Programmation d’ArcGIS – Support de cours
72
Impression d’une mise en page
Application
Mode d’impression donné par une instance
d’une classe fille de Printer :
 PostScript (Ps).
 Windows (Enhanced Metafile).
 ArcPress (extension ArcGIS).
IPrinter
Printer
EmfPrinter
PsPrinter
ArcPressPrinter
Application
Paper
Classe Paper : gère les paramètres d'impression (nom de l'imprimante,
taille du papier...) et mise en page.
Impression vers un fichier ou vers une imprimante.
Extrait du diagramme Output
145
HB – Programmation d’ArcGIS – Support de cours
Exportation d’une mise en page
IExport
Export
Application
ExportVector
ExportImage
ExportSVG
ExportTiff
ExportAI
ExportPS
ExportEMF
ExportPDF
ExportJpeg
ExportGIF
ExportBMP
E
ExportPNG
tPNG
 Nombreux formats images ou vecteurs disponibles :
PDF, JPEG, TIFF, PostScript, EMF, etc.
 Extension ArcPress (outil de rastérisation spécialisé)
Extrait du diagramme Output
146
HB – Programmation d’ArcGIS – Support de cours
73
Exercice 13
 Rédiger du code qui ajoute un élément à un mise en page
p
 Créer un élément textuel simple
 Référencer les éléments d'un objet StyleGallery
 Ajouter une flèche du nord à la mise en page
 Exporter la mise en page
147
HB – Programmation d’ArcGIS – Support de cours
74
Epilogue
De très nombreuses classes d’objets n’ont pas été évoquées (rasters...)
toutefois l’approche est toujours identique :
 observation
b
i d
du modèle
dèl objet,
bj d
des iinterfaces,
f
propriétés
ié é et méthodes
é h d et d
des
relations avec les autres classes.
Les versions successives d’ArcGIS développent et modifient le modèle objet.
Il a été annoncé que VBA ne sera plus supporté dans la prochaine version
d’ArcGIS, pour des raisons plus commerciales que techniques semble-t-il.
Python ne le remplace encore qu’incomplètement et nécessite une
récriture complète du code existant. Visual Basic pour .Net dont la syntaxe
est proche de VBA est une alternative.
L’étape suivante est l’utilisation d’un environnement de développement
permettant d’exploiter toutes les possibilités offertes par les ArcObjects :
extension du modèle, création de DLL...
Bonne route !
149
HB – Programmation d’ArcGIS – Support de cours
75
Annexes
HB – Programmation d’ArcGIS – Support de cours
76
Bibliographie et webographie
Programmation d'ArcGIS avec les ArcObjects
Formations ESRI France, Support de cours (2003).
Introduction à la programmation en VBA sur ArcGIS,
Nathalie Sillard, Support de cours ENSG (2003),
di
disponible
ibl en dé
décembre
b 2011 iicii : http://foro.gabrielortiz.com/comparte/repositorio/Rob_Zombie/Cours_vba.pdf
htt //f
b i l ti
/
t /
it i /R b Z bi /C
b df
Exploring ArcObjects, vol. 1 et 2
Michael Zeiler, ESRI Press (2001), en PDF sur le CD ArcGIS v. 8x, Digital books and Sample Maps
ArcGIS Desktop Developer Guide
PDF livré avec version 9.0 et 9.1
Getting To Know ArcObjects - Robert Burke, ESRI Press (2003)
ArcGIS Resource Center : http://help.arcgis.com/en/sdk/10.0/vba_desktop/ao_home.html
ArcObjectsOnline (8.x), http://arcobjectsonline.esri.com/
et ArcgisDeveloperOnline (9.x), http://arcgisdeveloperonline.esri.com/ existent toujours mais ne sont plus mis à jour)
Support ESRI, http://support.esrifrance.fr et http://support.esri.com
Getting Started With VBA,
AppDev.com, Support de cours, PDF sur le CD ArcGIS v. 8x, VBA Toolkit)
153
HB – Programmation d’ArcGIS – Support de cours
77
DeliriousPowerpointObjectsFactory
ISpatialReferenceFactory
Pays
Couleur
IAnimal
Aboyer
Nothing

Fields
Aarrghhhhh !
IChien
Miauler
Exercice
IAnimal
Manger
155
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
HB – Programmation d’ArcGIS – Support de cours
78