Rapport de Mini-Projet en ArcGIS Engine Réalisée par : Asmae BENMESSAOUD 3ème Année Cycle d Ingénieur Géoinformation Année Universitaire 2010-
Sommaire 1
Introduction L analyse géographique et la visualisation spatiale améliorent le fonctionnement, la prise de décision et la résolution des problèmes, pour ces raisons et bien d autre les développeurs de logiciels ont pu concevoir des applications simples et spécialisées aillant la puissance de la technologie des systèmes d information géographique (SIG) pour notre expertise domaine. L ArcGIS Engine présente un outil très puissant de développement qui rassemble tout ce qu on a besoin pour développer et déployer des solutions SIG personnalisées. 2
I.Présentation de l ArcGIS Engine : I-1) Introduction d ArcGIS Engine : ArcGIS Engine est une nouvelle infrastructure de composants au sein de la gamme de produits ESRI ArcGIS, conçue pour intégrer des fonctionnalités spatiales à de nouvelles applications ou des applications existantes. ArcGIS Engine intègre les deux composants suivants : Le Kit de développement d'arcgis Engine, qui contient les composants et les outils de développement permettant de concevoir des solutions, La Licence de déploiement d'arcgis Engine, l'infrastructure indispensable pour exécuter les applications ArcGIS Engine. ArcGIS Engine constitue une gamme complète de composants logiciels clés, d outils et de ressources rassemblés permettant aux développeurs de concevoir des applications SIG et cartographiques personnalisées. Les développeurs peuvent étendre les bibliothèques d objets et contrôler intégralement l apparence et l utilisation des interfaces utilisateur de leurs applications. Les fonctionnalités d ArcGIS Engine peuvent être utilisées occasionnellement dans une application ou en constituer le 3
composant central. Les applications peuvent être déployées au sein de l infrastructure d ArcGIS Engine ou les développeurs peuvent intégrer des fonctionnalités SIG à d autres applications personnalisées ou commerciales telles que Microsoft Word ou Excel. I-2) Les fonctionnalités principales d ArcGIS Engine : *Création de cartes : Affichage des données, transparence des données multicouches, projections à la volée, Classification des données, Etiquetage de la symbologie, Mise en forme et impression *Interaction avec les cartes : Déplacement et zoom Identification, Hyperlien vers des applications ou adresses URL externes, Analyse de cartes, Opérations de sélection : sélection interactive, sélection par attribut, Opérations d analyse : mise en zone tampon, découpage, fusion, intersection, union, jointure spatiale. *Création de données (fichier de formes et géodatabase personnelle) : Edition de fichiers de formes et de géodatabase, Rectification d images Géocodage et événements, Segmentation dynamique Fichiers MXD en lecture et écriture. ArcGIS Engine permet : D intégrer une logique SIG à des applications industrielles personnalisées, 4
De concevoir et de déployer efficacement des applications SIG, D accéder à une logique SIG avancée à partir d applications simplifiées, D intégrer une logique et des cartes SIG à des applications commerciales telles que Microsoft Word et Excel, De concevoir des applications compatibles entre platesformes avec VB.NET, C++, ou Java. I-3) Conception d applications avec ArcGIS Engine: Les développeurs conçoivent des applications ArcGIS Engine dans l environnement de développement intégré de leur choix, tel que : Microsoft Visual Basic (VB) et Visual Studio.NET Eclipse, Sun ONE Studio et Borland JBuilder pour les développeurs Java Les développeurs enregistrent les composants du kit de développement d ArcGIS Engine dans leur environnement de développement intégré, Par exemple, un développeur VB peut concevoir une application SIG spécialisée en ajoutant à l application un contrôle de carte, un contrôle de table des matières et les barres d outils de son choix. L application terminée peut alors être installée sur n importe quel poste ArcGIS Engine Runtime (y compris les postes ArcGIS Desktop) à des fins de déploiement. I-4) Déploiement d applications ArcGIS Engine : Toutes les applications conçues avec le kit de développement 5
d ArcGIS Engine nécessitent ArcGIS Engine Runtime ou une application ArcGIS Desktop (ArcView, ArcEditor ou ArcInfo ) pour s exécuter correctement. Le créateur d une application peut fournir le logiciel ArcGIS Engine Runtime intégré au code exécutable ou demander à l utilisateur final d obtenir une licence pour le logiciel ArcGIS Engine Runtime directement auprès d ESRI. Le logiciel ArcGIS Engine Runtime standard fournit les fonctionnalités de base de tous les produits ArcGIS et peut être amélioré par : L extension Géodatabase Update pour un accès total en lecture/écriture à une géodatabase multiutilisateurs, L extension 3D pour la visualisation 3D avancée, L extension spatiale pour l analyse spatiale complexe. I I. Présentation de Mini-Projet: I I-1) Introduction : Dans le cadre de notre formation d une semaine avec Mr. BOUAZAOUI, qui était très intéressante pour nous, car on avait appris tous un bagage pour le développement des applications en ArcGIS Engine à travers : des cours théoriques, des exposés et ainsi des exercices quotidiens. À la fin de cette formation on avait été censé de faire une application qui constitue la continuité de dernier exercice qu on a fait sur la cartographie qualitatif et quantitatif mais nous 6
avons été conçue de refaire la cartographie qualitatif à travers la valeur unique et la cartographie quantitatif en utilisant le changement du couleur et de symbole, pratiquement c est comme ce qui existe sur ArcMap dans les propriétés des couches dans l onglet «Symbology». I I-1) L interface demandé par le professeur : Le professeur nous a proposé de faire une interface qui ressemble au schéma ci-dessous : *Le schéma proposé : 7
III. Application : À l exécution de mini-projet vous trouvez la page suivante : 8
Pour passer à faire une cartographie on fait : On aura l interface suivante: 9
Pour faire une cartographie qualitatif on choisit une couche sous forme des points et on clique sur le bouton «Valeur Unique» on obtient : 10
Sur la Map on trouve : Pour une couche sous format polygone comme «région» on obtient : Sur la Map on a : 11
Pour une couche sous format line comme «les réseaux hydrauliques» on a : Sur la carte on avait : 12
Pour la réalisation de cette première étape on a utilisé deux fonctions principales dans le module «valeur_unique_point» et «valeur_unique_ fil» et selon la forme de notre couche, on les a appelés dans le bouton valider par le code suivant: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.DataGridView1.Rows.Clear() If Rechercher_Layer_byname_in_carte(Form2.cmb1.Text).FeatureClass.ShapeType = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint Then valeur_unique_point(rechercher_layer_byname_in_carte(form2.cmb1.text), ComboBox1.Text, 50) ElseIf Rechercher_Layer_byname_in_carte(Form2.cmb1.Text).FeatureClass.ShapeType = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon Then valeur_unique_fil(rechercher_layer_byname_in_carte(form2.cmb1.text), ComboBox1.Text, 50) Else valeur_unique_line(rechercher_layer_byname_in_carte(form2.cmb1.text), ComboBox1.Text, 50) End If decl = False End Sub 13
Pour la cartographie qualitatif suivant la couleur on choisit la couche et on clique sur le bouton «couleur», on choisit le champ, la classe et a couleur : Et sur la Map on obtient : 14
Pour une autre type de format de couche polygone par exemple on a même la possibilité de modifier la couleur en faisant un double clique sur la couleur afficher sur la DataGrid: La partie la plus intéressante dans le code de cette deuxième partie est celle qui existe sur le bouton OK où on modifie la couleur on a fait : Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim min As Integer Dim max As Integer Dim pgeolayer As IGeoFeatureLayer pgeolayer = Rechercher_Layer_byname_in_carte(Form2.cmb1.Text) 'Find the selected field in the feature layer Dim featureclass As IFeatureClass = m_featurelayer.featureclass Dim field As IField = featureclass.fields.field(featureclass.findfield(frm_couleur.combobox1.te)) 'Get a feature cursor Dim cursor As ICursor cursor = m_featurelayer.search(nothing, False) 'Create a DataStatistics object and initialize properties Dim datastatistics As IDataStatistics = New DataStatisticsClass datastatistics.field = field.name datastatistics.cursor = cursor 'Get the result statistics Dim statisticsresults As IStatisticsResults statisticsresults = datastatistics.statistics 15
'Set the values min min and max values min = statisticsresults.minimum max = statisticsresults.maximum 'Create a new ClassBreaksRenderer and set properties m_classbreaksrenderer = New ClassBreaksRenderer m_classbreaksrenderer.field = frm_couleur.combobox1.selecteditem m_classbreaksrenderer.breakcount = Convert.ToInt32((frm_couleur.ComboBox2.Text)) + 1 m_classbreaksrenderer.minimumbreak = Convert.ToDouble(min) 'Calculate the class interval by a simple mean value Dim interval As Double interval = (Convert.ToDouble(max + 1) m_classbreaksrenderer.minimumbreak) / m_classbreaksrenderer.breakcount 'Get the color ramp Dim colorramp As IColorRamp colorramp = m_stylegalleryitem.item 'Set the size of the color ramp and recreate it colorramp.size = Convert.ToInt32(frm_couleur.ComboBox2.Text) + 2 colorramp.createramp(false) Dim i As Integer, currentbreak As Double Dim simplefillsymbol As ISimpleFillSymbol Dim smarker As ISimpleMarkerSymbol Dim simpleline As ISimpleLineSymbol 'Get the enumeration of colors from the color ramp Dim enumcolors As IEnumColors = colorramp.colors enumcolors.reset() currentbreak = m_classbreaksrenderer.minimumbreak ' test de shapetype If m_featurelayer.featureclass.shapetype = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint Then For i = 0 To m_classbreaksrenderer.breakcount - 1 'Set class break m_classbreaksrenderer.break(i) = currentbreak 'Create simple marker symbol and set color smarker = New SimpleMarkerSymbol smarker.style = esrisimplemarkerstyle.esrismscircle smarker.size = 5 smarker.color = enumcolors.next() 'Add symbol to renderer m_classbreaksrenderer.symbol(i) = smarker currentbreak += interval addcontrol(smarker, i, m_classbreaksrenderer.label(i)) Next i ElseIf m_featurelayer.featureclass.shapetype = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon Then For i = 0 To m_classbreaksrenderer.breakcount - 1 'Set class break m_classbreaksrenderer.break(i) = currentbreak 'Create simple fill symbol and set color simplefillsymbol = New SimpleFillSymbolClass simplefillsymbol.color = enumcolors.next() 'Add symbol to renderer ' m_classbreaksrenderer.symbol(i) = simplefillsymbol 16
m_classbreaksrenderer.symbol(i) = simplefillsymbol currentbreak += interval addcontrol(simplefillsymbol, i, m_classbreaksrenderer.label(i)) Next i 'Form1.AxMapControl1.ActiveView.Refresh() Else For i = 0 To m_classbreaksrenderer.breakcount - 1 'Set class break m_classbreaksrenderer.break(i) = currentbreak 'Create simple fill symbol and set color simpleline = New SimpleLineSymbol simpleline.color = enumcolors.next() simpleline.style = esrisimplelinestyle.esrislssolid simpleline.width = 5 'Add symbol to renderer ' m_classbreaksrenderer.symbol(i) = simplefillsymbol m_classbreaksrenderer.symbol(i) = simpleline currentbreak += interval addcontrol(simpleline, i, m_classbreaksrenderer.label(i)) Next i End If If pgeolayer Is Nothing Then Exit Sub ''Set the new renderer pgeolayer.renderer = m_classbreaksrenderer Form1.AxMapControl1.ActiveView.ContentsChanged() ''Refresh the display Form1.AxMapControl1.Refresh(esriViewDrawPhase.esriViewGeography, pgeolayer, Nothing) ''Hide the form Me.Hide() End Sub 17
La troisième partie est un petit peu où on a trouvé des problèmes car on doit faire une cartographie quantitatif par un symbole gradué et on a trois types de couche différentes comme on a déjà présenté : on a des couches sous formats : point, ligne et polygone, mais heureusement on a pu arriver enfin à réaliser notre but et on a comme une première interface : Et sur la Map on a : 18
Pour une couche sous format line on choisit le nombre de classe, la taille ; et le nouveau symbole : On clique sur OK on obtient : 19
On valide notre choix par : Sur la Map on avait le résultat suivant : 20
Pour la couche région on a suivis les mêmes démarches et on avait comme résultat : 21
Le code le plus intéressant dans cette deuxième partie se résume dans les deux fonctions qu on a ajoutées dans le module : «symbol_gradué_point» et «symbol_gradué_line», ont les a appelés dans Le bouton valider de la forme «frm_symbol» par la syntaxe suivante : Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Select Case Rechercher_Layer_byname_in_carte(Form2.cmb1.Text).FeatureClass.ShapeType Case esrigeometrytype.esrigeometrypoint symbol_gradué_point(combobox2.text, Rechercher_Layer_byname_in_carte(Form2.cmb1.Text), ComboBox1.Text, ComboBox3.Text, ComboBox4.Text) Case esrigeometrytype.esrigeometrypolyline symbol_gradué_line(combobox2.text, Rechercher_Layer_byname_in_carte(Form2.cmb1.Text), ComboBox1.Text, ComboBox3.Text, ComboBox4.Text) Case esrigeometrytype.esrigeometrypolygon symbol_gradué_point(combobox2.text, Rechercher_Layer_byname_in_carte(Form2.cmb1.Text), ComboBox1.Text, ComboBox3.Text, ComboBox4.Text) End Select decl = False End Sub Aussi le code de l affichage dans la DataGrid n était pas facile à réaliser on a utilisé deux autre fonctions dans le module : Private Function PreviewImage() As Image 'Get and set the style class Dim symbologystyleclass As ISymbologyStyleClass symbologystyleclass = frmsymbol.axsymbologycontrol1.getstyleclass(frmsymbol.axsymbologycontrol1.s tyleclass) 'Preview an image of the symbol Dim picture As stdole.ipicturedisp picture = symbologystyleclass.previewitem(galleryitem, 70, 30) Return System.Drawing.Image.FromHbitmap(New System.IntPtr(picture.Handle)) End Function Private Function PreviewImageline() As Image Dim image As System.Drawing.Image 'Get and set the style class Dim symbologystyleclass As ISymbologyStyleClass symbologystyleclass = frmsymbol.axsymbologycontrol1.getstyleclass(esrisymbologystyleclass.esristy leclasslinesymbols) 'Preview an image of the symbol 22
Dim picture As stdole.ipicturedisp picture = symbologystyleclass.previewitem(galleryitem, 70, 30) image = System.Drawing.Image.FromHbitmap(New System.IntPtr(picture.Handle)) Return image End Function et pour les relier à l affichage sur la DataGrid on les a appeler dans deux autre fonctions qui sont : Public Sub addcontrol2(byval jsy As ISymbol, ByVal i As Integer, ByVal str As String) Form2.DataGridView1.Rows.Add() Form2.DataGridView1.Rows(i).Cells(0).Value = PreviewImage() Form2.DataGridView1.Rows(i).Cells(1).Value = str Form2.DataGridView1.Rows(i).Cells(2).Value = str End Sub Public Sub addcontrol3(byval jsy As ISymbol, ByVal i As Integer, ByVal str As String) Form2.DataGridView1.Rows.Add() Form2.DataGridView1.Rows(i).Cells(0).Value = PreviewImageline() Form2.DataGridView1.Rows(i).Cells(1).Value = str Form2.DataGridView1.Rows(i).Cells(2).Value = str End Sub Conclusion A la fin de ce Mini-Projet et on guide de conclusion il parait crucial à nos yeux que l ArcGIS Engine permet d élaborer une vaste gamme d applications SIG, et d incorporer le SIG dans une application quelconque. Certains départements SIG souhaitent mettre au point des visionneuses SIG spécialisées avec des outils adaptés à leurs utilisateurs. Par exemple, un service administratif municipal peut avoir besoin d une série d applications de rapports fonciers spécialisés, basés sur des informations de la base de données SIG, qui les intègrent à des commandes de 23
travaux auprès d entreprises à des fins d autorisations, d imposition, de revues de planification, etc. Application foncière municipale avec ArcGIS Engine 24