Vous êtes sur la page 1sur 82

Cours

Introduction ArcGIS pour le dveloppeur

Alexandre Pauthonnier Juillet 2010

TABLES DES MATIERES Introduction ................................. 4 I. Prsentation brve dArcGIS ............... 5


I.1. Les I.2. Les I.2.1. I.2.2. I.3. Les I.4. Les applications bureautique................................................5 applications serveur....................................................6 ArcIMS ..................................................................7 ArcGIS Server ...........................................................7 applications mobiles...................................................15 services web hbergs..................................................15

II. Prsentation des diffrents types de dveloppement. .............................. 18


II.1. Produits bureautiques.....................................................18 II.1.1. Personnalisation et extension .........................................18 II.1.1.1. Personnalisation avec VBA .........................................18 II.1.1.2. Extension avec VB ou .NET .........................................21 II.1.1.3. Dveloppement doutils de gotraitement ...........................22 II.1.2. Cration dapplications ...............................................26 II.2. ArcGIS Serveur ........................................................27 II.2.1. Utilisation de lassistant ..........................................27 II.2.2. APIs Javascript .......................................................29 II.2.3. APIs Flex et SilverLight ..............................................33 II.2.3.1. API Flex ..........................................................33 II.2.3.2. API SilverLight ...................................................35 II.2.4. le Web ADF (Application Development Framework) ........................35 II.2.5. Rsum ................................................................37

III. Le dveloppement bureautique avec lAPI ArcObjects .................................. 39


III.1. Les ArcObjects...........................................................39 III.2. La norme COM.............................................................40 III.3. Les interfaces...........................................................41 III.3.1. Dfinition ...........................................................41 III.3.2. Un monde orient-objet ...............................................42 III.3.3. Linterface IUnknown et les autres ...................................43 III.4. Dvelopper avec les ArcObjects...........................................43 III.4.1. Les diagrammes de classe .............................................43 III.4.2. Considrations sur lutilisation des ArcObjects en environnement VB. .44 III.4.3. Pratique des concepts de classe et dinterface .......................47

ANNEXES ..................................... 50
Annexe 1 : personnalisation Arcgis bureautique en VBA...........................50 Annexe 2 : extension ArcGIS bureautique avec Microsoft Visual Basic 6...........53 Annexe 3 : extension ArcGIS bureautique avec Microsoft .Net.....................58 Annexe 4 : retour sur la programmation dvnements avec lAPI ArcObjects.......66 Annexe 5 : Cration dune application web avec visual studio 2005 partir du template dapplication livr avec ArcGIS Server.................................70 Annexe 6 : dmarrer avec lAPI Javascript.......................................74 Partie 1 : inclure une carte dans une page web ................................74 Code : ......................................................................74 Commentaires : ..............................................................74 Partie 2 : programmer un vnement ............................................75 Commentaires : ..............................................................76 Partie 3 : ajouter des donnes servies dynamiquement en WMS ...................76 Code : ......................................................................76 Commentaires : ..............................................................78 Partie 4 : ajouter des donnes en cache sur un serveur (ex: les donnes OpenStreetMap). Utiliser les widgets du Dojo. .................................78 Code : ......................................................................78 Commentaires : ..............................................................81

Juillet 2010 v3.1

Partie 5 : faire afficher les rsultats dune requte vers un serveur ArcGIS Serveur sur un fond Google Maps ...............................................82 Code : ......................................................................82 Commentaires : ..............................................................83

Alexandre Pauthonnier

3/82

Juillet 2010 v3.1

Introduction
Laptitude programmer ou dvelopper en surcouche dun noyau SIG est un plus indniable : bien souvent, cest la source dun gain de productivit important. En effet, un utilisateur de SIG est amen dans lexercice de son mtier reproduire un grand nombre de fois des oprations ou des traitements semblables. Sil dispose doutils qui automatisent tout ou partie de ces traitements, cest un gain de temps considrable. Par ailleurs, lvolution rcente du monde de linformation gographique vers la mise en ligne de donnes et de services (sur le web ou bien au sein de rseaux dentreprises) na fait quaugmenter les besoins en dveloppement dans ce secteur dactivits. La tendance est aujourdhui la cration dinterfaces clientes, entirement personnalises, rpondant au plus prs aux besoins de lutilisateur. Ces interfaces consomment des ressources (services web), locales ou distantes, exposes travers des API. La mise en place de tout cela est du ressort du dveloppeur. Face ces enjeux, les produits ArcGIS apportent des solutions compltes et de grande qualit. On observe tout dabord que la gamme couvre tous les types de besoin. Pour ce faire, Esri utilise des outils modernes adapts aux standards actuels des technologies de linformation. Ces standards tant en perptuelle volution, ArcGIS volue lui aussi au mme rythme ; ainsi ArcGIS a pris le virage du web il y a quelques annes, puis celui du web 2.0 avec la gnralisation de technologies telles Ajax ou lutilisation de protocoles interoprables tels SOAP ou Rest. On observe ensuite que tous les produits sont ouverts : le dveloppeur peut donc personnaliser, tendre, voire remanier profondment le SIG tel quEsri la conu. Le tout en utilisant les langages (VB, VB.NET, Java, Python) et les environnements de dveloppement (Microsoft Visual Studio, environnements Java) les plus populaires. Dun point de vue architecture logicielle, ArcGIS a t conu comme un ensemble de composants COM, une norme qui reprend les grands principes de lorient-objet et qui assure une rutilisabilit maximale de ces composants. Ces derniers sont accessibles aux dveloppeurs travers une API : les ArcObjects. Cette API sadresse essentiellement aux dveloppeurs de fonctions mtiers. Pour mettre en place des applications aux fonctionnalits plus gnriques, ESRI propose dautres APIS, notamment pour la cration dapplications de webmapping. La force dArcGIS tient aussi en grande partie sa large communaut dutilisateurs. Cette communaut reprsente une aide prcieuse pour le dveloppeur novice ou chevronn, et ce notamment travers les nombreux codes source tlchargeables.

Alexandre Pauthonnier

4/82

Juillet 2010 v3.1

I. Prsentation brve dArcGIS


ArcGIS est une suite intgre dapplications logicielles SIG. Les diffrents produits permettent dexploiter les donnes gographiques dans un contexte bureautique, travers un rseau intranet ou internet ou encore sur le terrain. Lensemble forme un systme complet de cration, dadministration, dexploitation et de mise disposition de contenu gographique (donnes ou service).

On distingue : Les applications Les applications Les applications Les services web

bureautiques serveur mobiles hbergs

I.1. Les applications bureautique


Il sagit dabord dArcGIS bureautique (ou ArcGIS Desktop) : une suite compose dArcMap, ArcCatalog, ArcGlobe et ArcScene. Ces applications permettent de Grer les donnes gographiques, i.e. crer et administrer des bases de donnes (ou bien des sources de type fichier) contenant de linformation gographique, crer et mettre jour la smantique, la gomtrie, la topologie et les mtadonnes Intgrer des donnes existantes archives dans divers formats Alexandre Pauthonnier 5/82

Juillet 2010 v3.1

Diffuser les donnes dans divers formats Crer des cartes ou des globes Prtraiter et analyser les donnes Crer des modles de gotraitement

Il existe 3 niveaux de licence qui donnent accs plus ou moins doutils : ArcView, ArcEditor et ArcInfo. Il sagit dun produit cl en main, qui peut toutefois tre compltement adapt aux besoins de lutilisateur. On trouve galement dans cette famille dapplications les produits dvelopps avec ArcGIS Engine. ArcGIS Engine, cest un run-time et un kit de dveloppement destins aux dveloppeurs et conus pour la cration d'applications bureautique personnalises intgrant des fonctions SIG (voir un exemple dapplications). Les produits dvelopps avec Engine sont des progiciels mtiers qui sont destins un public trs cibl. Enfin on trouve galement ArcGIS Explorer, une application que lon peut tlcharger gratuitement qui permet de visualiser les donnes gographiques mais aussi, dans une certaine mesure, de les exploiter. On peut notamment crer des cartes en mlant des sources de donnes diverses (locales, services web), utiliser quelques outils simples danalyse spatiale (recherche sur critre de proximit). A noter que toutes les applications bureautique ont la capacit de jouer le rle de clients web ou intranet et ainsi dexploiter les services web diffuss par des serveurs gographiques : ArcGIS Server, ArcIMS, ArcGIS online pour les serveurs Esri, serveurs WMS et WFS pour les serveurs OGC. De nombreux tutoriels, sous forme de documents pdf et de vido sont accessibles en ligne ladresse suivante : http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=Tutorials Ces tutoriels bureautique. couvrent lensemble des fonctionnalits offertes par la suite

I.2. Les applications serveur


La technologie SIG serveur rpond dautres problmatiques que la technologie bureautique : partager le SIG intgrer le SIG dans le systme dinformation de lentreprise.

Il sagit de mettre disposition de plusieurs membres dune mme organisation, ou de plusieurs organisations, voire un public aussi large que possible des ressources de nature gographique. Ces services peuvent tre des cartes, de la donne brute, des traitements sur les donnes. Cette technologie sappuie sur le modle de communication client-serveur utilisant les protocoles HTTP et TCP/IP et est btie en cohrence avec les normes et standard dvelopps par le W3C (World Wide Web consortium) et lOGC (Open GIS Consortium). Elle est ainsi conue pour sintgrer au SI de lentreprise : elle est notamment interoprable avec les toutes les applications web de lentreprise qui obissent aux mmes standards (outils CRM de gestion de la relation client, outils ERP de planification des ressources, ) Cette technologie serveur est complmentaire de la technologie bureautique, en ce sens quelle permet de diffuser ce qui a t cr avec les outils bureautique : les cartes, les globes, les modles danalyse et de gotraitement. Les produits serveur permettent enfin de dployer des outils qui rpondent prcisment au besoin et au profil de leurs utilisateurs. Laccs aux services hbergs sur le serveur (donnes, cartes, traitements) se fait le plus souvent travers des clients web lgers dont linterface pure ne propose que les seules fonctionnalits utiles.

Alexandre Pauthonnier

6/82

Juillet 2010 v3.1

Il est galement possible daccder aux services travers dautres clients (dits lourds ) des clients bureautique (ceux dcrits au paragraphe prcdent) des clients mobiles ArcGIS comprend 2 produits serveurs : ArcGIS Serveur et ArcIMS qui ne sinscrivent pas dans la mme dynamique. ArcGIS Serveur est la technologie innovante tandis quArcIMS est une technologie qui nvolue plus et qui nest maintenue que par soucis dassurer la continuit du service vis--vis des clients. Celui qui dveloppe aujourdhui un nouveau site web avec une dimension cartographique avec un produit Esri doit utiliser ArcGIS Server.

I.2.1. ArcIMS
Quelques mots de prsentation malgr tout. Cest un serveur cartographique permettant de publier de la cartographie dynamique (webmapping) ainsi que des catalogues de mtadonnes. Loutil est fourni avec un assistant de cration de site web. Toutefois la mise au point dun site finalis implique souvent la programmation de fonctionnalits mtier ct serveur et presque toujours un minimum de personnalisation de linterface ct client. Ct client, on programme en HTML, CSS, Javascript; ct serveur, le site peut tre dvelopp en ASP.NET (Active Server Page, technologie Microsoft) ou en JSP (Java Server Page, technologie Java). La communication client-serveur repose sur un flux XML (ArcXML). On peut accder aux services cartographiques ArcIMS avec un simple navigateur, mais aussi avec les produits bureautiques ou serveur.

I.2.2. ArcGIS Server


Cest un serveur SIG part entire, c'est--dire un ensemble doutils et de technologies web permettant le partage de ressources SIG sur un rseau. Lide est de donner accs travers un navigateur aux mmes fonctionnalits que celles offertes par les SIG bureautiques. Un serveur SIG nest donc pas un simple visualisateur de cartes (et encore moins un simple serveur web) ; cest un outil permettant dinteragir pleinement avec linformation gographique et notamment des fins danalyse et daide la dcision. Un usage grand public dun tel serveur serait par exemple de permettre lidentification du bureau de poste le plus proche dun lieu donn puis le calcul et laffichage de litinraire pour sy rendre.

Alexandre Pauthonnier

7/82

Juillet 2010 v3.1

Comme toutes les solutions webs, une solution ArcGIS Server sinscrit dans une architecture client-serveur reposant sur le protocole de communication HTTP. La partie serveur est constitue de programmes et de donnes hberges physiquement sur une ou plusieurs machines, dites serveur. Le serveur a ainsi pour tche dhberger les ressources SIG mais aussi de les rendre accessibles. Cest la partie client qui accde aux ressources. Une partie des traitements peut ventuellement tre dlgue par le serveur au client. Toutefois, selon la philosophie dune telle architecture, cest le serveur qui excute la plupart des traitements, le client se contentant dafficher les rsultats. Le premier rle dArcGIS Server est dhberger les ressources SIG, lesquelles sont de diffrentes natures : des donnes brutes (fichiers ou tables de bases de donnes) des donnes cartographies (documents cartographiques, globes 3D) des go-traitements ou fonctions permettant dinteragir et donc dexploiter les donnes (la bote outils du SIG) des go-traitements personnaliss, i.e. des chanes de traitements SIG capable de produire de nouvelles informations partir de donnes en entre. N.B : les ressources peuvent tre rparties en deux catgories : celles qui sont fournies avec ArcGIS Server (les outils) et celles que lon cre (les cartes, les bases de donnes, les traitements mtier). Pour crer une ressource, on utilise la suite ArcGIS bureautique (ArcCatalog, ArcMap, ArcGlobe, Modelbuilder et Python pour les processus de go-traitement). Lorsque les donnes spatiales sont archives dans une base de donnes multiutilisateurs, il est ncessaire dinstaller ArcSDE pour faire le lien entre ArcGIS Serveur et le SGBD (Oracle, SQL Server, PostgreSQL). Si le besoin ne justifie pas le recours un SGBD dentreprise, il est tout fait possible darchiver les donnes gographiques dans des formats fichiers ou godatabase personnelle. Afin de rendre les ressources partageables, le serveur expose les ressources sous forme de services. Un service peut tre vu comme la reprsentation normalise dune ressource, rendue de ce fait consommable par des clients sur un rseau ; le partage peut tre limit une entreprise (intranet, rseau local), tendu un ensemble de partenaires (extranet, accs scuris par identifiant et mot de passe) voire tendu tout linternet. Cest le deuxime rle jou par le serveur SIG : publier les ressources. La logique de service permet de passer dune architecture client-serveur une architecture distribue (SOA, architecture oriente service). Dans une telle architecture, les donnes et les traitements requis par un client peuvent tre stocks physiquement sur des machines diffrentes pourvu que celles-ci soient connectes par le rseau. La logique de service implique galement la normalisation des accs la fonctionnalit : lobjectif est de permettre diffrents types de clients, lourds, riches, lgers, mobiles de consommer le service ; cela passe par lutilisation de protocoles de communication standardiss et par la normalisation des interfaces qui exposent les ressources. ArcGIS Server permet essentiellement de publier des services de type cartes 2D (map services), cartes 3D (globe services), image, go-traitement (geoprocessing service), gocodage, geodata et gomtrie. Pour publier un map service, il faut dj crer un document ArcMap (mxd). Il faut ensuite le stocker dans un rpertoire accessible par ArcGIS Server et sassurer que les donnes gographiques quil contient sont galement accessibles par ArcGIS Server. Pour publier un geoprocessing service, il y a 2 faons de procder : soit on cre une toolbox contenant un ou plusieurs outils (des modles crs avec ModelBuilder ou bien des scripts Python) et on la publie directement. Soit on ajoute la toolbox un document ArcMap sous forme dune tool layer et on publie le document. Dans les deux cas, le serveur ralise un traitement sur des donnes gographiques et renvoie un lot ou plusieurs lots de donnes traites. Ce qui diffre cest la faon dont on accde aux donnes : dans le premier cas, les donnes doivent tre charges en mmoire, tandis que dans le second elles le sont dj si elles figurent en tant que couches dans le document. Si le gotraitement est coteux en temps dexcution, on Alexandre Pauthonnier 8/82

