salle de classe -sig 2007 programmer avec le web adf d ’arcgis

42
SALLE DE CLASSE SALLE DE CLASSE - - SIG 2007 SIG 2007 Programmer avec Programmer avec le Web ADF d le Web ADF d ArcGIS Server ArcGIS Server

Upload: others

Post on 03-Feb-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

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--88

Sources de donnSources de donn éées et ressourceses et ressources

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