SALLE DE CLASSE SALLE DE CLASSE -- SIG 2007SIG 2007
Programmer avecProgrammer avecle Web ADF dle Web ADF d ’’ArcGIS ServerArcGIS Server
44--22
ObjectifObjectif de de cettecette salle de Classesalle de Classe
•• Vous prVous préésenter senter ““sommairementsommairement”” les conceptsles concepts
•• Vous faire manipuler les classes dVous faire manipuler les classes d’’objets pour en objets pour en comprendre les grands principescomprendre les grands principes
•• PrPréé--requis pour cette sessionrequis pour cette session–– DDééveloppement Web (asp.net)veloppement Web (asp.net)
–– DDééveloppement ArcObjectsveloppement ArcObjects
–– DDééveloppement .NET (C#, VB.net)veloppement .NET (C#, VB.net)
11ereere partiepartieProgrammer avec les Programmer avec les ““ FonctionnalitFonctionnalit ééss”” du du
Web ADFWeb ADF
44--44
Processus de dProcessus de d ééveloppement avec le Web adfveloppement avec le Web adf
Contrôles web
Implémentation en utilisantl’API génerique appliquable
à tous les types de ressources (1e partie)
APIs spécifique à chaque type de Ressources (3e partie)
Complexité
44--55
IMapTocFunctionality
IQueryFunctionality
Data sources et fonctionalitData sources et fonctionalit ééss
Resource managers Web ADF controls
IGISDataSource IGISResource IGISFunctionality
IMapResource
IGeoprocessingResource
IGeocodeResource
IMapFunctionality
ITileFunctionality
IScalebarFunctionality
IGeocodeFunctionality
IGeoprocessingFunctionality
44--66
Programmer avec les Programmer avec les ““ fonctionnalitfonctionnalit ééss”” du Web ADFdu Web ADF
•• Principales Principales éétapestapes1.1. DDéémarrer avec les contrmarrer avec les contrôôles Webles Web
2.2. AccAccééder der àà un un ““resource managerresource manager””
3.3. Trouver une ressourceTrouver une ressource
4.4. DDééterminer quelles sont les fonctionnalitterminer quelles sont les fonctionnalitéés s supportsupportéées par cette ressourcees par cette ressource
5.5. ExExéécuter la fonctionnalitcuter la fonctionnalitéé
Web controlsWeb controls
Web controls
Resource managers
Data sources
FunctionalitiesResources
Data source-specific APIs
44--77
AccAcc ééder aux ressources depuis les contrder aux ressources depuis les contr ôôles Web les Web
•• DiffDifféérents rents ““managersmanagers”” existent pour gexistent pour géérer les diffrer les difféérents types rents types de ressources de ressources –– MapResourceManagerMapResourceManager
–– GeocodeResourceManagerGeocodeResourceManager
–– GeoprocessingResourceManagerGeoprocessingResourceManager
' Acceder au MapResource à partir du MapResourceMana gerDim resManager as MapResourceManager = Me.MapResour ceManager1
' Ou acceder au MapResource à partir du MapControlDim resManager as MapResourceManager = Map1.MapReso urceManagerInstanceDim mapResource as IMapResource = resManager.GetRes ource(0)
' Acceder au GeocodeResource à partir du GeocodeReso urceManagerDim geocodeResource as IGeocodeResourcegeocodeResource = GeocodeManager1.GetResource(0)
' Acceder au MapResource à partir du MapResourceMana gerDim resManager as MapResourceManager = Me.MapResour ceManager1
' Ou acceder au MapResource à partir du MapControlDim resManager as MapResourceManager = Map1.MapReso urceManagerInstanceDim mapResource as IMapResource = resManager.GetResource(0)
' Acceder au GeocodeResource à partir du GeocodeReso urceManagerDim geocodeResource as IGeocodeResourcegeocodeResource = GeocodeManager1.GetResource(0)
Web controls
Resource managers
44--99
Resources et fonctionalitResources et fonctionalit ééss
•• Une ressource supporte diffUne ressource supporte difféérentes rentes ““fonctionalitfonctionalitééss””
•• Les Les ““FonctionnalitFonctionnalitééss”” correspondent correspondent àà des des utilisations possibles de la ressourceutilisations possibles de la ressource––IMapFunctionalityIMapFunctionality
––IQueryFunctionalityIQueryFunctionality
––IMapTocFunctionalityIMapTocFunctionality
––ITileFunctionalityITileFunctionality
––IGeoCodeFunctionalityIGeoCodeFunctionality
Resources Functionalities
Data sources
44--1010
AccAcc ééder aux der aux ““ fonctionnalitfonctionnalit ééss””
•• Toujours vToujours véérifier si une ressource supporte une rifier si une ressource supporte une fonctionnalitfonctionnalitéé avent de lavent de l’’utiliserutiliser
•• NNéécessitcessitéé de de ““crcrééerer”” la la ““fonctionnalitfonctionnalité”é”
•• 2 fa2 faççons de rons de réécupcupéérer la rer la ““fonctionnalitfonctionnalité”é”::–– ÀÀ partir des contrpartir des contrôôles Webles Web
–– Directement depuis la ressourceDirectement depuis la ressource
Dim mf as ESRI.ArcGIS.ADF.Web.DataSources.IMapFunct ionalitymf = CType(mapctrl.GetFunctionality(0),ESRI.ArcGIS. ADF.Web.Datasources.IMapFunctionalityDim gisresource as ESRI.ArcGIS.ADF.Web.DataSources. IGISResourcegisresource = mf.ResourceDim supported as Boolean = _
gisresource.SupportsFunctionality(GetType(IQueryFun ctionality)Dim qfunc as ESRI.ArcGIS.ADF.Web.DataSources.IQuery Functionality
qfunc = CType(gisresource.CreateFunctionality(GetT ype(IQueryFunctionality), _ Nothing),IQueryFunctionality
Dim mf as ESRI.ArcGIS.ADF.Web.DataSources.IMapFunct ionalitymf = CType(mapctrl.GetFunctionality(0),ESRI.ArcGIS. ADF.Web.Datasources.IMapFunctionalityDim gisresource as ESRI.ArcGIS.ADF.Web.DataSources. IGISResourcegisresource = mf.ResourceDim supported as Boolean = _
gisresource.SupportsFunctionality(GetType(IQueryFun ctionality)Dim qfunc as ESRI.ArcGIS.ADF.Web.DataSources.IQuery Functionality
qfunc = CType(gisresource.CreateFunctionality(GetT ype(IQueryFunctionality), _ Nothing),IQueryFunctionality
44--1111
Programmer avec la Programmer avec la ““ MapFunctionalityMapFunctionality ””
•• Fournit les fonctions de bases dFournit les fonctions de bases d’’affichage et de affichage et de cartographiecartographie
•• PropriPropriééttéés s –– DisplaySettings, SpatialReference, UnitsDisplaySettings, SpatialReference, Units
•• MethodesMethodes–– GetLayers, GetScale, Get/SetLayerVisibility, GetLayers, GetScale, Get/SetLayerVisibility, DrawExtentDrawExtent
•• ImplImpléémentmentéé par ArcGIS Server, ArcIMS, ArcWeb, par ArcGIS Server, ArcIMS, ArcWeb, OGCOGC\\Web Map Server (WMS)Web Map Server (WMS)
Imports ESRI.ArcGIS.ADF.Datasources
Dim mf as IMapFunctionality = mapctrl.GetFunctional ity(0)mf.SetLayerVisibility(0,False)Map1.Refresh()Dim toc as ESRI.ArcGIS.ADF.Web.UI.WebControls.Toctoc = CType(Map1.FindControl("Toc1"),Toc)toc.Refresh()
Imports ESRI.ArcGIS.ADF.Datasources
Dim mf as IMapFunctionality = mapctrl.GetFunctional ity(0)mf.SetLayerVisibility(0,False)Map1.Refresh()Dim toc as ESRI.ArcGIS.ADF.Web.UI.WebControls.Toctoc = CType(Map1.FindControl( " Toc1 " ),Toc)toc.Refresh()
44--1212
Programmer avec la Programmer avec la ““ MapTocFunctionalityMapTocFunctionality ””
•• Fournit les fonctions pour accFournit les fonctions pour accééder et travailler avec la table des der et travailler avec la table des matimatièèresres
•• SS’’assurer que la fonctionnalitassurer que la fonctionnalitéé est supportest supportéée puis la cre puis la crééerer
•• MMééthodesthodes–– GetMapContents renvoie TocDataFrameGetMapContents renvoie TocDataFrame
•• TocDataFrameTocDataFrame–– Add, Clear, FindTocLayerAdd, Clear, FindTocLayer
–– TocLayer (Name, Visibility, AddTocLayer, RemoveTocLayer, etc.)TocLayer (Name, Visibility, AddTocLayer, RemoveTocLayer, etc.)
Dim gisresource as IGISResource = mf.ResourceIf (supported) Then
Dim mapToc as IMapTocFunctionality mapToc = _ gisResource.CreateFunctionality(GetType(IMapTocFunc tionality),Nothing), _IMapTocFunctionality
Dim tocData as ESRI.ArcGIS.ADF.Web.TocDataFrame()' Pass in MapFunctionality nametocData = mapToc.GetMapContents("Map_Map1",WebImage Format.JPG, False,True)Dim numLayers as Integer = tocData(0).Count
End If
Dim gisresource as IGISResource = mf.ResourceIf (supported) Then
Dim mapToc as IMapTocFunctionality mapToc = _ gisResource.CreateFunctionality(GetType(IMapTocFunc tionality),Nothing), _IMapTocFunctionality
Dim tocData as ESRI.ArcGIS.ADF.Web.TocDataFrame()' Pass in MapFunctionality nametocData = mapToc.GetMapContents("Map_Map1",WebImage Format.JPG, False,True)Dim numLayers as Integer = tocData(0).Count
End If
44--1313
Programmer avec la Programmer avec la ““ QueryFunctionalityQueryFunctionality ””
•• Fournit les fonctions pour trouver et identifier des entitFournit les fonctions pour trouver et identifier des entitéés s au sein dau sein d’’une ressourceune ressource
•• SS’’assurer que la fonctionnalitassurer que la fonctionnalitéé est supportest supportéée puis la cre puis la crééerer
•• MMééthodesthodes–– Find: recherche basFind: recherche baséée sur une chaine de caracte sur une chaine de caractèèrere
–– Query: RequQuery: Requêête baste baséée sur des attributse sur des attributs
–– Identify: RequIdentify: Requêête baste baséée sur une ge sur une gééomoméétrietrie
•• Renvoie une DataTable ou collection de DataTable()Renvoie une DataTable ou collection de DataTable()
Dim qfunc as ESRI.ArcGIS.ADF.Web.DataSources.IQuery Functionalityqfunc = CType(gisresource.CreateFunctionality(GetTy pe(IQueryFunctionality),
Nothing),IQueryFunctionality)
Dim lids() as Object = NothingDim lnames() as String = Nothingqfunc.GetQueryableLayers(Nothing, lids, lnames)
Dim pnt as New ESRI.ArcGIS.ADF.Web.Geometry.Point(- 110, 35)
Dim qdatatables as System.Data.DataTable() = qfunc.I dentify(Nothing, pnt, 3, ESRI.ArcGIS.ADF.Web.IdentifyOption.AllLayers, lids)
Dim qfunc as ESRI.ArcGIS.ADF.Web.DataSources.IQuery Functionalityqfunc = CType(gisresource. CreateFunctionality (GetType(IQueryFunctionality),
Nothing),IQueryFunctionality)
Dim lids() as Object = NothingDim lnames() as String = Nothingqfunc.GetQueryableLayers(Nothing, lids, lnames)
Dim pnt as New ESRI.ArcGIS.ADF.Web.Geometry.Point(- 110, 35)
Dim qdatatables as System.Data.DataTable() = qfunc. Identify (Nothing, pnt, 3, ESRI.ArcGIS.ADF.Web.IdentifyOption.AllLayers, lids)
44--1414
Programmer avec la Programmer avec la ““ QueryFunctionalityQueryFunctionality ””
•• Exemple mExemple mêêlant requlant requêête spatiale et attributairete spatiale et attributaireDim qfunc as ESRI.ArcGIS.ADF.Web.DataSources.IQuery Functionalityqfunc = CType(gisresource.CreateFunctionality(GetTy pe(IQueryFunctionality),
Nothing),IQueryFunctionality)
Dim lids() as Object = NothingDim lnames() as String = Nothingqfunc.GetQueryableLayers(Nothing, lids, lnames)
Dim spatialfilter as ESRI.ArcGIS.ADF.Web.SpatialFil ter = New ESRI.ArcGIS.ADF.Web.SpatialFilter()
spatialfilter.ReturnADFGeometries = truespatialfilter.MaxRecords = 1000spatialfilter.WhereClause = "STATE_NAME LIKE 'N%'"
Dim env as ESRI.ArcGIS.ADF.Web.Geometry.Envelopeenv = New ESRI.ArcGIS.ADF.Web.Geometry.Envelope(-12 0, 30, -100, 50)spatialfilter.Geometry = env
For Each o In lidsif o.Equals("states") ThenDim datatable as System.Data.DataTable datatable = qfunc.Query(Nothing, "states", spatialf ilter)Dim ds as System.Data.Dataset = new System.Data.Dat aset()ds.Tables.Add(datatable)TreeViewPlus1.Bindtodataset(ds)End If
Next o…
Dim qfunc as ESRI.ArcGIS.ADF.Web.DataSources.IQuery Functionalityqfunc = CType(gisresource. CreateFunctionality (GetType(IQueryFunctionality),
Nothing),IQueryFunctionality)
Dim lids() as Object = NothingDim lnames() as String = Nothingqfunc. GetQueryableLayers (Nothing, lids, lnames)
Dim spatialfilter as ESRI.ArcGIS.ADF.Web.SpatialFil ter = New ESRI.ArcGIS.ADF.Web.SpatialFilter()
spatialfilter.ReturnADFGeometries = truespatialfilter.MaxRecords = 1000spatialfilter.WhereClause = "STATE_NAME LIKE 'N%'"
Dim env as ESRI.ArcGIS.ADF.Web.Geometry.Envelopeenv = New ESRI.ArcGIS.ADF.Web.Geometry.Envelope (-120, 30, -100, 50)spatialfilter.Geometry = env
For Each o In lidsif o.Equals("states") ThenDim datatable as System.Data.DataTable datatable = qfunc. Query (Nothing, "states", spatialfilter)Dim ds as System.Data.Dataset = new System.Data.Dat aset()ds.Tables.Add(datatable)TreeViewPlus1.Bindtodataset(ds)End If
Next o…
44--1515
Programmer avec la Programmer avec la ““ GeocodeFunctionalityGeocodeFunctionality ””
•• Fournit les fonctions de gFournit les fonctions de gééocodageocodage
•• SS’’assurer que la fonctionnalitassurer que la fonctionnalitéé est supportest supportéée puis la cre puis la crééer er
•• PropriPropriééttééss–– MinCandidateScore, MinMatchScore, ShowAllCandidatesMinCandidateScore, MinMatchScore, ShowAllCandidates
•• MMééthodesthodes–– FindAddressCandidates, GeocodeAddress, ReverseGeocodeFindAddressCandidates, GeocodeAddress, ReverseGeocode
Dim gisresource as ESRI.ArcGIS.ADF.Web.DataSources. IGISResource = GeocodeResourceManager1.GetResource(0)
gisresource.Initialize()Dim supported as Boolean =
gisresource.SupportsFunctionality(GetType(IGeocodeF unctionality)
If(supported) Then
Dim igf as ESRI.ArcGIS.ADF.Web.DataSources.IGeocode Functionalityigf = CType(gisresource.CreateFunctionality(GetType (IGeocodeFunctionality), Nothing),IGeocodeFunctionality)
…' Pass in Generic List of address candidatesDim matchDatatable as DataTable = igf.FindAddressCa ndidates(avc, true, true)
End If
Dim gisresource as ESRI.ArcGIS.ADF.Web.DataSources. IGISResource = GeocodeResourceManager1.GetResource(0)
gisresource.Initialize()Dim supported as Boolean =
gisresource.SupportsFunctionality(GetType(IGeocodeF unctionality)
If(supported) Then
Dim igf as ESRI.ArcGIS.ADF.Web.DataSources.IGeocode Functionalityigf = CType(gisresource.CreateFunctionality(GetType (IGeocodeFunctionality), Nothing),IGeocodeFunctionality)
…' Pass in Generic List of address candidatesDim matchDatatable as DataTable = igf.FindAddressCandidates(avc, true, true)
End If
44--1616
Exercice 1Exercice 1 ereere partiepartie
•• CrCrééer une application web cartographiqueer une application web cartographique
•• Configurer un floating panel pour saisir une requConfigurer un floating panel pour saisir une requêêtete
•• Tester une Tester une ““fonctionnalitfonctionnalité”é” de type Query et afficher les de type Query et afficher les rréésultats dans un contrsultats dans un contrôôle Tree View Plusle Tree View Plus
22emeeme partiepartieProgrammer avec les Programmer avec les
““ graphics data sourcesgraphics data sources ””
55--1818
Les Les ““ graphics data sources graphics data sources ““ du Web ADFdu Web ADF
•• Sont dessinSont dessinéés au dessus des autres s au dessus des autres
couches dans la cartecouches dans la carte
•• UtilisUtiliséés pour:s pour:–– Mise en surbrillance dMise en surbrillance d’’entitentitéés (ss (séélection)lection)
–– EtiquetageEtiquetage
–– Affichage de zone tamponAffichage de zone tampon
–– Affichage de rAffichage de réésultat de gsultat de gééocodageocodage
–– Affichage de donnAffichage de donnéées dynamiques(GPS)es dynamiques(GPS)
–– ……
•• Leur rendu est independent du reste de la carte Leur rendu est independent du reste de la carte –– Ne nNe néécessite pas de redessiner la cartecessite pas de redessiner la carte
55--1919
Les Les ““ graphics data sources graphics data sources ““ du Web ADFdu Web ADF
•• Permet de travailler avec des objets telPermet de travailler avec des objets tel–– Geometry, symbols, renderers, etc.Geometry, symbols, renderers, etc.
•• Construit sur des types standards .NETConstruit sur des types standards .NET–– GraphicsDataset::System.Data.DataSetGraphicsDataset::System.Data.DataSet
–– GraphicsLayer::System.Data.DataTableGraphicsLayer::System.Data.DataTable
•• ÉÉlements Graphiques glements Graphiques géérréés par le Web tiers par le Web tier
Web server
Graphics Data Source
GraphicsDataset
GraphicsLayer
55--2020
Utiliser un Utiliser un ““ graphics data sourcegraphics data source ””
•• Se comporte comme nSe comporte comme n’’importe importe quelle map resourcequelle map resource
•• Ajoutez une Ajoutez une «« graphics data sourcegraphics data source »»àà votre map resource managervotre map resource manager–– Data source type = GraphicsLayerData source type = GraphicsLayer
–– Contenant pour les Contenant pour les ““graphics layersgraphics layers””
–– Penser Penser àà afficher les graphiques au dessus des autres couchesafficher les graphiques au dessus des autres couches
•• PossiblitPossiblitéé dd’’utiliser plusieurs couches graphiquesutiliser plusieurs couches graphiques–– Une pour afficher des zones tamponsUne pour afficher des zones tampons
–– Une pour afficher les entitUne pour afficher les entitéés ss séélectionnlectionnééeses
–– ……
55--2121
AperAper ççu du modu du mod èèlele
GraphicsDataset
*GraphicElement
SimpleMarkerSymbol
SimpleLineSymbol
SimpleFillSymbol
Many more
GraphicsLayer*
Geometry
SymbolColor
55--2222
Travailler avec les Travailler avec les ““ graphics layersgraphics layers ””
•• Principales Principales éétapestapes1.1.CrCrééer une nouvelle er une nouvelle ‘‘graphics layergraphics layer’’
2.2.Ajouter la au Ajouter la au ‘‘graphics datasetgraphics dataset’’
3.3.CrCrééer une nouvelle ger une nouvelle gééomoméétrietrie
4.4.Definir les symboles et si besoin le renduDefinir les symboles et si besoin le rendu
5.5.CrCrééer les er les ééllééments graphiquesments graphiques
6.6.Les ajouter Les ajouter àà la la ““graphics layergraphics layer””
7.7.Redessiner la Redessiner la ““graphics resourcegraphics resource””
55--2323
AccAcc ééder der àà la la ““ graphics resourcegraphics resource ””
•• Comme nComme n’’importe quel autre map resourceimporte quel autre map resource–– ÀÀ partir du MapResourceManager, du Map controlpartir du MapResourceManager, du Map control
•• On peut avoir plusieurs couches graphiquesOn peut avoir plusieurs couches graphiques–– Rechercher alors la ressource par son nomRechercher alors la ressource par son nom
' Get Graphics Resource from the Map ControlDim func_enum as IEnumerable = Map1.GetFunctionalit ies()Dim gResource as ESRI.ADF.Web.Datasources.Graphics. MapResourceDim gFunc as IGISFunctionality
For Each gFunc In func_enumIf TypeOf gFunc.Resource Is ESRI.ADF.Web.Datasource s.Graphics.MapResource Then
gResource = CType(gFunc.Resource, ESRI.ADF.Web.Data sources.Graphics.MapResource)Exit For
End IfNext gFunc
' Find the Resource by NameIf gResource.Name = "Selection" ThengResource = CType(gFunc.Resource,ESRI.ADF.Web.Datas ources.Graphics.MapResource)
' Get Graphics Resource from the Map ControlDim func_enum as IEnumerable = Map1.GetFunctionalit ies()Dim gResource as ESRI.ADF.Web.Datasources.Graphics. MapResourceDim gFunc as IGISFunctionality
For Each gFunc In func_enumIf TypeOf gFunc.Resource Is ESRI.ADF.Web.Datasource s.Graphics.MapResource Then
gResource = CType(gFunc.Resource, ESRI.ADF.Web.Data sources.Graphics.MapResource)Exit For
End IfNext gFunc
' Find the Resource by NameIf gResource.Name = "Selection" ThengResource = CType(gFunc.Resource,ESRI.ADF.Web.Datas ources.Graphics.MapResource)
Map control MapFunctionality
MapResource
55--2424
2 types de Graphics Layer2 types de Graphics Layer
•• CrCréées et ges et géérréées par le codees par le code–– ElementGraphicsLayerElementGraphicsLayer
•• Peut contenir diffPeut contenir difféérents types de grents types de gééomoméétrietrie
•• Stocke la gStocke la gééomoméétrie et le symbole ensemble sur le trie et le symbole ensemble sur le mmêême enregistrementme enregistrement
•• Rendu Simple Rendu Simple
•• UtilisUtiliséé pour afficher quelques entitpour afficher quelques entitéés (ex ss (ex séélection)lection)–– FeatureGraphicsLayerFeatureGraphicsLayer
•• Un seul type de gUn seul type de gééomoméétrietrie
•• Stocke la gStocke la gééomoméétrie et des attributstrie et des attributs
•• Supporte les requSupporte les requêêtes et les rendus complexe tes et les rendus complexe
•• UtilisUtiliséé pour afficher de nombreuses entitpour afficher de nombreuses entitéés (ex s (ex classification)classification)
55--2525
Creation des 2 types de Creation des 2 types de ‘‘graphics layersgraphics layers ’’
•• Exemple Exemple
' Create a new ElementGraphicsLayerDim dt as System.Data.DataTableFor Each dt In gResource.Graphics.Tablesif TypeOf dt is ESRI.ArcGIS.ADF.Web.Display.Graphic s.ElementGraphicsLayer Then
glayer = CType(dt,ESRI.ArcGIS.ADF.Web.Display.Graph ics.ElementGr aphicsLayer) if glayer is Nothing Then
glayer = New ESRI.ArcGIS.ADF.Web.Display.Graphics.E lementGraphicsLayer()gResource.Graphics.Tables.Add(glayer)
Next dt
' Create a new FeatureGraphicsLayerFor Each dt In gResource.Graphics.TablesIf TypeOf dt is ESRI.ArcGIS.ADF.Web.Display.Graphic s.FeatureGraphicsLayer ThenIf CType(dt, ESRI.ArcGIS.ADF.Web.Display.Graphics.F eatureGraphicsLayer).FeatureType = _
ESRI.ArcGIS.ADF.Web.Geometry.Point AndAlso dt.Table Name = " FeaturePoint " Thenglayer = CType(dt,ESRI.ArcGIS.ADF.Web.Display.Graph ics.FeatureGraphicsLayer) if glayer is Nothing Then
glayer = New ESRI.ArcGIS.ADF.Web.Display.Graphics.F eatureGraphicsLayer()gResource.Graphics.Tables.Add(glayer)
Next dt
' Create a new ElementGraphicsLayerDim dt as System.Data.DataTableFor Each dt In gResource.Graphics.Tablesif TypeOf dt is ESRI.ArcGIS.ADF.Web.Display.Graphic s.ElementGraphicsLayer Then
glayer = CType(dt,ESRI.ArcGIS.ADF.Web.Display.Graph ics.ElementGraphicsLayer) if glayer is Nothing Then
glayer = New ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGra phicsLayer()gResource.Graphics.Tables.Add(glayer)
Next dt
' Create a new FeatureGraphicsLayerFor Each dt In gResource.Graphics.TablesIf TypeOf dt is ESRI.ArcGIS.ADF.Web.Display.Graphic s.FeatureGraphicsLayer ThenIf CType(dt, ESRI.ArcGIS.ADF.Web.Display.Graphics.F eatureGraphicsLayer). FeatureType = _
ESRI.ArcGIS.ADF.Web.Geometry.Point AndAlso dt.TableName = " FeaturePoint " Thenglayer = CType(dt,ESRI.ArcGIS.ADF.Web.Display.Graph ics.FeatureGraphicsLayer) if glayer is Nothing Then
glayer = New ESRI.ArcGIS.ADF.Web.Display.Graphics.FeatureGra phicsLayer()gResource.Graphics.Tables.Add(glayer)
Next dt
55--2626
CrCrééer un er un éélléément graphiquement graphique
•• CrCrééer un nouveau er un nouveau ‘‘ graphic elementgraphic element’’
•• CrCrééer un nouveau er un nouveau –– SpSpéécifier un style de symbolecifier un style de symbole
•• CrCrééer une nouvelle couleur er une nouvelle couleur
•• Assigner la couleur au symboleAssigner la couleur au symbole
•• Assigner le symbole Assigner le symbole àà ll’é’élléémentment
•• Assigner la gAssigner la gééomoméétrie en unittrie en unitéés de la cartes de la carte
55--2727
Travailler avec une Travailler avec une ‘‘ElementGraphicsLayerElementGraphicsLayer ’’
•• CrCrééer un er un ““graphic elementgraphic element””
•• DDééfinissez un symbole pour lfinissez un symbole pour l’é’élléément , et ment , et ééventuellement ventuellement un autre pour le mun autre pour le mêême me éélléément sment séélectionnlectionnéé
•• Assigner les symboles au Assigner les symboles au ‘‘graphic elementgraphic element
•• Ajouter Ajouter àà ll’’ ElementGraphicsLayerElementGraphicsLayer
Dim sms as ESRI.ArcGIS.ADF.Web.Display.Symbol.Simpl eMarkerSymbolsms = New ESRI.ArcGIS.ADF.Web.Display.Symbol.Simple MarkerSymbol()sms.Color = System.Drawing.Color.Blacksms.Width = 40
Dim sms_selected as ESRI.ArcGIS.ADF.Web.Display.Sym bol.SimpleMarkerSymbol sms_selected = New ESRI.ArcGIS.ADF.Web.Display.Symb ol.SimpleMarkerSymbol()
sms_selected.Color = System.Drawing.Color.Yellowsms_selected.Width = 12sms_selected.Type = ESRI.ArcGIS.ADF.Web.Display.Sym bol.MarkerSymbolType.Star
Dim ge as ESRI.ArcGIS.ADF.Web.Display.Graphics.Grap hicElementge = New ESRI.ArcGIS.ADF.Web.Display.Graphics.Graph icElement(point, sms,
sms_selected)glayer.Add(ge)
Dim sms as ESRI.ArcGIS.ADF.Web.Display.Symbol.Simpl eMarkerSymbolsms = New ESRI.ArcGIS.ADF.Web.Display.Symbol. SimpleMarkerSymbol ()sms.Color = System.Drawing.Color.Blacksms.Width = 40
Dim sms_selected as ESRI.ArcGIS.ADF.Web.Display.Sym bol.SimpleMarkerSymbol sms_selected = New ESRI.ArcGIS.ADF.Web.Display.Symb ol. SimpleMarkerSymbol ()
sms_selected.Color = System.Drawing.Color.Yellowsms_selected.Width = 12sms_selected.Type = ESRI.ArcGIS.ADF.Web.Display.Sym bol.MarkerSymbolType.Star
Dim ge as ESRI.ArcGIS.ADF.Web.Display.Graphics.Grap hicElementge = New ESRI.ArcGIS.ADF.Web.Display.Graphics. GraphicElement(point, sms,
sms_selected)glayer.Add(ge)
55--2828
Rafraichir la Rafraichir la ““ graphics layergraphics layer ””
•• Rafraichissement de toute la carte:Rafraichissement de toute la carte:–– Map1.Refresh()Map1.Refresh()
•• Rafraichissement uniquement de la couche graphiqueRafraichissement uniquement de la couche graphique–– Map1.RefreshResource(Map1.RefreshResource(……))
–– La propriLa propriééttéé ImageBlendingModeImageBlendingMode du contrdu contrôôle Map doit le Map doit êêtre sur tre sur BrowserBrowser
Dim ge as ESRI.ArcGIS.ADF.Web.Display.Graphics.Grap hicElementge = New ESRI.ArcGIS.ADF.Web.Display.Graphics.Graph icElement(point, sms,
sms_selected) glayer.Add(ge)
' Check the ImageBlendingMode and refreshIf Map1.ImageBlendingMode = ImageBlendingMode.WebTi er Then
Map1.Refresh() Else If Map1.ImageBlendingMode = ImageBlendingMode. Browser Then
Map1.RefreshResource(gResource.Name) End If
Dim ge as ESRI.ArcGIS.ADF.Web.Display.Graphics.Grap hicElementge = New ESRI.ArcGIS.ADF.Web.Display.Graphics.Graph icElement(point, sms,
sms_selected) glayer.Add(ge)
' Check the ImageBlendingMode and refreshIf Map1.ImageBlendingMode = ImageBlendingMode.WebTi er Then
Map1.Refresh() Else If Map1.ImageBlendingMode = ImageBlendingMode.Browser Then
Map1. RefreshResource (gResource.Name) End If
55--2929
Exercice 2Exercice 2 emeeme partiepartie
•• Ajouter une couche graphique au map resource managerAjouter une couche graphique au map resource manager
•• CrCrééer une nouvelle ElementGraphicsLayerer une nouvelle ElementGraphicsLayer
•• Utiliser une Utiliser une ““QueryFunctionalityQueryFunctionality”” pour spour séélectionner des lectionner des entitentitééss
•• Afficher les entitAfficher les entitéés ss séélectionnlectionnéées dans la couche es dans la couche graphiquegraphique
33emeeme partiepartieProgrammer avec les Programmer avec les ““ ArcGIS ArcGIS
server Data sourcesserver Data sources ””
44--3131
Processus de dProcessus de d ééveloppement avec le Web adfveloppement avec le Web adf
Contrôles web
Implémentation en utilisantL’API génerique appliquable
à tous les types de Ressources (1e partie)
APIs spécifique à chaque type de Ressources (3e partie)
Complexité
66--3232
Programmer avec les API spProgrammer avec les API sp éécifiques cifiques àà chaque chaque data sourcedata source
•• Chaque datasource propose une ou plusieurs APIChaque datasource propose une ou plusieurs API–– ArcGIS ServerArcGIS Server
•• SOAP, ArcObjectsSOAP, ArcObjects–– ArcIMS ArcIMS –– AXLAXL
–– ArcWeb Services ArcWeb Services –– SOAP APISOAP API
•• QuQu’’est ce que cela signifie ?est ce que cela signifie ?–– Les diffLes difféérentes API utilisent diffrentes API utilisent difféérents protocoles de rents protocoles de
communicationcommunication
–– DiffDifféérentes farentes faççon de ron de réédiger son code en fonction de la data diger son code en fonction de la data source choisiesource choisie
66--3333
Les APIs ArcGIS ServerLes APIs ArcGIS Server
•• SOAPSOAP–– BasBaséé sur de lsur de l’’XMLXML–– Disponible pour les services et pour Disponible pour les services et pour
quelques server object extensionsquelques server object extensions–– ConConççu pour des interactions avec les u pour des interactions avec les
services sans modification de ceux ci services sans modification de ceux ci (Stateless)(Stateless)
•• ArcObjectsArcObjects–– Manipule de faManipule de faççon distante les on distante les
ArcObjects sur le server SIGArcObjects sur le server SIG–– Disponible uniquement avec une Disponible uniquement avec une
connexion ArcGIS Server en localconnexion ArcGIS Server en local–– ConConççu pour des interactions avec les u pour des interactions avec les
services avec sans modification services avec sans modification (StateLess et statefull)(StateLess et statefull)
Serveur SIGServeur SIG
Serveur Web Serveur Web
DonnéesDonnées
Clients Desktop
Navigateur web
Appareils mobiles
Internet
66--3434
LL’’API SOAP ArcGIS ServerAPI SOAP ArcGIS Server
•• Fonctionne aussi bien avec une ressource locale ou Fonctionne aussi bien avec une ressource locale ou internetinternet
•• Value objectsValue objects–– Geometry, symbology, query filters, spatial referenceGeometry, symbology, query filters, spatial reference……
•• Proxy objectsProxy objects–– Emule functionality provided by coarse Emule functionality provided by coarse -- grained server objects grained server objects
(MapServer,GeocodeServer)(MapServer,GeocodeServer)
66--3535
ArcGIS Server Internet: API SOAPArcGIS Server Internet: API SOAP
•• MapResourceInternetMapResourceInternet–– MapServerProxy, Access value objectsMapServerProxy, Access value objects
•• Interaction sans modification (stateless)Interaction sans modification (stateless)
•• A utiliser avec des services groupA utiliser avec des services groupéés (pooled)s (pooled)
Dim mapRes as ESRI.ArcGIS.ADF.Web.DataSources.ArcGI SServer.MapResourceInternetmapRes = gisFunc.Resource
Dim mapsProxy as ArcGISServer.MapServerProxy = mapR es.MapServerProxyDim mapInfo as ArcGISServer.MapServerInfo =
mapsProxy.GetServerInfo(mapsProxy.GetDefaultMapName ())
Dim mapDesc as ArcGISServer.MapDescription = mapInf o.DefaultMapDescription
Dim mLayerInfo as ArcGIServer.MapLayerInfo()mLayerInfo = mapRes.MapServerInfo.MapLayerInfos
Dim layerDescs as ArcGISServer.LayerDescription()layerDescs = mapDesc.LayerDescriptions
Dim mapRes as ESRI.ArcGIS.ADF.Web.DataSources.ArcGI SServer.MapResourceInternetmapRes = gisFunc.Resource
Dim mapsProxy as ArcGISServer.MapServerProxy = mapR es.MapServerProxyDim mapInfo as ArcGISServer.MapServerInfo =
mapsProxy.GetServerInfo(mapsProxy.GetDefaultMapName ())
Dim mapDesc as ArcGISServer.MapDescription = mapInf o.DefaultMapDescription
Dim mLayerInfo as ArcGIServer.MapLayerInfo()mLayerInfo = mapRes.MapServerInfo.MapLayerInfos
Dim layerDescs as ArcGISServer.LayerDescription()layerDescs = mapDesc.LayerDescriptions
66--3636
ArcGIS Server Local: API ArcObjectsArcGIS Server Local: API ArcObjects
•• AccAccèède aux ArcObjects de fade aux ArcObjects de faççon distanteon distante
•• MapServerLocalMapServerLocal–– MapServer > IMapServer (COM) > MapServer > IMapServer (COM) >
IMapServerObjects (COM)IMapServerObjects (COM)
•• Permet dPermet d’’accaccèèder der àà des fonctionnalitdes fonctionnalitéés SIG avancs SIG avancéées es
Dim mapFunc as IMapFunctionality = Map1.GetFunction ality(0)Dim ags_mr as ESRI.ArcGIS.ADF.Web.DataSources.ArcGI SServer.MapResourceLocalags_mr =
CType(mapFunc.Resource,ESRI.ArcGIS.ADF.Web.DataSour ces.ArcGISServer.MapResourceLocal)
' Access the ArcObjects COM ServerObject directlyDim mapServer as ESRI.ArcGIS.Carto. IMapServer = CT ype(ags_mr.MapServer,IMapServer)Dim mapServerObjs as ESRI.ArcGIS.Carto.IMapServerOb jectsmapServerObjs = CType(mapServer,IMapServerObjects)Dim map as ESRI.ArcGIS.Carto.IMap = mapServerObjs.M ap
' Now perform more ArcObjects operationsDim featClass as IFeatureClass = CType(map.Layers(0 )).FeatureClass, IFeatureClass)Dim newFeature as IFeature = featClass.CreateFeatu re()
Dim mapFunc as IMapFunctionality = Map1.GetFunction ality(0)Dim ags_mr as ESRI.ArcGIS.ADF.Web.DataSources.ArcGI SServer.MapResourceLocalags_mr =
CType( mapFunc.Resource, ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapRes ourceLocal)
' Access the ArcObjects COM ServerObject directlyDim mapServer as ESRI.ArcGIS.Carto. IMapServer = CT ype( ags_mr.MapServer,IMapServer )Dim mapServerObjs as ESRI.ArcGIS.Carto.IMapServerOb jectsmapServerObjs = CType( mapServer,IMapServerObjects)Dim map as ESRI.ArcGIS.Carto.IMap = mapServerObjs.M ap
' Now perform more ArcObjects operationsDim featClass as IFeatureClass = CType(map.Layers(0 )).FeatureClass, IFeatureClass)Dim newFeature as IFeature = featClass.CreateFeature()
66--3737
ArcGIS Server Local: bibliotheques ArcObjects ArcGIS Server Local: bibliotheques ArcObjects disponiblesdisponibles
•• PossibilitPossibilitééss–– AffichageAffichage
–– SymbologieSymbologie
–– AnalyseAnalyse
–– RequRequêêtete
–– AccAccèès aux donns aux donnééeses
–– EditionEdition
–– ExportExport
–– TopologieTopologie
–– RRééseauxseaux
•• AccAccèès s éégalement aux extensionsgalement aux extensions
66--3838
Programmer les ArcObjects de faProgrammer les ArcObjects de fa ççon distanteon distante
•• PossibilitPossibilitéé de crde crééer de nouveaux objets sur le serveurer de nouveaux objets sur le serveur
•• DD’’abord accabord accééder au ServerContext der au ServerContext –– MapServerLocal.ServerContextInfo. ServerContextMapServerLocal.ServerContextInfo. ServerContext
•• Ensuite crEnsuite crééer vos objet er vos objet àà partir du ServerContextpartir du ServerContext–– Surtout pas de NewSurtout pas de New
•• Enfin Il nEnfin Il n’’est nest néécessaire de relcessaire de relââcher le server contextcher le server context
Dim ags_mr as ESRI.ArcGIS.ADF.Web.DataSources.ArcGI SServer.MapResourceLocal ags_mr =
CType(qfunc.Resource,ESRI.ArcGIS.ADF.Web.DataSource s.ArcGISServer.MapResourceLocal)
' Create a new ArcObjects COM objectsDim context as ESRI.ArcGIS.Server.IServerContext = ags_mr.ServerContextInfo.ServerContextDim pnt as ESRI.ArcGIS.Geometry.IPoint = context.Cr eateObject("esriGeometry.Point")pnt.X = 60 pnt.Y = 100
Dim topo as ESRI.ArcGIS.Geometry.ITopologicalOperat or = CType(pnt, ITopologicalOperator)Dim geomBuf as ESRI.ArcGIS.Geometry.IGeomoetry = to po.Buffer(10)
Dim ags_mr as ESRI.ArcGIS.ADF.Web.DataSources.ArcGI SServer.MapResourceLocal ags_mr =
CType( qfunc.Resource, ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapRes ourceLocal)
' Create a new ArcObjects COM objectsDim context as ESRI.ArcGIS.Server.IServerContext = ags_mr.ServerContextInfo.ServerContextDim pnt as ESRI.ArcGIS.Geometry.IPoint = context. CreateObject("esriGeometry.Point")pnt.X = 60 pnt.Y = 100
Dim topo as ESRI.ArcGIS.Geometry.ITopologicalOperat or = CType(pnt, ITopologicalOperator)Dim geomBuf as ESRI.ArcGIS.Geometry.IGeomoetry = to po.Buffer(10)
66--3939
ArcGIS Server Local: Conversion de typesArcGIS Server Local: Conversion de types
•• NNéécessitcessitéé de convertir les objets de COM vers lde convertir les objets de COM vers l’’ADFADF
•• Des objets Converter sont disponibles pour effectuer Des objets Converter sont disponibles pour effectuer cette tachecette tache–– ESRI.ArcGIS.ADF.Web.ArcGISServer.ConverterESRI.ArcGIS.ADF.Web.ArcGISServer.Converter
•• COMObjectToValueObject renvoie un objet de lCOMObjectToValueObject renvoie un objet de l’’ADFADF
•• ValueObjectToCOMObject renvoie une rValueObjectToCOMObject renvoie une rééfféérence COM rence COM
Imports ESRI.ArcGIS.ADF.ArcGISServerDim valPt as New PointN()valPt.PutCoords(100,100)Dim ComPt as ESRI.ArcGIS.Geometry.IPointComPt = Converter.ValueObjectToComObject(valPt,svrC ontext)
Imports ESRI.ArcGIS.ADF.ArcGISServerDim valPt as New PointN()valPt.PutCoords(100,100)Dim ComPt as ESRI.ArcGIS.Geometry.IPointComPt = Converter.ValueObjectToComObject (valPt,svrContext)
Dim valueGraphics as GraphicElement()valueGraphics = Converter.ComObjectToValueObject(co mGraphics, svrContext)
Dim valueGraphics as GraphicElement()valueGraphics = Converter.ComObjectToValueObject (comGraphics, svrContext)
66--4040
ArcGIS Server Local: Conversion de typesArcGIS Server Local: Conversion de types
Dim com_pointcollection as ESRI.ArcGIS.Geometry.IPo intCollection = CType(com_polygon,ESRI.ArcGIS.Geometry.IPointCollec tion)
Dim new_adf_points as ESRI.ArcGIS.ADF.Web.Geometry. Point() = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Conver ter.FromIPointCollection(com_pointcollection)
Dim new_adf_pointcollection as ESRI.ArcGIS.ADF.Web. Geometry.PointCollection = New ESRI.ArcGIS.ADF.Web.Geometry.PointCollection()
' Add points to the point collectionFor i = 0 to new_adf_points.Length -1
new_adf_pointcollection.Add(new_adf_points(i))Next i
Dim new_adf_ring as New ESRI.ArcGIS.ADF.Web.Geometr y.Ring()
' Create ring from point collectionnew_adf_ring.Points = new_adf_pointcollection
Dim new_adf_ringcollection as ESRI.ArcGIS.ADF.Web.G eometry.RingCollection()new_adf_ringcollection.Add(new_adf_ring)
Dim new_adf_polygon as ESRI.ArcGIS.ADF.Web.Geometry .Polygon = New ESRI.ArcGIS.ADF.Web.Geometry.Polygon()
' Add ring to the polygonnew_adf_polygon.Rings = new_adf_ringcollection
Dim com_pointcollection as ESRI.ArcGIS.Geometry.IPo intCollection = CType(com_polygon,ESRI.ArcGIS.Geometry.IPointCollec tion)
Dim new_adf_points as ESRI.ArcGIS.ADF.Web.Geometry. Point() = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer. Converter.FromIPointCollection (com_pointcollection)
Dim new_adf_pointcollection as ESRI.ArcGIS.ADF.Web. Geometry.PointCollection = New ESRI.ArcGIS.ADF.Web.Geometry.PointCollection()
' Add points to the point collectionFor i = 0 to new_adf_points.Length -1
new_adf_pointcollection.Add(new_adf_points(i))Next i
Dim new_adf_ring as New ESRI.ArcGIS.ADF.Web.Geometr y.Ring()
' Create ring from point collectionnew_adf_ring.Points = new_adf_pointcollection
Dim new_adf_ringcollection as ESRI.ArcGIS.ADF.Web.G eometry.RingCollection()new_adf_ringcollection.Add(new_adf_ring)
Dim new_adf_polygon as ESRI.ArcGIS.ADF.Web.Geometry .Polygon = New ESRI.ArcGIS.ADF.Web.Geometry.Polygon()
' Add ring to the polygonnew_adf_polygon.Rings = new_adf_ringcollection
66--4141
ArcGIS Server Local: Utiliser la MapDescriptionArcGIS Server Local: Utiliser la MapDescription
•• Stocke des Stocke des «« value objectsvalue objects »» dans le dans le ““session statesession state””
•• PossibilitPossibilitéé de stocker des de stocker des ééllééments graphiques ou ments graphiques ou dd’’autres objetsautres objets
Dim screen_point as System.Drawing.Point = pea.Scre enPointDim mf as MapFunctionality = CType(mapctrl.GetFunct ionality(0),MapFunctionality)
Dim mapDescription as ESRI.ArcGIS.ADF.ArcGISServer. MapDescription = mf.MapDescriptionDim adf_map_point as ESRI.ArcGIS.ADF.Web.Geometry.P oint =
ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(scree n_point, mapctrl.Extent, mf.DisplaySettings.ImageDescriptor.Width, mf.Displa ySettings.ImageDescriptor.Height)
Dim ags_map_point as PointN = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Conver ter.FromAdfPoint(adf_map_point)
Dim marker as ESRI.ArcGIS.ADF.ArcGISServer.MarkerEl ement = New ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement()
marker.Symbol = smsmarker.Point = ags_map_point
Dim oldges as GraphicElement() = mapDescription.Cus tomGraphicsDim cnt as Integer = oldges.Length
Dim newges (cnt + 1) as GraphicElement() oldges.CopyTo(newges, 0)newges(cnt) = markermapDescription.CustomGraphics = newgesmapctrl.Refresh()
Dim screen_point as System.Drawing.Point = pea.Scre enPointDim mf as MapFunctionality = CType(mapctrl.GetFunct ionality(0),MapFunctionality)
Dim mapDescription as ESRI.ArcGIS.ADF.ArcGISServer. MapDescription = mf.MapDescriptionDim adf_map_point as ESRI.ArcGIS.ADF.Web.Geometry.P oint =
ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(scree n_point, mapctrl.Extent, mf.DisplaySettings.ImageDescriptor.Width, mf.Displa ySettings.ImageDescriptor.Height)
Dim ags_map_point as PointN = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Conver ter.FromAdfPoint(adf_map_point)
Dim marker as ESRI.ArcGIS.ADF.ArcGISServer.MarkerEl ement = New ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement()
marker.Symbol = smsmarker.Point = ags_map_point
Dim oldges as GraphicElement() = mapDescription.CustomGraphicsDim cnt as Integer = oldges.Length
Dim newges (cnt + 1) as GraphicElement() oldges.CopyTo(newges, 0)newges(cnt) = markermapDescription.CustomGraphics = newgesmapctrl.Refresh()
66--4242
Exercice 3Exercice 3 emeeme partiepartie
•• VVéérifier que la ressource est bien de type ArcGIS Server rifier que la ressource est bien de type ArcGIS Server locallocal
•• AccAccééder aux ArcObjects sous jacentder aux ArcObjects sous jacent
•• Convertir un objet COM en value ObjectConvertir un objet COM en value Object