Juillet 2010 v3.1

privilgiera donc la deuxime solution. Il est possible aussi dassocier un geoprocessing service un result map service. Par dfaut, les donnes renvoyes par le service de gotraitement sont non symbolises, elles sont livres en vecteur au client: charge lui de les symboliser. Lassociation un result map service permet au serveur de cartographier le rsultat du gotraitement : le client na plus qu afficher limage fournie. Pour publier un geocode service, il faut crer au pralable un locator ou localisateur dadresses avec ArcCatalog. Un tel objet permet de dcrire une mthode de gocodage (ex : gocodage ladresse postale) par rapport un rfrentiel (ex : la BD Adresse de lIGN). Les geodata service permettent dinteragir avec les donnes dune geodatabase par le biais dArcGIS Server. Ils permettent lexploitation (requtes) et ladministration (extraction, rplication, ) de donnes distance par le rseau. L encore il y a deux faons de procder : soit on publie directement une geodatabase, soit on ajoute un document ArcMap les tables que lon souhaite publier et on publie le document. Les geometry service sont pour certains gotraitements simples une alternative aux geoprocessing service. Ils permettent de raliser des calculs relatifs la gomtrie dune ou plusieurs entits : buffer, simplification de polyligne, changement de systme de coordonnes, Il ne peut y avoir quun seul geometry service par serveur. Il doit ncessairement sappeler geometry. Pour une prsentation plus complte sur les services, consulter en ligne le centre de ressources dArcGIS sur ce sujet. On administre les services (cration, arrt, dmarrage, paramtrage) laide dArcCatalog, dArcMap, ou encore dune application web, livre avec ArcGIS Server, le Manager. Ainsi quon la voqu prcdemment, la logique de service va galement de pair avec celle dinteroprabilit. Il est tout fait possible de concevoir une architecture dans laquelle les clients qui consomment les services dArcGIS Server sont des clients bureautiques ESRI (ArcMap, ArcGlobe ), ou encore le client lourd librement tlchargeable ArcGIS Explorer. En effet, ces clients ESRI ont la capacit afficher et manipuler lidentique des donnes gographiques quelles soient stockes en local ou bien servies par un map service. Idem pour les gotraitements quils soient locaux ou sous forme de geoprocessing services. Dans ce cas prcis, la communication se fait selon un protocole binaire propritaire. Toutefois, rappelons que les ambitions dun SIG serveur vont bien au-del de cette utilisation propritaire. Il sagit de donner daccder au SIG travers des clients moins coteux, plus nombreux et plus cibls fonctionnellement : les principaux consommateurs de services ArcGIS Server sont donc les navigateurs webs, et plus prcisment des applications personnalises dveloppes dans diffrents langages. Lautre objectif est de dcloisonner le SIG, et notamment de donner laccs la donne quiconque peut en avoir lusage quel que soit les outils quil possde. ArcGIS Server a t conu pour rpondre ces besoins. Par dfaut les services crs sont accessibles selon deux protocoles : le protocole binaire voqu plus haut et SOAP. SOAP est un protocole standardis dans lequel la communication est assure par des requtes HTTP et des flux XML. Tous les langages serveur (asp, php, jsp) utiliss pour dvelopper une application web offrent des objets capables de gnrer et parser des messages SOAP/XML. Il est donc possible de dvelopper ct serveur une application consommant des services ArcGIS Server. Il est galement possible de publier les services en REST. REST est galement un protocole standardis daccs des services webs : en REST, chaque ressource est accessible simplement par son URL. Les ressources sont ranges dans une arborescence de dossiers. Laccs en REST un service se fait donc laide de requte HTTP : cest ainsi par exemple que fonctionne lAPI Google Maps qui propose des services de gocodage, de calcul ditinraires, de localisation 3D. Les possibilits de dveloppements dapplication sont donc encore plus grandes en REST quen SOAP : en effet, pour consommer il suffit dtre capable denvoyer une requte HTTP ; cest possible avec un client Javascript AJAX. On peut donc dvelopper ct client.

Alexandre Pauthonnier

9/82

Juillet 2010 v3.1

N.B : si vous souhaitez approfondir ces notions, vous pouvez consulter le site viamichelin (http://doc.apir.viamichelin.fr/web/api-rest) qui dcrit de manire trs dtaille ses services REST et SOAP. Linteroprabilit se manifeste galement par la publication des services selon les normes OGC. Ces normes (WMS, WFS, WCS) permettent respectivement de publier les couches dune carte sous forme dune image, les donnes spatiales sous forme de vecteur ou de raster et ce dans une sorte desperanto, reconnu directement par tous les SIG, propritaires ou Open Source. Contrairement ce qui a t vu prcdemment, il nest pas ncessaire de dvelopper une application pour consommer le service, il suffit dutiliser son SIG habituel (MapInfo, QGIS, GeoConcept, ArcGIS, Geomedia, ) Cette publication sous forme de service OGC nest lindiquer explicitement au moment de la publication. pas automatique : il faut

En rsum, les services publis par ArcGIS Server sont consommables sur le web (ce sont donc des Web services) par des clients de tout type. A chaque service est associe une url selon le modle suivant http://<nom du serveur>/<nom service>/<type de service> de linstance arcgis server>/services/<nom du

et plusieurs urls complmentaires pour chaque type dinteroprabilit http://<nom du serveur>/<nom de linstance service>/<type de service>/<capability> o capability dsigne le type dinteroprabilit soit pour un service de carte nomm test_arcpad, contenant des couches de type vecteur et raster, et hberg sur le serveur monserveur les urls suivantes interoprabilit ArcGIS : http://monserveur/arcgis/services/test_arcpad/MapServer interoprabilit WMS : http://monserveur/arcgis/services/test_arcpad/MapServer/WMSServer interoprabilit KML : http://monserveur/arcgis/services/test_arcpad/MapServer/KmlServer interoprabilit WFS : http://monserveur/arcgis/services/test_arcpad/MapServer/WFSServer interoprabilit WCS : http://monserveur /arcgis/services/test_arcpad/MapServer/WCSServer Ces url ne peuvent pas tre requtes directement par un navigateur. Il suffit nanmoins dajouter /?wsdl chacune des url indiques ci-dessus, pour obtenir en retour la description des services sous forme de fichiers xml. Ce sont des requtes SOAP. Pour accder en REST aux services, on utilise le service de catalogage REST du serveur ArcGIS lui-mme accessible par lurl http://<nom du serveur>/ArcGIS/rest/services. Lexemple ci-dessous nous montre les services hbergs par les serveurs ArcGISOnline (http://sampleserver1.arcgisonline.com/ArcGIS/rest/services) : arcgis server>/services/<nom du

Alexandre Pauthonnier

10/82

Juillet 2010 v3.1

Les services sont ici organiss dans une arborescence de dossiers. Un systme dhyperliens permet daccder la description de chaque service hberg, ainsi qu chacune des oprations exposes. N.B : il est ncessaire dexcuter la web application post-installation pour activer lAPI Rest. Afin de contrler lexcution correcte de cette postinstallation, ouvrir le fichier rest.config stock dans le rpertoire ArcGIS du serveur web IIS. Linteroprabilit est un des nombreux paramtres considrer lorsquon publie une ressource. Il convient galement de choisir une stratgie concernant le partage entre les clients de la CPU de la machine serveur : limiter dune part laccs un nombre restreint dutilisateurs ; ouvrir ensuite laccs en mode pool ou non pool. Dans le premier cas, tous les clients dun mme service interagissent avec le mme processus ct serveur (un seul SOC, server object container, pour tous les clients dun mme service, voir figure ci-dessous) ; dans le deuxime cas, chaque client se voit attribuer un processus diffrent (autant de SOCs que de connexions ouvertes). La deuxime solution garantit certes des temps de rponse meilleurs pour le client mais elle ncessite beaucoup de RAM sur le serveur : un service de carte ouvert pour 5 connexions en mode non pool consomme grosso modo 5 fois lespace ncessaire la mise en mmoire du document ArcMap.

Alexandre Pauthonnier

11/82

Juillet 2010 v3.1

Il convient aussi de rflchir lopportunit de pr-calculer un cache pour les donnes cartographiques de type image. Selon ltendue et la rsolution des donnes publier, un cache, i.e. le calcul et le stockage sur le serveur de dalles associes diffrentes chelles pr-dfinies peut amliorer considrablement les temps daffichage sur le poste client. Par dfaut, la cration dun service de carte ou dimages nentrane pas la cration automatique de cache. En labsence de cache, laccs aux donnes est rellement dynamique et le client peut donc demander afficher les donnes nimporte quelle chelle ; le serveur cre alors limage la demande et ladresse au client ; cest videmment plus long. La cration dun cache nest pas prise en charge par les interfaces dadministration (ArcCatalog ou Manager) ; il faut utiliser des outils ArcToolBox. Utiliser un cache peut tre vu comme une contrainte (affichage des chelles prdfinies) mais cela garantit une relle fluidit daffichage (Google Maps et Google Earth fonctionnent selon ce principe).

Le troisime et dernier rle dArcGIS Server consiste permettre la cration dapplications webs permettant dinteragir avec les services. Les services sont en effet destins tre consomms par une application cliente. Il peut sagir de clients sur tagre : suite ArcGIS bureautique (arcmap, arccatalog) Arcgis Explorer client nomade ArcPad client WMS (QGIS) client KML (Google Earth) Ou bien de clients personalises Client dvelopp avec lAPI Javascript AJAX OpenLayers Client dvelopp avec lAPI Javascript AJAX Google Maps Client mobile IPhone ou Android

Alexandre Pauthonnier

12/82

Juillet 2010 v3.1

Ainsi quon la dj dit, lutilisation dveloppement dun client personnalis.

dArcGIS

Server

passe

souvent

par

le

Le Manager propose une interface pour crer trs simplement un client lger consommant des ressources hberges en local ou sur dautres serveurs ArcGIS. Lapplication ainsi cre utilise ct serveur lAPI Web ADF (.Net ou Java selon linstallation du serveur), qui est une simplification de lAPI ArcObjects : son IHM est base de web controls, excutant des requtes en AJAX vers le serveur. Cest un client lger, car lessentiel des traitements SIG sont excuts ct serveur (en .Net ou Java). Cette application ne rpond pas tous les besoins dans la mesure o elle ne dispose que des fonctionnalits prvues en standard (navigation, interrogation, dition). Si lon souhaite disposer de fonctionnalits mtier, il convient de les dvelopper et des intgrer lIHM. Il y a alors plusieurs faons de procder. On peut modifier le template dapplication en insrant ses dveloppements. On peut aussi dfinir une IHM totalement diffrente. Pour des dveloppements lgers, on prfrera dvelopper ct client laide des API Javascript, Flex ou Silverlight. ArcGIS Server est commercialis en 3 niveaux de licence : Basique, Standard et Advanced. Le tableau suivant rcapitule les diffrentes fonctionnalits associes chacun des niveaux :
Advanced Gestion des donnes Standard Basique

Fournit des services de godonnes permettant aux administrateurs de publier des donnes gographiques pour extraction ou rplication. Stocke les donnes gospatiales dans un SGBDR, par exemple IBM DB2, IBM Informix, Oracle, Microsoft Access, Microsoft SQL Server ou PostgreSQL. Services Web SIG Prend en charge les services Web, dont les services de cartes, globes, d'imagerie, WMS, WFS-T, WCS, KML, gocodage et gotraitement. Les accs REST et SOAP, ainsi que les services de godonnes, sont inclus tous les niveaux. Cartographie Comprend des outils de cration d'applications web cartographiques riches fonctionnant dans des navigateurs Analyse spatiale Prend en charge les analyses et les gotraitements serveur, avec notamment des donnes vectorielles , des rasters, de la 3D , de l'analyse de rseau, ainsi que des modles, scripts et outils. Publication pour des clients Prend en charge un large ventail de clients, notamment ArcGIS Desktop, ArcGIS Explorer, ArcGIS for AutoCAD, et des applications bases sur des navigateurs web. Gestion des images Supporte un systme complet de gestion des images permettant la mise disposition de volumes d'images importants, exploitables sur des clients bureautiques, Web et d'imagerie. Fonctionnalits d'application Web

Alexandre Pauthonnier

13/82

Juillet 2010 v3.1

Comprend des outils et des tches, dont le zoom et les dplacements latraux, l'identification d'entits, la mesure des distances, la localisation d'adresses, les requtes et les recherches attributaires. Outils de dveloppement d'applications

Prend en charge les composants .NET et Java ADF, ainsi que les API ouvertes pour REST, Javascript et Flex. Les composants Enterprise JavaBeans ADF sont disponibles uniquement dans l'dition Avance. Analyse spatiale avance Intgre la modlisation et l'analyse spatiales avances, avec notamment l'analyse d'aptitude, le calcul remblais/dblais, les lignes de vises, la modlisation de terrain.

Fonctionnalit de mise jour de donnes gographique en mode Web

Prend en charge des tches de modification spatiale pour les applications, par exemple l'ajout, la modification et la suppression d'entits cartographiques telles que les points, les lignes et les polygones. Offre des fonctionnalits de mise jour web avances (capture, etc) Outils de dveloppement d'applications nomades

Comprend une application nomade prte l'emploi et configurable qui permet aux quipes d'excuter, distance, des requtes et des mises jour dynamiques des donnes du serveur. Administre partir d'ArcGIS Server, elle s'intgre parfaitement aux GPS et aux systmes d'entreprise. Fonctionnalits des applications SIG nomades

Propose des outils, dont un kit de dveloppement logiciel (SDK), permettant de grer et de dployer des applications personnalises, destines tre utilises sur des dispositifs nomades. Les applications nomades peuvent tre dployes sur des appareils dots de Windows CE ou Windows Mobile avec .NET Compact Framework 2.0, ou sur des PC dots de Windows XP ou Vista avec .NET Framework 2.0.

Du tableau prcdent, il ressort quil est ncessaire de disposer du niveau advanced pour mettre jour les donnes du serveur laide dune application web ou mobile. Il faut galement savoir que ldition concurrentielle de donnes suppose que les donnes sont stockes selon un mode darchivage compatible, en loccurrence un SGBD. La cration des ressources (carte, geodatabase) publiables sous forme de services suppose donc linstallation dArcSDE pour le SGBD choisi (Oracle, SQL Server, PostGreSQL). En rsum, il faut retenir quArcGIS Server consiste en un ensemble doutils permettant le stockage de ressources, ladministration de ces ressources et leur dploiement travers des applications webs. La mise en uvre dArcGIS Server sinscrit donc dans un processus trois temps : Llaboration de ressources SIG La publication des ressources en tant que services La consommation des services laide dune application cliente.

Alexandre Pauthonnier

14/82

Juillet 2010 v3.1

faisant intervenir des publics diffrents : crateurs ressources, dveloppeurs webs, utilisateurs in fine

et

administrateurs

de

On retiendra galement que les avantages dune solution SIG serveur solution bureautique tiennent essentiellement aux points suivants : Centralisation des ressources Facilit de partage des ressources Matrise de lactualit des donnes diffuses

sur

une

Le lien http://www.esri.com/software/arcgis/arcgisserver/demos.html donne accs une galerie de sites webs dvelopps partir de la technologie ArcGIS Server ainsi qu des vidos illustrant les principes du dveloppement dapplications de webmapping avec ArcGIS Server.

I.3. Les applications mobiles


Ces outils sont destins aux quipes de terrain, qui dans le cadre de leur activit sont amenes crer, mettre jour, afficher et ventuellement analyser des donnes gographiques ; le SIG mobile est toujours coupl un GPS pour la golocalisation la vole des donnes numrises. Il y a 2 types doutils : ArcPad qui est un logiciel cl en main et ArcGIS Mobile un kit de dveloppement permettant de dvelopper des applications nomades centralises et synchronises avec un serveur ArcGIS Server. Il est possible dinterfacer ArcPad avec une solution ArcGIS Server, permettant ainsi aux quipes de terrain de travailler en direct sur les donnes hberges par le serveur. La mise en uvre dune telle solution ncessite de publier les donnes mettre jour sur le terrain sous forme dun service de carte (document Arcmap) compatible pour un usage dans ArcPad. La cration dun tel service ncessite lajout de lextension ArcPad pour ArcGIS Server. La mise jour de donnes par des quipes de terrain suppose galement un accs concurrentiel une mme source de donnes, donc un stockage SGBD et un accs ArcSDE.

I.4. Les services web hbergs


ArcGIS Online est un ensemble de services web de contenu (des donnes, des cartes et des globes) hbergs par des serveurs Esri que lon peut consommer dans un client bureautique ou bien dans une application web. Parmi les donnes proposes, on a par exemple un rseau routier mondial, avec deux niveaux de dtails : la rue pour lAmrique du nord, le Japon et un certain nombre de pays europens ; le rseau autoroutier et principal ailleurs. On trouve aussi la couverture mondiale SRTM 90m de rsolution. Les services ArcGIS online sont diffuss avec la technologie ArcGIS Server. Il y a deux types de service : les services standard auxquels on peut accder gratuitement et quon peut utiliser sans limitation au sein dune entreprise tant quon nen tire pas un revenu et les services premium qui donnent accs au niveau de dtail le plus grand. Pour accder aux services, se connecter au serveur ArcGIS Server laide de lurl ci-dessous (Arccatalog)

Alexandre Pauthonnier

15/82

Juillet 2010 v3.1

Les produits ArcGIS ont la capacit exploiter dautres services web hbergs que ceux publis par ArcGIS Server. Cest notamment le cas pour les services ArcIMS (Geography Network) et tous les services diffuss selon les normes OGC. Lillustration suivante montre une connexion WMS au serveur de cartes du BRGM (http://ogcpublic.brgm.fr/geologie?).

Alexandre Pauthonnier

16/82

Juillet 2010 v3.1

Alexandre Pauthonnier

17/82

Juillet 2010 v3.1

II. Prsentation des diffrents types de dveloppement.


La gamme dapplications ArcGIS offre plusieurs possibilits de dveloppement. Toutes les applications ArcGIS sont conues partir des mmes composants : les ArcObjects, lesquels portent les fonctionnalits SIG. Lorsquon dveloppe autour dun produit ArcGIS on est donc amen a priori manipuler ces classes dobjets que sont les ArcObjects. Il sagit donc de programmation orient-objet. Il y a toutefois une diffrence fondamentale selon que lon dveloppe dans un contexte bureautique ou serveur. Dans le premier cas, les objets sur lesquels on agit ont t instancis en local par lapplication bureautique : ainsi, un outil didentification du bureau de poste le plus proche dvelopp pour ArcMap agit sur les objets instancis par lapplication ArcMap, i.e. ceux chargs dans le document que lon est en train de visualiser ; dans le second cas, les objets sont stocks sur un serveur distant qui doit veiller partager ces objets entre tous les clients susceptibles dy accder. Le mme outil didentification dvelopp pour un client web agit donc sur des ArcObjects distants. LAPI ArcObjects nest toutefois pas la seule API ouverte au dveloppement. Il faut la considrer comme lAPI de rfrence, celle qui donne accs au systme ArcGIS dans toute sa complexit. Il existe notamment dans le cadre du dveloppement web, dautres API, plus limites mais plus simples demploi, permettant la mise en uvre rapide dapplications personnalises. Cest le cas notamment des API Javascript, Silverlight et Flex mais aussi de lAPI Web ADF.

II.1. Produits bureautiques


Le SIG bureautique peut tre personnalis, soit en intgrant linterface standard dArcGIS bureautique de nouveaux outils, soit en redveloppant une toute nouvelle application.

II.1.1. Personnalisation et extension


Ces dveloppements utilisent lAPI ArcObjects. Cest un ensemble de composants, dvelopps selon la norme COM et que le dveloppeur peut rutiliser pour dvelopper ses propres outils. Il est possible dutiliser les ArcObjets en VBA (Visual Basic pour Application) : le travail consiste alors dvelopper des macros en Visual Basic dans lenvironnement de programmation intgr ArcMap, ArcSCene, ArcGlobe. N.B : Cette possibilit de dveloppement intgr existe lidentique dans les applications de la suite Office (Word, Excel, Access, ), la seule diffrence tant que lon dveloppe dans ces applications partir dautres bibliothques de composants. Il est galement possible de crer de nouveaux outils laide des environnements de programmation standard Windows : Microsoft Visual Basic 6 ou 2005 (langage VB) et Microsoft Visual Studio (langage VB .NET ou C#) et de les intgrer lIHM des applications standards. Il existe une troisime option : cest le dveloppement doutils de gotraitement laide de Modelbuilder et denvironnement de programmation de scripts. Ce sont des environnements de dveloppements intgrs ArcToolbox, lIHM de gotraitement dArcGIS. Le dveloppeur y accde travers un ArcObject particulier : le goprocesseur.

II.1.1.1. Personnalisation avec VBA


Le dbutant doit commencer par l car cest le moyen le plus rapide de rorganiser linterface et de coder de nouvelles fonctionnalits.

Alexandre Pauthonnier

18/82

Juillet 2010 v3.1

Sans crire une seule ligne de code, il est possible de Rorganiser les barres doutils et les commandes quelles contiennent Ajouter de nouveaux outils dj programms sous forme de custom commands.

De nombreux outils complmentaires tlchargs et intgrs lIHM.

(add-ons

ou

plug-ins)

peuvent

ainsi

tre

Pour aller plus loin, le dveloppeur dispose dans ArcMap, ArcCatalog et ArcScene de VBA (Visual Basic pour Applications), un environnement de programmation intgr qui permet de dvelopper sous forme de macros de nouvelles fonctionnalits. Le langage de dveloppement est le Visual Basic (VB). Plusieurs choses assurent une prise en main relativement aise : les bibliothques ArcObjects sont charges en mmoire ; certains objets (le document, lapplication) sont accessibles travers des variables globales prdfinies. la possibilit de crer sans programmer de nouvelles commandes (boutons ou outils) et dy attacher sous forme de code vnementiel la nouvelle fonctionnalit la possibilit de dfinir des IHM labores ( laide des objets formulaires) et notamment dy intgrer tout type de composants (ActiveX) la prise en charge par la machine virtuelle VB de toute une partie du code (dsallocation mmoire) un environnement de dbogage Pour sa simplicit de mise en uvre cest la configuration retenue lENSG : elle permet aux tudiants de manipuler les ArcObjects dans un environnement convivial. Les macros sont sauvegardes avec le document dans lequel elles sont dfinies. Il est donc facile de partager le code : il suffit de copier le document dans lequel il est stock.

Alexandre Pauthonnier

19/82

Juillet 2010 v3.1

Le code nest pas compil mais interprt lexcution : cela signifie donc que ce mode nest pas adapt la programmation de traitements lourds. Par ailleurs ce mode intgr comporte certaines restrictions : on ne peut pas crer dextensions de classe, ni de nouveaux modes de reprsentation cartographique. Enfin, le code source est difficilement protgeable. Si lon ne souhaite pas diffuser son code, la seule solution cest de le compiler avec un IDE standard et de lintgrer sous forme dun composant binaire (DLL, exe, ocx) lIHM dArcGIS bureautique. Le site resources.esri.com regroupe toutes les informations utiles la communaut de dveloppeurs ArcGIS. Le dbutant y trouvera, en complment du cours dispens lENSG, toutes les informations utiles lapprentissage du dveloppement ArcGIS dans lenvironnement VBA. Les principes sont exposs, lensemble des classes ArcObjects, ainsi que les interfaces COM permettant de les utiliser sont dcrits de manire exhaustive. Enfin, de nombreux codes sources, classs par thmatiques (accs une base de donnes, mise jour de donnes, calculs 3D, calculs rseau) sont fournis.

Alexandre Pauthonnier

20/82

Juillet 2010 v3.1

Lannexe 1 propose une introduction brve au dveloppement avec VBA. Un autre document, Introduction la programmation en VBA sur ArcGIS, rdig et diffus par lENSG traite le sujet de manire dtaille.

II.1.1.2. Extension avec VB ou .NET


Dans certaines situations, il est ncessaire dutiliser des IDE non intgrs tels Microsoft VB ou Microsoft Visual Studio qui vont permettre au dveloppeur de travailler sans restriction sur lintgralit des ArcObjects de compiler son code Le dveloppement VB ou .NET permet de crer des IHM compltement relookes (fentres, boutons, barres doutils), de programmer de nouvelles extensions logicielles (ex : lextension ArcHydro ddi aux calculs hydrologiques, http://downloads2.esri.com/support/datamodels/Hydro/ArcHydro13.zip) sintgrant lIHM standard (sous forme dune barre doutils pour Archydro), mais aussi de personnaliser le modle ESRI de godatabase travers la programmation dextensions de classe. Les extensions de classe permettent entre autres dexploiter pleinement le modle orient-objet en implmentant le comportement des entits de la godatabase en raction aux vnements de mise jour (cration, modification, destruction dentits). La compilation du code prsente deux intrts majeurs: ne pas diffuser le code source amliorer les performances lexcution. Les extensions ainsi programmes doivent tre publis sous forme de DLL ; ces nouveaux composants sintgrent lIHM dArcGIS laide de la bote de dialogue Personnaliser sous forme de custom commands, ainsi quon la dj mentionn au paragraphe prcdent. Il est galement possible de recrer une nouvelle application, c'est--dire de recompiler tous les Arcobjects en y intgrant ses propres dveloppements. On recre dans ce cas un nouvel excutable (exe). ArcGIS est fourni avec des kits de dveloppements (pour Microsoft VB6 ou VB 2005 et pour Microsoft Visual Studio 2005) qui facilitent la cration de projets. Contrairement au dveloppement VBA, il faut charger en mmoire (ou rfrencer) chacune des bibliothques dArcObjects utiles. En annexe ce document (annexes 2 et 3), vous trouverez un guide pour dvelopper un composant en VB ou VB.NET

Alexandre Pauthonnier

21/82

Juillet 2010 v3.1

N.B : les ArcObjects sont des composants COM ; lenvironnement .Net (le .Net framework) ne travaille pas directement avec ces composants mais avec des assemblies fournies par Esri, qui encapsulent de manire intelligible pour lui la ressource COM. Cette couche supplmentaire ne diminue pas de manire significative les performances lexcution.

L encore, le site des dveloppeurs http://resources.esri.com/arcgisdesktop/dotnet/index.cfm, propose des permettant au dbutant de dmarrer efficacement.

dESRI, lments

II.1.1.3. Dveloppement doutils de gotraitement


Lenvironnement de gotraitement dArcGIS comprend une bibliothque doutils (ArcToolBox) une application de modlisation graphique de processus (Modelbuilder) un environnement dexcution par ligne de commande un environnement de cration et dexcution de scripts (Python entre autres). Ces lments fonctionnent ensemble, de sorte quil est possible de dvelopper de nouveaux outils en Python et de les intgrer ArcToolBox ou encore de crer graphiquement un outil avec Modelbuilder et le modifier ensuite dans lenvironnement de script. Tout utilisateur dArcgis est un consommateur potentiel doutils de gotraitement. Chaque opration de gotraitement consiste transformer une donne en entre pour obtenir une nouvelle donne en sortie. ModelBuilder et les scripts permettent de crer des processus composs de plusieurs oprations et ainsi dautomatiser les squences en question. Les tches

Alexandre Pauthonnier

22/82

Juillet 2010 v3.1

automatiser sont en fait trs variables. Cela va de simples oprations de gestion de donnes (copie, conversion) de lanalyse labore ; citons en guise dexemple les conversions dun format de donnes un autre la gestion des systmes de rfrence le calcul ditinraires sur un rseau de transport le calcul de propagation dun feu de fort la mise en vidence de regroupements dans une distribution spatiales la recherche de zones propices aux glissements de terrain lvaluation dun ala (inondation, incendie)

de

donnes

II.1.1.3.1. ModelBuilder ModelBuilder permet de crer des modles graphiquement par glisser-dposer doutils et paramtrage de chaque traitement. Les modles les plus simples consistent en une chane linaire de traitements, les donnes en sortie dun traitement tant rinject en entre du suivant et ainsi de suite. Le site web daide dESRI vous propose de crer un premier modle simple : http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=Creating_a_simple_mod el ModelBuilder est un vrai environnement de programmation et ce plusieurs titres : il manipule les donnes laide du concept de variable (les variables donnes et les variables valeur ; les premires stockent les donnes gographiques en entre-sortie des outils de gotraitement, les secondes stockent les autres informations utiles aux outils). Ce mcanisme permet de dvelopper des processus de traitement paramtrables, capables dagir sur des donnes diffrentes, dans des conditions ventuellement diffrentes. Les variables sont types il offre toutes les structures de contrle de la programmation structure : conditions, boucles

Dveloppons ce dernier point : sil est vrai que certains modles peuvent tre dcrits simplement sous forme dun enchanement linaire doprations, cest loin dtre toujours le cas.

Cest notamment le cas, lorsquune des donnes traite par le modle est en entre de deux sous-processus (voir ci-dessous) : il y a alors deux branches dans lesquelles vont sexcuter des traitements. Ces 2 branches peuvent ventuellement produire de nouvelles donnes elles-mmes en entre dun autre sous-processus (voir toujours ci-dessous). Lensemble des traitements doit donc sexcuter dans un certain ordre.

Alexandre Pauthonnier

23/82

Juillet 2010 v3.1

ModelBuilder depuis la version 9.2 propose plusieurs mcanismes rpondant ces problmes. A ce titre, on peut citer le concept de prcondition : permet de spcifier quun outil doit tre excut avant un autre le concept de condition : permet de grer des squences du type if condition1 then action1 else action1 end if.

le concept de boucle ou de traitement rptitif. Le concept de feedback : permet de rinjecter la sortie itratif en entre de ce mme modle litration suivante

dun

modle

Ce dernier mcanisme permet de crer des outils de simulation, dynamique dun territoire ou dun phnomne gographique.

illustrant

la

En rsum, les modles peuvent tre tonnamment complexes (cf. http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=%5BA_complex_model%5D ) tel point quil est souvent intressant de dcouper le modle en sous-modles puis de crer un modle de haut niveau qui appelle chacun de ces sous-modles. Alexandre Pauthonnier 24/82

Juillet 2010 v3.1

II.1.1.3.2. Les scripts de gotraitements En complment de ModelBuilder, ou bien en alternative, il est possible de dvelopper un modle de gotraitement sous forme dun script. La plupart des langages (Python, Jscript, VBScript, Perl) sont compatibles, toutefois cest Python qui a la prfrence dEsri et des dveloppeurs ArcGIS en gnral : en effet sa simplicit et sa rigueur syntaxique, la richesse de ses bibliothques (tous les domaines scientifiques produisent du code Python), le fait quil soit indpendant dune plateforme sont autant datouts. Les scripts utilisent le goprocessor : il sagit dun ArcObject, qui regroupe la fois tous les gotraitements dArcGIS (extensions comprises) mais aussi tous les paramtres denvironnement de ces traitements. N.B : le goprocessor peut galement tre invoqu depuis VBA. Il est donc possible de crer des traitements avec ModelBuilder ou Python et de les excuter depuis une IHM dveloppe en VB. Pour cela il suffit dinstancier le goprocessor laide de la fonction CreateObject, qui est la fonction utilise en VB pour crer une instance dans une classe quelconque pourvue quelle implmente la norme COM set gp = CreateObject("esriGeoprocessing.GpDispatch.1") puis dinvoquer le traitement voulu gp.traitement param1, param2 Un diagramme prsente le goprocessor ainsi que tous les objets drivs qui peuvent tre instancis partir de ses mthodes. Ce diagramme peut tre consult ici en ligne : http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=Geoprocessor_Programm ing_Model.

N.B : contrairement aux diagrammes ArcObjects qui sont abords au chapitre suivant il ne sagit pas de modles UML ; les flches reliant les classes indiquent simplement la possibilit dinstanciation entre les 2 structures et non des liens structurels au sens relationnel. Le langage Python est un langage de script de haut niveau qui propose tous les concepts de la programmation structure.

Alexandre Pauthonnier

25/82

Juillet 2010 v3.1

Le code Python est structur en modules et il est possible de charger ces modules lorsquon en cre un nouveau : cest linstruction import familire aux dveloppeurs. Les commentaires sont prcds du caractre #.

Une des caractristiques est lutilisation du caractre tabulation comme lment du langage. L o dans la plupart des langages, lindentation nest quune convention dcriture destine amliorer la lisibilit du code, ici elle a pleine valeur : si on nindente pas le contenu dune boucle for (dune condition if, dune procedure), celle-ci ne sera pas excute. Pour le reste, il sagit dun langage part entire dont la matrise requiert une phase dapprentissage. Le site officiel http://www.python.org/ dispose de toutes les rfrences ncessaires. Une fois le script cod et la syntaxe du code valide, il est possible de lintgrer en tant quoutil ArcToolBox et donc de lutiliser comme nimporte quel outil de gotraitement. A souligner enfin que les performances lexcution sont moindres que pour du dveloppement en mode compil mais sensiblement les mmes que pour du code VB interprt par VBA. il y a une large communaut de dveloppeurs de scripts Python et on peut trouver sur internet de nombreux outils tout faits : le site edndoc.esri.com met notamment disposition de nombreuses ressources la rubrique Code Exchange (ArcScripts) Le dbutant trouvera sur le site resources dESRI tout ce quil faut pour sinitier au dveloppement de modles ou scripts de gotraitement (http://resources.esri.com/geoprocessing/).

II.1.2. Cration dapplications


Il sagit ici de crer une application SIG originale (un progiciel), taille sur mesure pour un besoin prcis. Ces dveloppements rpondent 2 besoins remanier totalement lIHM dArcGIS bureautique de faon simplifier laccs dun utilisateur novice des fonctions SIG. marier certaines fonctionnalits SIG, telles la visualisation sous forme de cartes ou encore la capacit rechercher des informations sur critres spatiaux dautres types de traitements (traitement de textes, tableur, statistiques, simulation) pour obtenir par exemple une application daide la dcision ou de gestion oprationnelle. Ce type de dveloppement utilise ArcGIS Engine, un produit consistant en un runtime et une bibliothque complte de composants SIG de haut niveau qui peuvent tre utiliss par le dveloppeur pour laborer son application personnalise. Lutilisateur final de lapplication na pas besoin de licence ArcGis bureautique : cest le run-time qui lui permet dexcuter son application. Alexandre Pauthonnier 26/82

Juillet 2010 v3.1

Il est possible de travailler avec des IDE Windows (COM ou .NET), mais aussi avec des IDE Java, tels Eclipse et JBuilder.

Le dveloppement de lIHM de lapplication est relativement ais puisque le dveloppeur dispose de 7 controls de haut niveau (controls Active X pour lAPI COM, controls Windows .NET pour lAPI .NET) : map control pagelayout control reader control globe control scene control table of contents control toolbar control Pour le reste, le dveloppement des fonctionnalits repose sur lutilisation des composants ArcObjects comme vu prcdemment. A noter quil est galement possible de dvelopper avec ArcGIS Engine une application cliente qui accde aux services publis par un serveur SIG (qui utilise la technologie ArcGIS Server ou une autre).

II.2.

ArcGIS Serveur

II.2.1. Utilisation de lassistant


Nous avons vu prcdemment que lapplication Manager dArcGIS Server permet de crer un client web sans dvelopper une seule ligne de code.

Alexandre Pauthonnier

27/82

Juillet 2010 v3.1

Manager permet en effet de se connecter des services de carte hbergs soit sur le serveur ArcGIS local soit sur un serveur ArcGIS distant soit encore sur un serveur ArcIMS, ArcWeb ou bien WMS. Une fois les connexions vers les ressources tablies, Manager permet de rgler les paramtres de publication (informations attributaires retournes par une requte rsultat), choisir les outils, donc le type dinteractivit, et de mettre en page les lments inhrents la cartographie (barre dchelle, pav de lgende, etc).

Lapplication cre par Manager est stocke dans le rpertoire InetPub du serveur IIS : il sagit dun ensemble de fichiers cods pour lessentiel en asp et pour partie en Javascript. Cette application est code selon les standards du web 2.0 : elle utilise donc la technologie Ajax pour les changes dinformations entre le client et le serveur, notamment en ce qui concerne le rafrachissement de la vue cartographique conscutivement aux diffrentes actions utilisateurs (changement dchelle, modification de la visibilit des couches, recherche dobjets).

Alexandre Pauthonnier

28/82

Juillet 2010 v3.1

Cela tant, on peut trs rapidement avoir dapplication et ce pour plusieurs raisons :

envie

daller

au-del

de

ce

type

le manque de fonctionnalits : dans la vue ci-dessus, mis part les outils standards de navigation, il ny a quun outil mtier permettant la recherche dun hpital par son nom. On aurait pu proposer autre chose en standard mais le manager a ses limites. Ainsi, par exemple, un outil de recherche de lhpital le plus proche dun lieu donn nexiste pas en standard. Le design ne correspond pas ce quon souhaite On aimerait crer une application mashup avec dautres ressources que celles cites prcdemment, en particulier avec les donnes de fond de plan tires des banques Google ou Virtual Earth.

Il convient alors de dvelopper une application originale. Le centre de ressources dESRI propose en ligne de nombreux lments pour sinitier aux diffrentes formes de dveloppement. Un lien direct vers le point dentre dans le site est fourni pour chacune des rubriques dans ce qui suit.

II.2.2. APIs Javascript


lien vers le centre de ressources pour l'API Javascript

Alexandre Pauthonnier

29/82

Juillet 2010 v3.1

Cest le bon outil pour celui qui dbute en dveloppement de solutions de webmapping autour des technologies ArcGIS. Cest aussi la bonne solution si le cahier des charges nimpose pas de dvelopper des fonctionnalits trs avances. LAPI est libre de droits : on peut donc lutiliser volont pour utiliser des ressources mises disposition par des serveurs ArcGIS. Il est de plus inutile de tlcharger quoi que ce soit : pour lutiliser, il suffit de pointer sur un serveur Esri. Comme son nom lindique, lAPI Javascript permet dinteragir avec les ressources serveur par lintermdiaire de code Javascript, sexcutant ct client. Pour mmoire, la philosophie dune solution Javascript cest de donner la possibilit au navigateur de ragir aux vnements provoqus par lutilisateur sur la page. Les vnements sont par exemple le clic sur un bouton de commande, la slection dune entre dans une liste droulante, le dplacement du centrage dune carte Coupl la technologie AJAX (Asynchronous Javascript and XML), Javascript permet de programmer la raction aux vnements en conservant une bonne fluidit de navigation (pas de rechargement de tous les lments de la page web). Tout comme les API Google Maps ou Virtual Earth, lAPI dEsri permet dintgrer dans une page web des services de type carte, gocodage, gotraitement ou gomtrie et de grer le contenu de la carte ainsi que les interactions avec lutilisateur. Toutes les donnes peuvent tre issues du mme diffrents. Il est notamment possible daccder donnes de fond de plan. De nombreuses applications ce principe : superposition de donnes mtier sur (cartes topographiques ou orthophotographies). serveur ou bien de serveurs des serveurs tiers pour les de webmapping fonctionnent sur des fonds de plan standards

Par nature, cette API est faite pour consommer des services ArcGIS Serveur, et parmi eux signalons les services arcgisonline (http://server.arcgisonline.com/ArcGIS/rest/services) proposant des fonds de carte dextension mondiale de toutes sortes. Certaines donnes sont en accs libre, dautres font lobjet dune tarification. A noter que tous les exemples dapplication proposs par le centre de ressources utilisent ces services.

Alexandre Pauthonnier

30/82

Juillet 2010 v3.1

LAPI permet galement des consommer dautres services et notamment des services OGC. LAPI communique avec les serveurs laide du protocole Rest : pour accder une ressource (ou service) avec lAPI, il faut donc connatre lurl de cette ressource. Le meilleur moyen didentifier cette url, cest de lister les informations relatives aux services hbergs par un serveur ArcGIS laide de lurl http://<nom du serveur>/ArcGIS/rest/services/ vue prcdemment. En retour, le serveur renvoie sa rponse sous forme de chanes JSON (Javascript Object Notation). N.B : JSON est un standard dchange de donnes en mode texte. Cest une alternative XML. De par sa nature, JSON est particulirement recommand dans le cadre dune interaction avec un programme Javascript. Les donnes JSON sont en effet parses environ 100 fois plus vite que les donnes XML. Suit le contenu en JSON de la recette dune tarte aux fruits { tarte : [ { { { { ] }

ingredient ingredient ingredient ingredient

: : : :

pomme , quantit :500g}, beurre , quantit :250g}, farine , quantit :250g}, sucre , quantit :250g}

Les donnes sont structures sous forme de tableaux de type Javascript. Les mmes donnes en XML seraient formates comme suit : <tarte> <ingredient <ingredient <ingredient <ingredient

nom= nom= nom= nom=

pomme quantit= 500 /> beurre quantit= 500 /> farine quantit= 500 /> sucre quantit= 500 /> 31/82

Alexandre Pauthonnier

Juillet 2010 v3.1

</tarte> A priori les deux formats semblent comparables. Il faut nanmoins se rappeler quun document XML saccompagne dlments annexes (DTD, schma, namespaces ), ce qui explique la diffrence au parsage. Le mcanisme de communication intgre Ajax, i.e. fonctionne en mode asynchrone permettant lchange dinformations en tches de fond entre le client et le serveur. LAPI prend totalement en charge tous ces aspects de la communication client-serveur; elle met disposition du dveloppeur des objets chargs dmettre les requtes vers des urls et dexploiter les chanes JSON sans que celui-ci ait rentrer dans les dtails de ces mcanismes. Ces objets nont pas t dvelopps par Esri, ils font partie dun kit de dveloppement Javascript open source plus gnrique sur lequel lAPI est construite. Ce kit est le Dojo. Le Dojo permet avant tout de sabstraire des particularits propres chaque navigateur et donc de pouvoir crire un code gnrique, interprt par tous les navigateurs. Il permet galement de disposer de fonctions optimises pour toutes les plate-formes. Le code produit avec le Dojo (ou un autre kit comme Prototype) est donc plus synthtique et lapplication plus rapide et plus stable. Un autre avantage, cest de pouvoir utiliser des composants dj programms : ce sont les widgets (ou Dijits). Ces derniers permettent dtendre les controls standard disponibles en HTML. Ainsi, avec le widget DatePicker il est trs facile dajouter un outil de saisie de date se prsentant sous forme dun calendrier. Ou encore des listes droulantes que lon peut trier, des tableaux (DataGrid) avec des colonnes triables, etc Il est ncessaire de connatre un certain nombre de fonctions Dojo pour interagir avec les serveurs ArcGIS dans le cadre de cette API : Dojo.require : permet de charger une ressource Javascript. Les ressources figurent dans le tableau suivant ressources usage esri.map Map, geometry, graphics, and symbols esri.layers.agsdynamic Couche de donnes cres dynamiquement par le serveur esri.layers.agstiled Couches de donnes pr-calcules et mises en cache sur le serveur esri.tasks.find Find task esri.tasks.geometry Geometry task esri.tasks.gp Geoprocessing task esri.tasks.identify Identify task esri.tasks.locator Locator task esri.tasks.query Query task esri.toolbars.draw Draw task esri.toolbars.navigation task Navigation task Dojo.addOnLoad(init) : permet dexcuter du code une fois que la page a t charge compltement (ici on dclenche la fonction init) Dojo.connect(maCarte, onLoad ,maCarteLoadHandler) : permet de dfinir un listener (couteur) en relation avec un vnement portant sur un objet ou un lment de la page. Cest lquivalent des fonctions Javascript addEventListener et attachEvent. Dojo.ById( monControlInput ).value = texte stocker . Permet datteindre un lment de la page par son nom.

Le manuel de rfrence en ligne sur le dojo est une mine prcieuse dinformations pour aller plus loin. Sa lecture simpose pour tirer le meilleur parti de lAPI Javascript (http://resources.esri.com et http://dojotoolkit.org). LAPI existe galement sous forme dextensions pour les API Google Maps et Virtual Earth. Ces extensions permettent dintgrer des donnes de type carte servies par des serveurs ArcGIS aux couches de base Google ou Microsoft : cest ce quon appelle crer un mashup, i.e. une composition cartographique (sur le web) partir de plusieurs sources. Ces extensions permettent aussi dexploiter des services de gotraitement, de gocodage et dafficher les rsultats sur ces fonds de plan. LAPI Google Maps offre en plus la possibilit de valoriser sous forme de diagrammes statistiques les donnes attributaires des donnes SIG laide API

Alexandre Pauthonnier

32/82

Juillet 2010 v3.1

Google Chart mais aussi de diffuser largement son application sous forme dune mapplet. Il est enfin possible de tlcharger sur le site resources dESRI une application Javascript modle, le Javascript viewer, intgrant de nombreux composants dinterface (http://resources.esri.com/arcgisserver/apis/javascript/arcgis/index.cfm?fa=codeGal leryDetails&scriptId=15987). Cette application peut tre adapte aux besoins de chacun par lintermdiaire de plusieurs fichiers de paramtres (config.xml notamment) permettant de modifier la fois le contenu (les couches de donnes) mais aussi lIHM et tout a sans programmer une seule ligne de code !! Il sagit dune application riche exploitant pleinement les technologies du web 2.0 et qui sapparente par bien des aspects aux applications Flex ou Silverlight.

Sil est vrai quun simple diteur de texte peut suffire la cration dune application Javascript, il est toutefois prfrable dutiliser un environnement de dveloppement, et notamment lenvironnement Aptana Studio pour lequel Esri fournit un plug-in permettant de disposer des objets de lAPI et donc de bnficier de lauto-compltion.

II.2.3. APIs Flex et SilverLight


Avec Flex et Silverlight, on entre dans la conception dapplications web dites RIA ou Rich Internet Applications. Le but est de crer des IHM avec un niveau dinteractivit comparable une application bureautique. Les solutions Javascript, mme avec les amliorations lies la gnralisation dAjax noffrent pas encore tout fait cette fluidit et cette qualit dinteractivit avec les donnes. Toutefois, il existe des inconvnients : le navigateur client ne suffit pas pour excuter de telles applications ; il faut ajouter un plug-in. Ce quon gagne en interactivit, on le perd en vitesse de connexion au site.

II.2.3.1. API Flex


LAPI Flex pour ArcGIS est btie sur lenvironnement Flex dAdobe. Les solutions Flex/Flash sont la rfrence en matire de cration danimations. Cet environnement ncessite ct client un plug-in, Flash Player version 10 et pour le dveloppeur un

Alexandre Pauthonnier

33/82

Juillet 2010 v3.1

kit de dveloppement Flex (Adobe Flash Builder 4). Contrairement aux API prcdentes, cette solution nest pas gratuite puisque le kit de dveloppement Flex est sous licence. Comparativement lAPI Javascript, lAPI Flex permet de produire avec moins de lignes de code des applications plus belles et plus riches. Une application Flex est dveloppe laide des langages MXML et ActionScript. Ce sont les quivalents respectifs des langages HTML et Javascript. MXML permet donc de dfinir le contenu (controls) et la mise en page de lapplication, tandis quActionScript permet de coder le traitement des vnements utilisateurs sur les controls. ActionScript est un langage orient-objet tout fait classique. Il y a diffrentes faons dassocier le code Actionscript aux tags MXML : En implmentant directement un des vnements gr par le tag
<esri:map load="Alert.show('map is loaded')">

En utilisant des blocs <mx :Script> ou <mx :initialize)


<mx:Script> <![CDATA[ import mx.controls.Alert; private function onMapLoad():void { Alert.show('Bonjour!'); } ]]> </mx:Script>

En important une bibliothque ou une classe ActionScript


include "myextracode.as";

Le code doit ensuite tre compil en swf. Pour utiliser lAPI il faut tlcharger lAPI (il suffit de sinscrire sur le site Esri puis de suivre ce lien) et lenvironnement de dveloppement (Flex Builder propos en libre tlchargement pour 60jours sur le site dadobe). Pour de plus amples informations consulter le centre de ressources et le site dadobe. Sur ce site, on trouve en particulier en tlchargement lapplication bureautique Tour de Flex qui illustre les capacits de cet outil et notamment en terme dexploitation cartographique (rubrique mapping). Signalons enfin quESRI met disposition une application template, le Sample Flex Viewer que lon peut tlcharger sur le site resources.esri.com. Cette application est dveloppe de telle sorte quil est possible sans dvelopper, i.e. en modifiant uniquement des fichiers de configuration xml (cf. config.xml ci-dessous), de visualiser ses propres donnes gographiques. Loutil est galement livr avec une documentation dveloppeur indiquant comment ajouter des widgets, i.e. des fonctionnalits. Il est alors ncessaire de regnrer le fichier compil (swf) avec Flash Builder.

Alexandre Pauthonnier

34/82

Juillet 2010 v3.1

II.2.3.2. API SilverLight


Dun point de vue technique, lAPI est construite en sur-couche de lAPI SilverLight de Microsoft, laquelle est intgre aux environnements de dveloppement Visual Studio 10 et Visual Web Developer Express. Pour lutiliser, il faut donc avant tout tlcharger lAPI Silverlight (http://silverlight.net/). Silverlight est la solution concurrente de Flash. Toutefois, il sadresse avant tout la famille de dveloppeurs Microsoft : en effet, une telle application est dveloppe laide des langages XAML et C# .Net. L encore il sagit dune solution quivalente HTML/Javascript ou encore MXML/ActionScript. XAML permet de dfinir le contenu et la mise en page de lapplication, tandis que c# .Net permet de coder les traitements. Tout comme les APIs Javascript ou Flex, lAPI Silverlight permet de crer une application web consommant des services publis par ArcGIS Server ; elle permet en outre de consommer des services Bing Maps. Une telle application web peut tre dexploitation (Windows, Mac, Linux). excute sur nimporte quel systme

Le centre de ressources en ligne dESRI propose un tutoriel pour une prise en main rapide.

II.2.4. le Framework)

Web

ADF

(Application

Development

Pour linstant, les API que nous avons dcrites sont des API qui dialoguent avec le serveur selon le protocole REST, i.e. qui dclenchent des services exposs sous forme dURL. Cest le client qui parse les rponses textes fournies en JSON. Cest lui qui symbolise et dessine les donnes vecteur quil reoit. Il existe bien entendu la possibilit de crer une application web ct serveur, i.e. une application qui est excute essentiellement sur le serveur et pour laquelle le client se contente dafficher ce quil reoit.

Alexandre Pauthonnier

35/82

Juillet 2010 v3.1

Ce mode de dveloppement permet de masquer le code source ; il permet galement dignorer les limitations de scurit imposes au dveloppement client : un code javascript ne peut changer des informations quavec des ressources hberges sur son propre domaine. Il permet enfin daccder toute la richesse fonctionnelle du SIG : lAPI REST nexpose en effet que les fonctionnalits les plus courantes

Avec une application web 3 tiers, il devient donc possible de proposer des traitements lourds (calculs) mais aussi de ldition de donnes (saisie en base, mise jour), notamment dans un contexte daccs multi-utilisateurs. Cest le propos du Framework Web ADF. En fait, il y en a 2 : un pour lenvironnement .NET et un autre pour lenvironnement Java. Nous nvoquerons ici que le Web ADF .NET, sachant que seuls les langages et environnement de dveloppement changent entre les deux. Un framework, cest un ensemble doutils sintgrant un environnement de dveloppement. Le Web ADF pour .Net sintgre Microsoft Visual Studio ; il consiste en Un template dapplication web, accessible partir de la bote de dialogue de cration de projet De controls web arcgis acessibles dans la bote outils (ex : le control Map) Dune API, i.e. de bibliothques programmes en ASP, toutes prfixes en ESRI.ARCGIS.ADF Le principe de cration dune application web .Net dimension spatiale avec cet outil est le mme que celui du dveloppement dune application web .Net quelconque proposant un certain niveau dinteractivit : glisser-dposer de controls sur un formulaire, paramtrage des proprits des controls, programmation du code prenant en charge la rponse aux vnements (clic souris sur un bouton, ). La diffrence cest quon manipule ici des objets de haut niveau tels une fentre Carte, une fentre contrle des couches (ou table des matires selon la terminologie ArcGIS). Les applications dveloppes avec le web ADF .NET se dploient sur le serveur web IIS. Nous avons vu prcdemment quArcGIS Server est livr avec une application, le Manager, qui permet de crer un client web. Une telle application est dveloppe partir du web ADF : cest une application 3 tiers comprenant essentiellement du code ASP. Il est possible de modifier le code cr ainsi dans Visual Studio et de recompiler lapplication. Une autre solution consiste crer une application dans Visual Studio partir du template. Si on compile sans aucune retouche, on obtient la mme chose quavec le

Alexandre Pauthonnier

36/82

Juillet 2010 v3.1

Manager. Lannexe 5 explique cela. tutoriels du centre de ressources.

Pour

plus

dinformations

se

rfrer

aux

Une troisime solution consiste enfin crer une application de toute pice partir des composants de la bote outils.

Le Web ADF permet de crer des applications qui interagissent avec diffrents types de ressources : ArcGIS Server tout dabord, ArcIMS ensuite, Virtual Earth, ressources OGC (WMS, WCS, WFS). Afin de programmer les interactions des Web controls avec les ressources, le dveloppeur dispose de plusieurs API : une API commune toutes les sources qui regroupe les fonctionnalits que lon retrouve chez chacune dentre elles (ex : obtenir une carte, obtenir les informations attributaires), des APIs propres chacune des sources pour les fonctionnalits spcifiques (API ArcObjects par exemple pour calculer un itinraire optimisant une tourne ou encore pour des calculs qui exploitent la 3D). Les samples du centre de ressources facilitent de ce point de vue la matrise des diffrentes API: ils sont prfixs par le nom de lAPI utilise (ex : Common Custom EditorTask).

II.2.5. Rsum
Nous avons voqu une partie des dveloppements possibles autour dArcGIS Server et de la consommation par un client de ressources distantes, ainsi que le montre lillustration suivante.

Alexandre Pauthonnier

37/82

Juillet 2010 v3.1

Il est notamment possible de dvelopper partir des API SOAP et ArcObjects des services webs personnaliss, i.e. des ressources dpourvues dinterface destines tre consommes par une application. Le dveloppeur peut donc non seulement concevoir des applications totalement originales mais aussi concevoir des services qui vont au-del de ceux proposs par ArcGIS Server en standard.

Alexandre Pauthonnier

38/82

Juillet 2010 v3.1

III. Le dveloppement lAPI ArcObjects


III.1. Les ArcObjects

bureautique

avec

Les ArcObjects forment un ensemble de composants logiciels, indpendants de tout systme dexploitation. Ces composants ont t cods en C++ et compils sous forme de DLL ; ils regroupent lensemble des fonctionnalits SIG proposs par les produits de la gamme ArcGIS.

Ils ont t dvelopps conformment aux prescriptions de la norme COM. Cest cette norme, entre autres, qui permet la rutilisation des mmes composants dans des contextes diffrents : bureautique ou serveur. Le dveloppeur manipule les ArcObjects laide de bibliothques qui exposent les fonctionnalits des ArcObjects;

Alexandre Pauthonnier

39/82

Juillet 2010 v3.1

Ces bibliothques regroupent les services par nature : il y a celle qui propose les traitements relatifs laffichage de donnes, celle qui soccupe de laccs aux donnes, Certaines sont partages par les diffrents produits (bureautique et serveur) ; dautres sont propres chacun (les bibliothques xxxUI sont propres ArcGIS bureautique ; elles spcifient les composants dots dune interface utilisateur). La bibliothque System est celle de plus bas niveau, Geometry permet de manipuler la reprsentation graphique des entits gographiques, Geodatabase permet daccder aux donnes stockes sous forme dune godatabase, Server permet de se connecter un serveur ArcGIS server et dexploiter les ressources quil diffuse, ArcWeb permet daccder aux services web hbergs par les serveurs Esri, Carto permet la cration et laffichage de cartes, Network Analysis la cration dune topologie arc-nud et son exploitation, Animation la cration danimations temporelles dans ArcMap, ArcScene et ArcGlobe, etc

Il faut retenir que tous les produits ArcGIS sont construits partir des mmes composants. Cest videmment trs intressant pour lditeur de ces logiciels, mais a lest tout autant pour le dveloppeur qui peut programmer de la mme manire quel que soit le contexte. Pour une description plus dtaille de ces objets, consulter ce lien.

III.2. La norme COM


COM permet de dvelopper un logiciel sous forme de composants, rutilisables qui plus est. Cette technologie qui prsente videmment de trs gros avantages est aujourdhui adopte par tous les diteurs de logiciels. Elle permet de dcliner au moindre cot toute une gamme de produits partir dun socle commun ; elle permet aussi de faire voluer avec souplesse tel ou tel aspect du logiciel sans le remettre en cause. ESRI a choisi COM il y a quelques annes car ctait la technologie mature pour crer une application sur ce principe. Cest encore aujourdhui la norme de

Alexandre Pauthonnier

40/82

Juillet 2010 v3.1

rfrence pour tout ce qui est bureautique. Dans le monde du web, les JavaBeans sont une technologie comparable. COM reprend tous les principes de la programmation orient-objet et notamment la programmation base dinterfaces. Selon ce principe, les proprits et les mthodes des classes dobjets sont encapsules derrire des interfaces, ce qui assure un niveau de scurit maximal. Le mcanisme daccs la fonctionnalit est alors le suivant : un client qui souhaite consommer une ressource met une requte vers un serveur capable de la lui fournir. Le client ignore tout de la faon dont sa requte est traite ; il rcupre linformation cest tout. Dans les applications ArcGIS, les ArcObjects sont des classes COM : les instances de ces classes peuvent donc jouer le rle de serveur COM, i.e. sont capables de fournir des services (afficher une couche, renvoyer le primtre dun objet surfacique) des clients. Ces services sont spcifis travers des interfaces, avec lesquelles le client interagit. Il y a des milliers de proprits et mthodes ainsi exposes par les interfaces. Les ArcObjects sont tour de rle serveur et client selon la situation. Cest ce que montre le schma suivant : imaginons que lon souhaite modifier par programme le systme de rfrence du bloc de couches de notre document ArcMap. Pour ce faire, on va attacher du code VB au document ArcMAP et on va demander modifier la proprit systme de rfrence pour linstance de classe Map reprsentant le bloc de couches. Pour accder cette instance de classe Map il faut passer par une instance de classe intermdiaire : lapplication ArcMap. Au final, le client VB adresse une requte au serveur ArcMap qui lui-mme devient client pour adresser une requte au serveur Map.

N.B : peu importe le langage dans lequel les composants ont t dvelopps ; dans la mesure o ils implmentent les fonctionnalits prvues par la norme, les versions compiles de ces mmes composants sont mme de dialoguer entre elles. Lobjet et ses clients peuvent appartenir au mme espace de processus, cest le cas pour des objets de type DLL. A contrario, lobjet et ses clients peuvent tourner dans 2 processus mmoires diffrents : cest le cas avec les exe. Les 2 solutions prsentent des avantages : les DLL se chargent plus rapidement en mmoire, mais les EXE fournissent une solution plus robuste : en cas de plantage du serveur, le client lui nest pas affect. Ex : quand on ouvre un document ArcMap qui consomme un certain nombre de services ArcObjects (liens vers des sources de donnes, reprsentation graphique des objets, barres doutils et extensions charges), tous les composants utiles (dll) sont mis en mmoire dans lespace du processus ArcMap. Pour une description plus dtaille de la norme COM, consulter ce lien.

III.3. Les interfaces


III.3.1. Dfinition
Lorsque le dveloppeur (le client) travaille avec les ArcObjects, il naccde pas directement aux classes dobjets (les serveurs) mais communique avec elles travers les interfaces quelles implmentent. Une interface peut tre dfinie comme la spcification dun ensemble de proprits et de mthodes quune ou plusieurs classes dobjets implmentent. Classes et interfaces sont respectivement le what et le how de la norme COM.

Alexandre Pauthonnier

41/82

Juillet 2010 v3.1

N.B :

Une interface nest pas une classe : en effet, une interface ne peut pas tre instancie puisquelle nimplmente rien elle-mme une interface nest pas un objet ; cest un regroupement logique de fonctions virtuelles qui servent uniquement tablir la communication entre un serveur et ses clients.

Une fois publie, la signature dune interface ne peut plus voluer. En revanche, il est possible tout moment de modifier son implmentation, quil sagisse de corriger un bug, ou bien de redvelopper compltement un algorithme : ces modifications ncessiteront simplement de recompiler les composants (dll) qui implmentent linterface, les clients ntant pas affects par cette mise jour. Sil savre ncessaire de publier de nouvelles fonctionnalits, alors il simpose De crer de nouvelles interfaces Dimplmenter ces interfaces par les composants existants ou bien par de nouveaux composants Au fil des mises jour logicielles, certaines interfaces tombent en dsutude (deprecated) : elles subsistent nanmoins afin que les clients qui les utilisent puissent continuer fonctionner.

III.3.2. Un monde orient-objet


Les classes COM implmentent les fonctionnalits exposes par une ou plusieurs interfaces : la fonctionnalit se retrouve ainsi encapsule entirement dans le composant logiciel. Cest le premier principe de lorient-objet. Deux classes COM diffrentes peuvent implmenter la mme interface, mais ventuellement de manire diffrente : cest ce quon appelle le polymorphisme, qui est le second principe de lorient-objet. Cest ce que montre le schma suivant :

IBirth

IWalk IDeath ITalk Ifly

IBirth ITalk IWalk IDeath

IBirth IWalk IDeath

IBirth ITalk IFly

Enfin COM supporte le concept dhritage entre classes ce qui est le troisime principe de lorient-objet.

Alexandre Pauthonnier

42/82

Juillet 2010 v3.1

III.3.3. Linterface IUnknown et les autres


Tous les serveurs COM implmentent linterface IUnknown qui expose des fonctionnalits de bas niveau permettant au client de crer une instance, de la dtruire (mthode AddRef et Release). de passer dune interface lautre pour une mme instance (mthode QueryInterface) En plus de cette interface IUnknown, les ArcObjects interfaces qui exposent les fonctionnalits SIG. Parmi implmentes, une joue le rle dinterface par dfaut. implmentent dautres toutes les interfaces

Lorsquun client cre une instance, il accde cette instance laide dune variable pointeur qui rfrence une des interfaces implmentes par linstance. N.B : on peut reprsenter de manire image un serveur COM comme un cube, dont chacune des faces est une interface. Un client ne peut voir quune face en mme temps : cest pourquoi lorsquil tablit la communication, il obtient un pointeur vers une des interfaces. Toutefois, le client peut tout moment faire pivoter le cube pour accder aux autres faces du client. Il existe des interfaces de type Inbound et Outbound : les premires sont les plus communes, elles exposent des fonctionnalits implmentes par le serveur ; les secondes sapparentent au mcanisme de callbacks : le serveur nimplmente pas les fonctionnalits, il sen remet au client ; ces interfaces permettent notamment de grer les vnements. Les interfaces peuvent hriter les unes des autres. Pour une description plus dtaille du concept dinterface, consulter ce lien.

III.4. Dvelopper avec les ArcObjects


III.4.1. Les diagrammes de classe
Cest linformation de base, dutiliser les ArcObjects. cest aussi la cl du succs lorsquil sagit

Ces diagrammes UML sont dcrypts (du moins en partie) lors des sances de travaux dirigs. Ils permettent dapprhender la structure densemble du logiciel. Ces diagrammes sont fournis au format PDF : on peut donc utiliser le moteur de recherche pour localiser une classe ou une interface donne. A ces diagrammes, sajoutent deux autres ressources complmentaires : les browsers intgrs aux environnements de dveloppements (VBA, VB6, .NET)

le site edndoc.esri.com et son moteur de recherche

Les modles UML font tat de 3 types de classes dobjets : Alexandre Pauthonnier 43/82

Juillet 2010 v3.1

La classe abstraite : elle ne peut pas tre instancie. Elle expose des proprits et mthodes gnriques, communes plusieurs autres classes, qui structurellement lui sont relies par un lien dhritage. Les classe Geometry, Layer et Dataset sont 3 exemples de classes abstraites : on ne peut pas crer dinstances Geometry, Layer ou Dataset ; en revanche, il est possible de crer une instance Point qui implmente les proprits et mthodes spcifies par Geometry (voir schma ci-dessous). De la mme manire, on peut crer une instance RasterLayer qui implmente les spcifications de Layer.

Les coclasses : ce sont les classes instanciables. COM peut donc crer des instances pour ces classes et les passer au client. Les classes simples : elles ne peuvent tre lintermdiaire dune instance dune autre classe. instancies que par

ex : la classe Feature, qui reprsente la notion dentit, i.e. denregistrement dans une table gographique, ne peut tre instancie que si la classe FeatureClass lest dj. Ceci signifie quun client ne peut accder un enregistrement dune table que sil dispose dj de la table). Ces classes sinscrivent dans un modle objet : elles sont relies les unes aux autres par des liens Dhritage De composition Dinstanciation Dassociation

Les diagrammes font galement tat des interfaces implmentes par les classes. Les inbound et outbound interfaces sont diffrencies. Les hritages dinterface sont galement indiqus.

III.4.2. Considrations sur ArcObjects en environnement VB.

lutilisation

des

Alexandre Pauthonnier

44/82

Juillet 2010 v3.1

Les TD ont lieu lENSG dans lenvironnement VBA. Ce mode de dveloppement intgr permet dattacher un projet VB un document ArcMap ; A lintrieur du projet, le code est stock dans des modules, des modules de classe et des formulaires. Lenvironnement VBA facilite le travail du dveloppeur, en ce sens que les ArcObjects sont dj rfrencs. Par ailleurs la machine virtuelle VB qui excute le code prend en charge tout ce qui est de lordre de la gestion mmoire : il ny a donc pas se soucier de dsallouer les diffrentes variables objets. VB est un langage de programmation orient-objet dot de tout ce quil faut pour programmer de manire structure (variables types, procdures, fonctions, tests, boucles, gestion derreurs, ). Il est utile de connatre un certain nombre de rgles : Forcer la dclaration des variables avec Option explicit en tte de chacun des modules Utiliser le mot-cl Dim pour dclarer une variable locale, et Public ou Private pour dclarer des variables globales (2 mots-cls pour signifier la porte de la variable globale) Ne pas utiliser le mcanisme de proprit par dfaut : en effet, COM permet de dfinir une proprit par dfaut parmi toutes les proprits exposes par une classe ; mais a nuit la lisibilit du code. Les paramtres des procdures et fonctions sont passs par dfaut par rfrence. Il faut ajouter le mot-cl byval pour les passer par valeur. Pour accder une classe COM (notamment aux ArcObjects), dclarer une variable pointeur sur une des interfaces implmentes par la classe ; instancier ensuite votre variable laide du mot cl New.

Ex :
Dim pLayer as ILayer Set pLayer = New Featurelayer pLayer.Name couche dentits Ne pas crire mme si VB laccepte Dim pLayer as New FeatureLayer pLayer.Name couche dentits

La notation courte fait disparatre le principe de la communication travers les interfaces. Pour accder aux proprits dune classe COM, regarder le type de la proprit. Si cest une interface, dclarer une variable en rfrence cette interface et utiliser le mot-cl Set ; sinon dclarer simplement une variable du type indiqu.

Ex : imaginons quon a dj un pointeur sur linstance de classe Actiview qui reprsente la fentre graphique dArcMap on veut rcuprer lemprise (les coordonnes min et max) de la zone actuellement cartographie ; il faut travailler avec une classe ArcObjects intermdiaire : la classe Envelope

Dim pEnv as IEnvelope Set pEnv = pActiveView.Extent Dim dblxmin as double

Alexandre Pauthonnier

45/82

Juillet 2010 v3.1

dblxmin = pEnv.XMin Dim dblxmax as double dblxmax = pEnv.XMax

Ex :

Pour accder aux methodes dune classe COM, regarder si la mthode renvoie ou non une valeur. Si oui dclarer une variable du mme type.

pour augmenter lechelle facteur 2 pEnv.Expand 0.5, 0.5, true

daffichage

dun

pour dessiner un cercle laide du control appropri Dim pCircle as IPolygon Set pCircle = MapControl2.TrackCircle

Alexandre Pauthonnier

46/82

Juillet 2010 v3.1

Pour ajouter du code en rponse des vnements concernant des controls personnaliss (ceux ajouts par loutil de personnalisation de linterface dans ArcMap), remplir les squelettes de procdures gnrs automatiquement dans le projet VB. Pour coder les vnements associs un ArcObject, dclarer une variable avec le mot cl WithEvents en tte de module les

on dclare la variable pour couter vnements associs la fentre active Private WithEvents m_pActiveViewEvents As Map on instancie la variable Public Sub SetEvents() Dim pMxDoc As IMxDocument Set pMxDoc = Application.Document Set m_pActiveViewEvents = pMxDoc.FocusMap End Sub

on code la rponse lvnement Private Sub m_pActiveViewEvents_SelectionChanged() MsgBox "Selection Changed" End Sub

Pour encapsuler des donnes dans des classes, dclarer les sous forme de proprits prives la structure et implmenter sur la structure les mthodes Property Get, Property Set, Property Let quutiliseront les clients pour accder en lecture/criture aux donnes.

III.4.3. Pratique dinterface

des

concepts

de

classe

et

Imaginons que lon souhaite dcrire les concepts de dmocratie et de dictature puis manipuler les structures ainsi dcrites (les serveurs) dans un programme client crit en VB. Lanalyse conceptuelle permet de dgager un certain nombre de proprits et mthodes communes aux deux structures. Quil sagisse dune dmocratie ou dune dictature, on considre une entit pays qui a un nom, une population, un volume dexportations et dimportations, une arme, une balance commerciale; ces donnes peuvent tre regroupes dans une classe abstraite Pays. Certaines de ces donnes vont tre implmentes de manire diffrente : si lon considre que leffectif de larme peut se dduire proportionnellement la population dun pays, on peut convenir que le rapport nest pas le mme selon quil sagit dune dmocratie ou dune dictature. Lanalyse rvle aussi des donnes propres chacune des structures: il faut par exemple considrer les concepts dlection et de priodicit des lections pour une dmocratie, celui de coup dtat pour une dictature. Sur la base de ces donnes, on a le modle conceptuel suivant qui dcrit 3 classes : une classe abstraite Pays et deux classes instanciables Democratie et Dictature.

Alexandre Pauthonnier

47/82

Juillet 2010 v3.1

Ces 3 classes peuvent tre cres en VB sous forme de modules de classe. Cela tant, la norme COM impose dencapsuler laccs aux donnes (dans le modle ci-dessus, la porte des donnes est publique). Cest l quintervient la notion dinterface.

Pour crer les interfaces en VB, quutiliseront les clients de nos structures Democratie et Dictature, il faut crer 5 modules de classes : 3 pour spcifier chacune des 3 structures mises en vidence par le modle conceptuel ; ce sont les interfaces IPays, IDemocratie et IDictature. 2 pour implmenter les structures instanciables de notre modle conceptuel Les interfaces exposent les membres dune structure : proprits et mthodes ont une porte publique. Les classes implmentent ces membres : ceux-ci ont une porte prive ; les proprits en particulier sont lues ou modifies avec des mthodes de type Get ou Set (property Get ou Set en VB).

Alexandre Pauthonnier

48/82

Juillet 2010 v3.1

Alexandre Pauthonnier

49/82

Juillet 2010 v3.1

ANNEXES
Annexe 1 : personnalisation Arcgis bureautique en VBA
Depuis ArcMap (ou ArcCatalog) on ouvre lditeur VB avec Alt+F11. Tout document ArcMap comporte un projet VB Project; il est enregistr avec le document lorsquon sauvegarde celui-ci. En VBA (VB en gnral), le code est structur dans des modules, des modules de classe et des formulaires. Ces lments sont eux-mmes stocks dans des projets VB.

Un module est un ensemble dinstructions VB, structures sous forme de procdures et de fonctions. Un module de classe dcrit une classe au sens orient-objet du terme, i.e. spcifie et implmente un ensemble de proprits et mthodes. (on utilise galement les modules de classe pour crer une interface COM) Un formulaire est une IHM qui contient un certain nombre de controls (boutons, liste droulante) auxquels est associ du code vnementiel.

Tout document comporte galement un projet Normal qui est un template, contenant tous les lments dinterface standards, ainsi quun module nomm ArcID qui contient lUID de chaque commande de lapplication. Le code personnalis est le plus souvent attach au projet Project et non pas Normal. Dans le cas contraire, le code sera commun tous les documents ArcMap crs sur le poste de travail. Si on a ouvert le document ArcMap partir dun template autre que Normal.mxt, un autre projet template apparat galement. Tous les documents Arcmap ou ArcCatalog contiennent un module de classe particulier nomm ThisDocument. Ce module reprsente le document, qui pour ArcMap est une instance de la classe MxDocument, pour ArcCatalog une instance de GxDocument. Une fois lditeur VB ouvert, il est possible dinsrer de nouveaux modules, modules de classe ou formulaires. Le code attach chacun de ces lments peut Alexandre Pauthonnier 50/82

Juillet 2010 v3.1

tre visualis simultanment dans plusieurs fentres. Il est possible de copiercoller du code dune fentre lautre. Il est galement possible dimporter un lment de lun des 3 types mentionns depuis un fichier enregistr sur le disque. Pour ajouter du code, on peut crire dans le module de classe ThisDocument

insrer un nouveau module

Un module (ou un module de classe, ou un formulaire) comporte des instructions. Ces instructions sont stockes dans des procdures, chacune tant du type sub, function ou property (les getter et setter pour lire et crire les donnes membres prives dune structure) et chacune tant daccs public ou private. Les procdures en accs private ne sont visibles qu lintrieur du module dans lequel elles sont dcrites. Un module comporte en outre des dclarations de variable. Les variables peuvent tre locales ou globales. Les locales ont une porte limite celle de la procdure dans laquelle elles sont dclares. Les globales quant elles persistent tant que le programme tourne. Si on souhaite crer une IHM, on insre un module de type formulaire, puis on fixe graphiquement le contenu de celui-ci en piochant parmi les controls proposs par la bote outils.

N.B : il est possible dajouter tout control rfrenc dans la base de registres. Ensuite, dans la fentre de code attach au formulaire, on implmente parmi la liste des vnements attachs chacun des controls ceux que lon souhaite traiter. Pour protger le code attach un document, i.e. pour empcher tout utilisateur du document de le voir et donc de le modifier, il suffit de dfinir une protection par mot de passe avec un clic droit sur Project>Proprits. Pour excuter le code dune procdure, placer le curseur dans la procdure puis excuter. Une alternative consiste ajouter linterface du document ArcMap un

Alexandre Pauthonnier

51/82

Juillet 2010 v3.1

bouton personnalis de type Custom Control>Button Control et dclencher le code en raction lvnement clic sur ce nouveau control. Il y a un environnement de dboggage : ajout de points darrt, instructions pas pas, examen du contenu des variables. En VBA, il y a 2 variables globales dapplication, qui peuvent tre utilises par tout module et toute procdure : Application et ThisDocument. La 1re permet de manipuler linstance de la classe Application en cours, i.e. lArcMap actuellement utilis ; la seconde permet de manipuler le document ArcMap ouvert, en tant quinstance de la classe MxDocument. Pour de plus amples explications, ainsi quune prise en main approfondie des ArcObjects se rfrer au document ENSG Introduction la programmation en VBA sur ArcGIS (document word).

Alexandre Pauthonnier

52/82

Juillet 2010 v3.1

Annexe 2 : extension ArcGIS bureautique avec Microsoft Visual Basic 6


N.B : Il est utile au pralable dinstaller un certain nombre dadds-ons fournis par Esri, qui facilitent le travail de programmation. Afin de charger dans lenvironnement de dveloppement VB tous les adds-in, il suffit dexcuter registervbaaddins.exe que lon trouve dans le rpertoire addins du kit de dveloppement. Pour crer un composant COM, avec Visual Basic, il suffit de crer un ActiveX Dll. On obtient un projet VB avec un module de classe.

Paramtrer comme suit les proprits dinstanciation :

Charger ensuite les bibliothques ESRI requises pour le dveloppement (aller dans Projet>References). Il est en effet ncessaire de rfrencer les ArcObjects (classes, interfaces) qui nont aucune raison dtre connus de lIDE. Selon ce que lon veut programmer, il faut charger un plus ou moins grand nombre de bibliothques. Dans tous les cas, on charge au moins la bibliothque Esri System Object (esriSystem.olb) ainsi que la bibliothque carto (esricarto.olb), les bibliothque ArcMap, ArcMap UI, Framework, SystemUI. Si on travaille avec les objets de lextension Spatial Analyst, il faut charger Esri Spatial Analyst Object.

Alexandre Pauthonnier

53/82

Juillet 2010 v3.1

Le module de classe doit ensuite implmenter une ou plusieurs interfaces. Cest linstruction Implements qui indique quelles sont les interfaces implmentes. Il faut donc coder toutes les mthodes attaches la (ou les) interface(s) en question, sinon le programme plante lexcution : cest le principe stipul par COM concernant limplmentation des interfaces de type Inbound. Pour certaines interfaces, a peut tre relativement fastidieux. Cela tant, un des add-ons ajouts cre automatiquement les prototypes des mthodes implmenter.

ex : pour crer une nouvelle commande, intgrable linterface dArcMap, le module de classe doit implmenter linterface esriSystemUI.ICommand ;

Alexandre Pauthonnier

54/82

Juillet 2010 v3.1

LEsri Interface Implementer permet dobtenir les prototypes de mthodes suivants :

Il faut implmenter de manire obligatoire : ICommand_enabled (renvoie true) ICommand_Checked (renvoie false) ICommand_OnCreate (pour rcuprer dans une variable linstance de la classe Application laquelle la commande est attache) ICommand_OnClick pour coder la fonctionnalit Lexemple suivant montre le code ncessaire la cration dun composant qui affiche le nom du bloc de couches actif du document arcmap auquel il est attach.

Alexandre Pauthonnier

55/82

Juillet 2010 v3.1

Ne pas oublier de dsallouer la mmoire pour les variables globales dans la mthode class_terminate du module de classe. Il faut enfin compiler le code pour fabriquer la dll : aller dans Fichier>crer xxx.dll. Si on souhaite dfinir une icne pour la commande, on peut crer un formulaire contenant un control image.

Alexandre Pauthonnier

56/82

Juillet 2010 v3.1

il faut ensuite charger ce formulaire lorsquon instancie la commande (mthode class_initialize) et rcuprer ladresse de limage dans la mthode Bitmap de linterface ICommand. Cest un nouveau composant prt lemploi. Il peut tre charg dans ArcMap laide du menu Outils>Personnaliser>Ajouter depuis un fichier.

Alexandre Pauthonnier

57/82

Juillet 2010 v3.1

Annexe 3 : extension ArcGIS bureautique avec Microsoft .Net


Ouvrir Microsoft Visual Studio 2005.

En VB ou C# (dans tout ce qui suit les codes sont crits en VB), crer un nouveau projet MaCommandeDotNet en utilisant le template Argis Desktop Class Library (ArcMap)fourni.

Ajouter ensuite au projet les rfrences vers les .Net assemblies (les bibliothques utiles) qui vont nous permettre de dvelopper notre commande partir des composants ArcObjects.

Alexandre Pauthonnier

58/82

Juillet 2010 v3.1

Slectionner puis ajouter les assemblies Framework, Geometry, System, SystemUI.

suivantes :

ADF,

ArcMapUI,

Carto,

Lassistant cre alors le nouveau projet. On ajoute manuellement une rfrence supplmentaire vers lassembly System.Drawing laide de Projet>Ajouter une rfrence.

Dtruire le fichier class1.vb qui a t cre automatiquement par lassistant. On va utiliser un template pour crer une nouvelle classe de type Commande lintrieur de notre projet. N.B : le projet qui a t cr est de type bibliothque de classes.

Alexandre Pauthonnier

59/82

Juillet 2010 v3.1

Cliquer droit sur le projet (dans lexplorateur de projets) et ajouter un nouvel lment

Parmi les templates proposs, choisir Base command et appeler la nouvelle classe ZoomsuruneCouche.vb.

Alexandre Pauthonnier

60/82

Juillet 2010 v3.1

Choisir de crer une commande de type Desktop ArcMap.

Dans lexplorateur de projet, dtruire licne qui a t ajoute automatiquement par lassistant. Ajouter ensuite une rfrence vers le fichier layer_6.bmp stock dans le \bin\icons du rpertoire dinstallation dArcGIS. Slectionner le fichier ainsi ajout et modifier les proprits Action de gnration (ressource incorpore) et Nom de Fichier (ZoomsuruneCouche.bmp). Si on observe le code gnr automatiquement par lassistant, on voit que : La classe hrite de la classe BaseCommand (laquelle est une classe abstraite) La classe comporte 4 membres o Une proprit, m_application, qui est une rfrence vers lapplication laquelle la commande quon dveloppe est intgre o Un constructeur o 2 mthodes hrites de BaseCommand et surcharges, OnCreate et OnClick Le code est pr-rempli mais doit bien entendu tre complt.

Compltons tout dabord le code du constructeur

Alexandre Pauthonnier

61/82

Juillet 2010 v3.1

N.B : le code ci-dessus suppose que le fichier bmp et la classe portent le mme nom. Codons ensuite la fonctionnalit proprement parler. Nous allons utiliser des snippets ArcGIS, i.e. des morceaux de code directement rutilisables. Placer le curseur sur la ligne prcdent la fin de classe et insrer par clic droit lextrait de code ArcGIS bureautique>Mapping>Zoom to active Layer in TOC.

Lextrait peut tout moment tre rduit en cliquant sur le signe - dans la marge gauche.

Alexandre Pauthonnier

62/82

Juillet 2010 v3.1

La procdure ainsi ajoute permet de modifier ltendue de la fentre cartographique. Cette procdure a un paramtre : une rfrence vers le document ArcMap ouvert. Pour obtenir une rfrence vers le document, nous allons utiliser un deuxime extrait de code : ArcGIS bureautique>mapping>Map documents>Get MxDocument from ArcMap. Ce code permet dobtenir la rfrence vers le document partir de lapplication, laquelle est accessible par la proprit membre de notre classe. Il sagit maintenant dappeler les procdures ci-dessus dans la mthode OnClick qui sera appele en raction au clic utilisateur sur notre commande lorsque celle-ci aura t intgre linterface dArcMap. Complter le code comme suit :

Voil, cest presque fini. Il reste faire en sorte que notre classe soit reconnue comme une classe COM (on rappelle que tous les composants ArcGIS sont des composants COM), ce qui nest pas le cas par dfaut lorsquon dveloppe un composant en environnement .Net. La compatibilit COM a en fait dj t prise en charge par lassistant lors de la cration de la classe. Il sagit des procdures stockes dans la zone COM registration functions. Il ny a plus qu compiler notre classe. Enregistrer compiler avec le menu Gnrer>Gnrer nom du projet. dabord le projet puis

Le rsultat de la compilation et de ldition de liens est un composant DLL stock dans le sous-dossier bin>Release.

Alexandre Pauthonnier

63/82

Juillet 2010 v3.1

On peut maintenant intgrer la commande lIHM dArcMap. A laide du menu Personnaliser aller chercher dans la catgorie Developer Samples (cest bien ainsi que nous avons rempli la proprit category dans le constructeur de la classe) la commande que nous venons de crer.

On peut galement crer un composant excutable en mode debug et lintgrer linterface dArcMap.

Alexandre Pauthonnier

64/82

Juillet 2010 v3.1

Il faut tout dabord dfinir ArcMap comme application de dboguage. Pour ce faire ouvrir les proprits (volet Dboguer) du projet dans lexplorateur.

Ajouter ensuite un point darrt sur une instruction excutable (au niveau du constructeur de la classe par exemple) et excuter depuis Visual Studio : Arcmap est excut ; si o ouvre un document qui contient une rfrence vers la commande, alors celle-ci va tre excut en mode debug.

Alexandre Pauthonnier

65/82

Juillet 2010 v3.1

Annexe 4 : retour sur la programmation dvnements avec lAPI ArcObjects.


Certains ArcObjects sont capables de rpondre des vnements. On retrouve ici une caractristique des logiciels pilots par des IHM : les calculs sont le plus souvent dclenchs conscutivement des actions utilisateurs sur les lments de linterface. On le sait, COM impose de manipuler les ArcObjects travers des interfaces. Telles quon les a prsentes jusqu prsent, les interfaces donnent accs des proprits et des traitements clairement explicits. Les vnements ne rentrent pas dans ce cadre l puisque cest le client qui dcide de la faon dont les vnements sont traits (ce qui doit se passer par exemple lorsque la slection courante dentits change ; ou bien quand lon numrise de nouvelles entits). COM propose en fait deux types dinterface : les inbound interfaces et les outbound interfaces. Les inbound interfaces sont les plus courantes : elles permettent au client de faire appel des fonction implmentes par lobjet. Elles sont figures par une sucette vide. Les outbound interfaces permettent de grer les vnements. Le mcanisme est diffrent : cest lobjet qui fait appel au client lequel prend en charge lvnement. Elles sont figures par une sucette pleine.

Dans lextrait de diagramme ci-aprs (Godatabase), on constate que la classe ObjectClass implmente les deux types dinterfaces et en particulier linterface IObjectClassEvents laquelle permet de traiter les vnements de cration , modification et destruction relatifs tous les types dentits.

Alexandre Pauthonnier

66/82

Juillet 2010 v3.1

En guise dexemple, si lon souhaite prendre en charge (ou couter) les vnements de linterface ObjectClassEvents pour une classe dentits charge dans le document ArcMap courant, on dclare en VBA un pointeur global avec le mot cl WithEvents comme suit
'la variable globale pObjEvent est un couteur pour linterface 'dvnements de la classe ObjectClassEvents Private WithEvents pObjEvent as ObjectClassEvents

puis on instancie vnements

lcouteur

avec

lobjet

que

lon

souhaite

voir

ragir

aux

Public Sub initEvents() Dim pMxdoc As IMxDocument Set pMxdoc = Application.Document Dim pFeatureLayer As IFeatureLayer Dim pLayer As ILayer Dim pFeatureClass As IFeatureClass Set pLayer = pMxdoc.FocusMap.Layer(0) Set pFeatureLayer = pLayer Set pFeatureClass = pFeatureLayer.FeatureClass Dim pObjectClass As IObjectClass Set pObjectClass = pFeatureClass Set pObjEvent = pObjectClass End Sub

puis on implmente dans le mme module les vnements que lon souhaite grer.
Private Sub pObjEvent_OnChange(ByVal obj As IObject) MsgBox "OnChange for: " & obj.OID End Sub

Private Sub pObjEvent _OnCreate(ByVal obj As IObject) MsgBox "OnCreate for: " & obj.OID End Sub Private Sub pObjEvent_OnDelete(ByVal obj As IObject) MsgBox "OnDelete for: " & obj.OID End Sub

Pour que le client coute les vnements change, create et delete ainsi dcrits il faut bien entendu excuter la procdure initEventsI (on peut par exemple lappeler louverture du document). Mme si ces outbound interfaces ne sont pas les plus nombreuses, on les retrouve nanmoins sur un certain nombre de classes ArcObjects. Pour sen persuader un deuxime exemple :

Alexandre Pauthonnier

67/82

Juillet 2010 v3.1

le diagramme ci-dessus est extrait de lOMD Editor qui dcrit lenvironnement de mise jour des donnes dans ArcMap. Cette classe permet de paramtrer lenvironnement interactif de mise jour (classe dentits cible, type dopration, options de snap, ....) mais aussi de grer un certain nombre dvnements. Linterface IEditEvents permet entre autre de rpondre la cration dune entit, sa destruction, aux annulations, au changement doutil, ... 'la variable globale pEditorEvent est un couteur pour linterface 'dvnements par dfaut de la classe Editor Private WithEvents pEditorEvent As Editor ' on instancie le pointeur de faon ce quil coute les vnements ' gnrs par lobjet Editeur du document ArcMap courant Public Sub InitEvents() 'la classe ArcObject Editor est une classe simple; pour obtenir un 'pointeur sur un objet de cette classe il faut donc passer 'un autre objet : ici par lobjet Application Dim pUID As New UID pUID = "esriEditor.Editor" Set pEditorEvent = Application.FindExtensionByCLSID(pUID) If pEditorEvent Is Nothing Then Exit Sub MsgBox "pEditorEvent a t instanci" End Sub Private Sub pEditorEvent_OnStartEditing() MsgBox "On a ouvert une session ddition" End Sub Private Sub pEditorEvent_OnStopEditing(ByVal save As Boolean) MsgBox "On a ferm une session ddition" End Sub Private Sub pEditorEvent_OnCreateFeature(ByVal obj As esriGeoDatabase.IObject) MsgBox "On a cr une nouvelle entit" End Sub Private Sub pEditorEvent_OnDeleteFeature(ByVal obj As esriGeoDatabase.IObject) MsgBox "On a dtruit une entit"

Alexandre Pauthonnier

68/82

Juillet 2010 v3.1

End Sub Private Sub pEditorEvent_OnSelectionChanged() MsgBox "la slection a chang" End Sub Private Sub pEditorEvent_OnUndo() MsgBox "une opration vient dtre annule" End Sub

Alexandre Pauthonnier

69/82

Juillet 2010 v3.1

Annexe 5 : Cration dune application web avec visual studio 2005 partir du template dapplication livr avec ArcGIS Server
Prrequis : un map service ArcGIS Server doit avoir t cr au pralable. Dmarrer Visual Slectionner C# proposs. Studio 2005 et crer un nouveau projet de type Site web. comme langage puis Web mapping template parmi les templates

La page Default.aspx contient tous les controls de lapplication web ainsi que les vnements tels quils sont implments en standard.

Passer en mode design.

Alexandre Pauthonnier

70/82

Juillet 2010 v3.1

On peut voir les diffrents composants de linterface du template dapplication web (le pav Rsultats en haut gauche, le pav table des matires en dessous, le pav Carte leur droite ainsi que les managers qui sont des objets permettant de paramtrer le contenu des lments dinterface. Slectionner le map resource manager et clicker sur la flche pour accder au menu contextuel. Editer les proprits.

Alexandre Pauthonnier

71/82

Juillet 2010 v3.1

Ajouter une nouvelle ressource et la paramtrer de faon utiliser un map service gr par le serveur ArcGIS Server local (ou distant si on ne dveloppe sur la machine serveur).

Alexandre Pauthonnier

72/82

Juillet 2010 v3.1

Compiler puis excuter le projet.

Alexandre Pauthonnier

73/82

Juillet 2010 v3.1

Annexe 6 : dmarrer avec lAPI Javascript


Prambule : tous les exemples sont tirs du centre de ressources Esri

Partie 1 : inclure une carte dans une page web


Code :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Create a Map</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.4/js/dojo/dijit/themes/tundra/tundra.cs s"> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.4"></script> <script type="text/javascript"> dojo.require("esri.map"); var myMap, myTiledMapServiceLayer; function init() { myMap = new esri.Map("mapDiv"); myTiledMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer ("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer"); myMap.addLayer(myTiledMapServiceLayer); } dojo.addOnLoad(init); </script> </head> <body> <div id="mapDiv" class="tundra" style="width:900px; height:600px; border:1px solid #000;"></div> <h4>Work flow:</h4> <ul> <li>Create a map.</li> <li>Add an ArcGISTiledMapServiceLayer.</li> </ul> </body> </html>

Commentaires :
La partie head de la page web doit comporter deux scripts : un qui rfrence lAPI en ligne http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.4 ( la date de rdaction de ce document la version courante est la 1.4) et un autre qui contient le code permettant dinteragir avec la carte. Dans lexemple ci-dessus, le script instancie un composant Map puis un composant layer (pour tre exact, un composant de type ArcGISTiledMapServiceLayer, autrement dit un flux dimages dalles servies par un serveur ArcGIS) et ajoute la couche la carte. De manire plus dtaille, le script est structur en trois parties : Chargement des bibliothques utiles de lAPI : ici, on importe uniquement esri.map. Pour ce faire on utilise lobjet dojo. Linstruction dojo.require est lquivalent dun import ou include dans dautres langages. Une fonction init (et ventuellement toutes les autres fonctions que celleci peut appeler) contenant les instructions de cration de la carte interactive. La rponse lvnement de chargement de la page web dans le navigateur. Ici, la rponse lvnement est prise en charge par lobjet dojo travers la mthode AddOnLoad(). Cest le code de la fonction init() qui est excut au chargement de la page. La partie body de la page web est ici trs simple puisquelle ne comporte quune seule div (ou section), nomme mapDiv, contenant le composant Map instanci au chargement, ainsi quun paragraphe de texte.

Alexandre Pauthonnier

74/82

Juillet 2010 v3.1

Partie 2 : programmer un vnement


Lutilisation de lAPI Javascript ne se conoit que dans le cadre dune application interactive, ragissant de manire personnalise aux diffrentes actions de lutilisateur. La programmation est donc essentiellement base dvnements. Parmi les vnements grs, il y a ceux qui sont traits immdiatement et ceux qui sont traits en mode asynchrone aprs un aller-retour avec le serveur (principe AJAX). Quel que soit lvnement, afin de le prendre en charge, il faut ajouter du code qui coute , savoir du code qui permet de dclencher lexcution dun traitement lorsque lvnement survient. Dans lAPI Javascript, cest la mthode dojo.connect qui permet de dfinir des couteurs dvnements. Il faut fournir cette mthode trois paramtres : Lobjet en lien avec lvnement Lvnement La fonction qui prend en charge lvnement (le handler)

En guise dexemple, lappel suivant permet de dfinir un couteur pour lvnement clic sur lobjet map ainsi que le nom de la fonction traitant lvnement.
var monclicconnect = dojo.connect(map, onClick ,monClicHandler)

Il faut dsallouer les couteurs lorsquon quitte lapplication afin dviter les fuites mmoire. Pour ce faire, on cre un couteur pour lvnement onUnload et on dconnecte les diffrents couteurs allous dans le handler de ce onUnload laide de la mthode Disconnect.
var monunloadconnect = dojo.connect(map, onUnload ,monUnloadHandler) function monUnloadHandler(event) { dojo.disconnect(monclicconnect); }

Code :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Create a Map</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.4/js/dojo/dijit/themes/tundra/tundra.cs s"> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.4"></script> <script type="text/javascript"> dojo.require("esri.map"); var myMap, myTiledMapServiceLayer; function init() { myMap = new esri.Map("mapDiv"); dojo.connect(myMap,"onClick",monClicHandler); dojo.connect(myMap,"onUnload",monOnUnloadHandler); myTiledMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ES RI_StreetMap_World_2D/MapServer"); myMap.addLayer(myTiledMapServiceLayer); } function monClicHandler(event) { alert("L'utilisateur a cliqu en " + event.mapPoint.x + "," + event.mapPoint.y); } function monOnUnloadHandler(event) { dojo.disconnect(monClicHandler); } dojo.addOnLoad(init); </script> </head>

Alexandre Pauthonnier

75/82

Juillet 2010 v3.1

<body> <div id="mapDiv" class="tundra" style="width:900px; height:600px; border:1px solid #000;"></div> </body> </html>

Commentaires :
Le code prcdent affiche les coordonnes lorsquon clique sur le fond de carte StreetMap servi par ArcGISOnline.

Partie 3 : ajouter des donnes servies dynamiquement en WMS


Le code suivant tend les possibilits entrevues dans le premier extrait de code. Il montre comment paramtrer lextension spatiale de la vue cartographique (alors que le code prcdent affiche toute ltendue spatiale de la couche de base). Il permet surtout de superposer une couche de base servie par un serveur ArcGIS Serveur une couche gre par un serveur WMS. En effet, mme si par dfaut, lAPI Javascript ne permet dafficher que des donnes servies par des serveurs ArcGIS selon les protocoles dfinis par Esri, il est possible laide du Dojo dtendre les deux classes de couches prdfinies que sont DynamicMapServiceLayer et TiledMapServiceLayer.

Code :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=7" /> <title>WMS</title> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.4/js/dojo/dijit/themes/soria/soria.css" > <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.4"></script> <script type="text/javascript"> dojo.require("esri.map"); dojo.declare("pgwWMSLayer", esri.layers.DynamicMapServiceLayer, { constructor: function() { this.initialExtent = this.fullExtent = new esri.geometry.Extent({xmin:-180,ymin:90,xmax:180,ymax:90,spatialReference:{wkid:4326}}); this.spatialReference = new esri.SpatialReference({wkid:4326}); this.loaded = true; this.onLoad(this); }, getImageUrl: function(extent, width, height, callback) { var params = { request:"GetMap", transparent:"true", format:"image/png", bgcolor:"ffffff", version:"1.1.1", layers:"gpw2005", styles: "default", exceptions: "application/vnd.ogc.se_xml", //changing values bbox:extent.xmin + "," + extent.ymin + "," + extent.xmax + "," + extent.ymax, srs: "EPSG:" + extent.spatialReference.wkid, width: width, height: height }; callback("http://iceds.ge.ucl.ac.uk/cgi-bin/icedswms?"+dojo.objectToQuery(params)); } }) dojo.declare("brgmWMSLayer", esri.layers.DynamicMapServiceLayer, { constructor: function() { this.initialExtent = this.fullExtent = new esri.geometry.Extent({xmin:10,ymin:40,xmax:15,ymax:52,spatialReference:{wkid:4326}}); this.spatialReference = new esri.SpatialReference({wkid:4326}); this.loaded = true;

Alexandre Pauthonnier

76/82

Juillet 2010 v3.1

this.onLoad(this); }, getImageUrl: function(extent, width, height, callback) { var params = { request:"GetMap", transparent:true, format:"image/png", bgcolor:"ffffff", version:"1.1.1", layers:"departments,communities", styles: "default,default", exceptions: "application/vnd.ogc.se_xml", //changing values bbox:extent.xmin + "," + extent.ymin + "," + extent.xmax + "," + extent.ymax, srs: "EPSG:" + extent.spatialReference.wkid, width: width, height: height }; callback("http://swing.brgm.fr/cgi-bin/limitesadm?" + dojo.objectToQuery(params)); } }) --> function init() { var map = new esri.Map("map"); var startExtent = new esri.geometry.Extent(-6.062580, 41.163200, 10.878300, 51.291800,new esri.SpatialReference({wkid:4326}) ); map.setExtent(startExtent); map.addLayer(new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ES RI_Imagery_World_2D/MapServer")); var pgwLayer = new pgwWMSLayer(); pgwLayer.setOpacity(.75); map.addLayer(pgwLayer); map.addLayer(new brgmWMSLayer()); } dojo.addOnLoad(init); </script> </head> <body> <div id="map" class="soria" style="position:relative; width:1024px; height:512px; border:2px solid #000;"></div> </body> </html>

Commentaires :
Dans le code dynamiques : prcdent, on cre une carte avec trois sources de donnes

Les donnes mondiales image 2D du serveur arcgisonline La carte de densit de population en 2005 du serveur WMS http://iceds.ge.ucl.ac.uk/cgi-bin/icedswms? La carte des limites administratives dpartementales et communales du serveur WMS http://swing.brgm.fr/cgi-bin/limitesadm?

Pour prendre en charge les couches WMS, on cre deux nouvelles classes de couches (custom layers) hritant de la classe prdfinie DynamicmapServiceLayer laide de dojo.declare(). La mthode declare a 4 paramtres : Le nom de la nouvelle classe de couche Le nom de la classe dont elle hrite La fonction qui implmente le constructeur de la nouvelle classe, laquelle dtermine ltendue spatiale initiale et totale des donnes ainsi que le systme de rfrence La fonction qui implmente la mthode getImageUrl, qui dtermine les paramtres (dimensions, transparence, format, liste des couches) de limage que le serveur doit retourner. Ces deux classes tant dclares, le code de cration de la carte interactive est trs proche de celui du premier exemple : en effet, le code instancie un objet esri.map, puis un objet esri.geometry.Extent pour dfinir ltendue de la carte

Alexandre Pauthonnier

77/82

Juillet 2010 v3.1

lors de laffichage initial. Il ajoute ensuite la couche arcgisonline, puis chacune des deux couches servies en WMS.

Partie 4 : ajouter des donnes en cache sur un serveur (ex: les donnes OpenStreetMap). Utiliser les widgets du Dojo.
Code :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Afficher des donnes OpenStreetMap</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.4/js/dojo/dijit/themes/tundra/tundra.cs s"> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.4"></script> <script type="text/javascript"> var djConfig = { parseOnLoad: true } </script> <script type="text/javascript"> dojo.require("esri.map"); dojo.require("dijit.form.Slider"); var map, layer1, layer2; //pour en savoir plus http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jshelp/inside_cust om_layers.htm dojo.declare("OpenStreetMapLayer", esri.layers.TiledMapServiceLayer, { //constructeur de la nouvelle couche constructor: function() { this.spatialReference = new esri.SpatialReference({ "wkid": 102113 }); //paramtres des dalles aux diffrentes chelles this.tileInfo = new esri.layers.TileInfo({ "rows": 256, "cols": 256, "dpi": 96, "format": "PNG8", "compressionQuality": 0, "origin": { "x": -20037508.342787, "y": 20037508.342787 }, "spatialReference": { "wkid": 102113 }, "lods": [{ "level": 0, "scale": 591657527.591555, "resolution": 156543.033928 }, { "level": 1, "scale": 295828763.795777, "resolution": 78271.5169639999 }, { "level": 2, "scale": 147914381.897889, "resolution": 39135.7584820001 }, { "level": 3, "scale": 73957190.948944, "resolution": 19567.8792409999 }, { "level": 4, "scale": 36978595.474472, "resolution": 9783.93962049996 }, { "level": 5, "scale": 18489297.737236, "resolution": 4891.96981024998 }, {

Alexandre Pauthonnier

78/82

Juillet 2010 v3.1

},

},

},

},

},

},

},

},

},

},

"level": 6, "scale": 9244648.868618, "resolution": 2445.98490512499 { "level": 7, "scale": 4622324.434309, "resolution": 1222.99245256249 { "level": 8, "scale": 2311162.217155, "resolution": 611.49622628138 { "level": 9, "scale": 1155581.108577, "resolution": 305.748113140558 { "level": 10, "scale": 577790.554289, "resolution": 152.874056570411 { "level": 11, "scale": 288895.277144, "resolution": 76.4370282850732 { "level": 12, "scale": 144447.638572, "resolution": 38.2185141425366 { "level": 13, "scale": 72223.819286, "resolution": 19.1092570712683 { "level": 14, "scale": 36111.909643, "resolution": 9.55462853563415 { "level": 15, "scale": 18055.954822, "resolution": 4.77731426794937 { "level": 16, "scale": 9027.977411, "resolution": 2.38865713397468

}] }); //tendue spatiale totale de la couche. this.fullExtent = new esri.geometry.Extent({ "xmin": -20037508.34, "ymin": -20037508.34, "xmax": 20037508.34, "ymax": 20037508.34, "spatialReference": { "wkid": 102113 } }); //tendue spatiale initiale de la couche this.initialExtent = new esri.geometry.Extent({ "xmin": -35222182.633799955, "ymin": -19567879.240999974, "xmax": 35222182.633799955, "ymax": 19567879.240999974, "spatialReference": { "wkid": 102113 } }); //url des serveurs de tuiles openStreetMap this.servers = ["http://a.tile.openstreetmap.org/", "http://b.tile.openstreetmap.org/", "http://c.tile.openstreetmap.org/"]; this.serversLength = this.servers.length; this.serverIndex = 0; this.loaded = true; this.onLoad(this); }, getTileUrl: function(level, row, col) { //retourne la dalle en cache sur le serveur correspondant aux numros de ligne et colonne indiqus return this.servers[this.serverIndex++ % this.serversLength] + level + "/" + col + "/" + row + ".png"; } }); function init() {

Alexandre Pauthonnier

79/82

Juillet 2010 v3.1

var startExtent = new esri.geometry.Extent(-600284.1078298639, 5947637.185194191, 622708.3447326261, 6926031.147244183, new esri.SpatialReference({ wkid: 102113 })); map = new esri.Map("map", { extent: startExtent }); layer1 = new OpenStreetMapLayer(); map.addLayer(layer1); layer2 = new esri.layers.ArcGISDynamicMapServiceLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/se rvices/Demographics/ESRI_Population_World/MapServer", { opacity: 0.3 }); map.addLayer(layer2); dojo.connect(map, "onMouseMove", function(evt) { dojo.byId("coords").innerHTML = "X: " + evt.mapPoint.x + " | Y: " + evt.mapPoint.y; }); var slider = new dijit.form.HorizontalSlider({ name: "slider", value: 3, minimum: 0, maximum: 10, intermediateChanges: true, discreteValues: 11, showButtons: true, style: "width:200px;", onChange: function(value) { layer2.setOpacity(value / 10); dojo.byId("opval").innerHTML = value / 10; } }, "slider"); } dojo.addOnLoad(init); </script> </head> <body class="tundra"> <h2>Extension de la classe de couche TiledMapServiceLayer afin d'ajouter les donnees OpenStreetMap</h2> <p> Dans cet exemple les donnees OpenStreetmap sont ajoutees comme couche de base tandis que les donnees de population hebergees par un serveur Esri ArcGISOnline sont superposees dessus. Utiliser la barre pour definir la niveau de transparence de la couche en superposition. <a href="http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jshelp/insid e_custom_layers.htm">Plus de documentation sur le centre de ressources Esri </a> </p> <div id="coords" style="font-size:9pt; color:gray;"> </div> <div id="map" style="width:800px; height:400px; border:5px solid #ccc;"> </div> <p> Modifier la transparence de la couche population (<span id="opval">0.3</span>) <div id="slider"> </div> </p> </body> </html>

Commentaires :
Tout comme dans lexemple prcdent, on tend ici laide du dojo un type de couches (tuiles) gre par dfaut par ArcGIS Server. Cette extension de classe permet ici de charger les tuiles OpenStreeMap stockes sur des serveurs Mapnik. Lapplication de webmapping proprement parler contient quatre div superposes : Une pour afficher les coordonnes du curseur Une pour afficher la carte, laquelle contient 2 couches dinformations : le fond de plan OpenStreetMap et les donnes de densit de population servies par un serveur ArcGIS Online. Une pour afficher le niveau de transparence Une pour afficher la barre permettant de rgler le niveau de transparence Laffichage des coordonnes du curseur est gr dynamiquement par le dojo sous forme dun vnement OnMouseMove.

Alexandre Pauthonnier

80/82

Juillet 2010 v3.1

La barre de rglage du niveau de transparence est gre sous forme dun dijit, composant dinterface pr-programm (un des avantages du toolkit dojo) qui, en rponse lvnement onChange, met jour la div affichant le niveau de transparence.

Partie 5 : faire afficher les rsultats dune requte vers un serveur ArcGIS Serveur sur un fond Google Maps
Cet exemple montre comment utiliser lextension ArcGIS pour lAPI Google Maps afin dexploiter les rsultats dune interaction avec un serveur ArcGIS sur un fonds Google Maps.

Code :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html debug=true> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Query Task (Returns Point)</title> <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=DioG219lPJG3WTn3zmQqebsjVg" type="text/javascript"></script> <script src="http://serverapi.arcgisonline.com/jsapi/gmaps/?v=1.4" type="text/javascript" ></script> <script type="text/javascript"> var var var var var gmap = null; qtask = null; query = null; mapExtension = null; gOverlays = null;

function initialize() { // cration du fond Google Maps gmap = new GMap2(document.getElementById('gmap')); gmap.addMapType(G_NORMAL_MAP); gmap.addMapType(G_SATELLITE_MAP); gmap.addControl(new GLargeMapControl()); gmap.addControl(new GMapTypeControl()); gmap.setCenter(new GLatLng(33.96964806519751, -117.37674951553345), 17); // RIVERSIDE (Point) gmap.enableScrollWheelZoom(); //instanciation du mapExtension mapExtension = new esri.arcgis.gmaps.MapExtension(gmap); // instanciation du Query Task qtask = new esri.arcgis.gmaps.QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demogr aphics/ESRI_Census_USA/MapServer/0"); // instanciation de la requte query = new esri.arcgis.gmaps.Query(); } function executeQuery() { var bounds = gmap.getBounds(); // on efface les markers et les couteurs d'vnements associs mapExtension.removeFromMap(gOverlays); // paramtrage de la requte query.queryGeometry = bounds; query.returnGeometry = true; // excution de la requte sur le service ArcGIS Server instanci qtask.execute(query, false, mycallback); } function mycallback(fset) { var myMarkerOptions = { title: "2000 Population: {POP2000}" }

Alexandre Pauthonnier

81/82

Juillet 2010 v3.1

var overlayOptions = { markerOptions:myMarkerOptions }; var infoWindowOptions = { content:"Population = {POP2000}<br/>Nombre de mnages = {HOUSEHOLDS}<br/>Nombre de maisons = {HSE_UNITS}" }; // ajout des entits rsultats sous forme de markers gOverlays = mapExtension.addToMap(fset); } </script> </head> <body onload="initialize();" onunload="GUnload();"> <table width="100%" height="100%"> <tr> <td align="center"> <table> <tr align="left"> <td> <input type="button" value="Rechercher les ilts" onclick="executeQuery();" />&nbsp; <input type="button" value="Effacer les marqueurs" onclick="mapExtension.removeFromMap(gOverlays);" /> </td> </tr> <tr align="left" valign="top"> <td> <div id="gmap" style="width: 500px; height:500px;"></div> </td> </tr> </table> </td> </tr> </table> </body> </html>

Commentaires :
Lexemple permet dinteragir avec une couche de points dun service de carte hberg par un serveur ArcGIS. Lorsquon charge lapplication, le fonds Google Maps saffiche ; lorsquon clique sur le bouton Rechercher les ilots , des markers matrialisant les centrodes des ilots de recensement aux Etats-Unis (les census block points pour tre prcis) apparaissent. Si on clique sur lun dentre eux, un popup dinformations apparat. Le bouton Effacer les marqueurs permet de dtruire les marqueurs. Le code contient trois fonctions Javascript : La fonction initialize qui cre la carte Google Maps, centre et mise lchelle tel que souhait. Cette fonction instancie galement un objet MapExtension permettant linteraction avec ArcGIS Server ; cela se traduit ici par la capacit afficher les rsultats dune requte ; pour ce faire il est ncessaire dinstancier un objet QueryTask destin stocker lurl du service permettant daccder aux donnes de recensement (la couche des block points est ici identifie par le numro O), puis un objet Query. La fonction executeQuery qui est excute en raction au clic sur le bouton Rechercher les ilts . Elle rcupre les coordonnes du rectangle englobant de la vue courante, spcifie la requte (tendue spatiale, champs rcuprer) puis lexcute. La fonction mycallback qui est excute aprs excution de la requte et qui traduit les rsultats sous forme de markers ; elle paramtre en outre le contenu des popups obtenus par clic ou passage de la souris sur les markers.

Alexandre Pauthonnier

82/82