Didacticiel : impression/exportation de base de cartes Web haute qualité avec arcpy.mapping

Complexité : Intermédiaires Exigences en matière de données : ArcGIS.com

Dans ce didacticiel, vous allez créer une application Web dans laquelle l'utilisateur final pourra accéder à une zone d'intérêt et appuyer sur un bouton Imprimer. La sortie sera un document PDF imprimable contenant une sortie vectorielle de haute qualité pour les couches de service.

Par défaut, l'exportation à partir d'une application Web à l'aide du service prêt à l'emploi Outils d'impression et de ses widgets d'impression client dans les API Web d'ArcGIS génère une image des couches du service, dont la résolution peut être trop faible (par exemple, 96 ppp) pour imprimer de grands formats ou des sorties cartographiques de haute qualité. Cela est particulièrement vrai si les couches de votre service utilisent un cache de carte tuilé. Dans ce cas, la sortie des couches du service sera une image en cache tuilée.

L'illustration ci-dessous présente deux fichiers PDF en sortie d'exemple. L'image de gauche montre ce à quoi peut ressembler un cache tuilé de couches de service si vous exportez vers un PDF grand format en appliquant un zoom avant. Remarquez le flou des entités et le texte pixélisé. Cela peut être satisfaisant à une échelle plus petite ou en cache. Cela peut également convenir au format lettre ou tabloïd, mais pas plus grand.

L'image de droite présente des données vectorielles. L'image est beaucoup plus lisse et convient mieux pour une sortie cartographique de haute qualité. Ce didacticiel vous indique comment personnaliser la solution d'impression prête à l'emploi afin de générer un document PDF imprimable contenant une sortie vectorielle de haute qualité pour les couches de service.

Exemple de sortie faible résolution et haute résolution

Dans l'application Web que vous allez créer, vous allez générer des équivalents vectoriels du service de fond de carte Topographie mondiale. Un sous-ensemble vectoriel du service de fond de carte Topographie mondiale est disponible sur le centre de ressources ArcGIS.

RemarqueRemarque :

Pour générer un document en sortie contenant des données vectorielles locales de haute qualité au lieu d'une image en cache tuilée de couches de service, vous devez accéder aux données vectorielles.

L'illustration ci-dessous montre l'application Web que vous allez créer.

application Web

Le code sous-jacent au bouton Imprimer dans l'application Web utilise la tâche d'impression des API Web d'ArcGIS, qui sont disponibles avec ArcGIS 10.1 for Server. Vous allez créer un script Python qui sera publié en tant que service de géotraitement que la tâche d'impression utilisera. Le script Python utilise la fonction ConvertWebMapToMapDocument du module arcpy.mapping qui insérera l'état complet de la carte Web dans le document ArcMap de modèle intermédiaire. Le modèle contient des équivalents vectoriels de toutes les couches possibles dans le service de carte. Le module arcpy.mapping offre par ailleurs des fonctionnalités visant à supprimer les couches de service, laissant les données vectorielles locales qui ont été placées dans le document ArcMap de modèle et à exporter au format PDF.

Après avoir cliqué sur le bouton Imprimer, la sortie sera un document PDF imprimable contenant des données vectorielles locales de haute qualité au lieu d'une image en cache tuilée de couches de service.

Pour suivre ce didacticiel, vous devez connaître le module arcpy.mapping, les API Web d'ArcGIS, ArcGIS for Desktop et ArcGIS 10.1 for Server. Un code d'exemple pour toutes les API Web d'ArcGIS est inclus dans ce didacticiel. Vous devez également connaître les rubriques d'aide sur l'impression dans l'application Web :

Impression dans les applications WebImpression avancée de cartes Web

Récupérer les données vectorielles dans le centre de ressources ArcGIS

Dans la bibliothèque de modèles de cartes du centre de ressources ArcGIS, vous allez télécharger un fichier zip contenant les données vectorielles qui seront utilisées dans le modèle de document ArcMap intermédiaire.

Avant cela, vous devez vous assurer qu'une structure de dossiers est en place, dans laquelle ArcGIS for Server peut voir le document ArcMap de modèle et les données qui seront utilisés dans l'application Web. Ce didacticiel part du principe que vous avez déjà inscrit un dossier auprès d'ArcGIS for Server. Pour plus d'informations sur l'inscription des données auprès d'ArcGIS for Server, reportez-vous aux rubriques :

AstuceAstuce:

Lorsque vous utilisez des documents ArcMap de modèle dans la fonction ConvertWebMapToMapDocument, il est recommandé d'utiliser les données inscrites auprès d'ArcGIS for Server. Si vous choisissez de ne pas utiliser les données inscrites, les documents ArcMap de modèle et les données seront empaquetés et copiés sur le serveur. Au cours de l'empaquetage, les données peuvent être déplacées et redirigées avec les chemins relatifs vers une structure de dossiers que ConvertWebMapToMapDocument ne peut pas résoudre. Pour plus d'informations, reportez-vous à la rubrique d'aide ConvertWebMapToMapDocument.

Etapes :
  1. Ouvrez une nouvelle session ArcMap vierge.
  2. Dans la fenêtre Catalogue, accédez à votre dossier inscrit. Créez un dossier dans le dossier inscrit nommé BasicTutorial.
  3. Accédez à la bibliothèque de modèles de cartes dans le centre de ressources ArcGIS. Sélectionnez le modèle Topographic Map Template - Medium Scales.
  4. Téléchargez le fichier zip Topographic Map Template - Medium Scales sur votre ordinateur en cliquant sur le bouton Télécharger.
  5. Extrayez le contenu du fichier zip dans le dossier BasicTutorial de votre dossier inscrit.
  6. Votre dossier inscrit doit présenter un aspect semblable à l'illustration ci-dessous.
    Dossier inscrit
    RemarqueRemarque :

    Dans la capture d'écran ci-dessus, le dossier inscrit s'appelle MyDataStore. Vous pouvez changer le nom du dossier inscrit comme il vous plaît.

Préparer le document pour l'utiliser comme modèle dans l'application Web

Les données que vous avez téléchargées depuis le centre de ressources ArcGIS contenaient deux documents ArcMap. MediumScales_anno.mxd sera utilisé dans l'application Web. La carte et les données sont destinées à être utilisées à des échelles moyennes, par exemple d'environ 1:1 500 000 à 1:18 000. Vous allez supprimer la plage d'échelle maximale du document ArcMap afin que les utilisateurs de l'application Web puissent zoomer au-delà de l'échelle maximale et toujours générer une sortie imprimée.

Etapes :
  1. Ouvrez MediumScales_anno.mxd dans ArcMap.
  2. Cliquez avec le bouton droit sur le groupe de couches Niveau 14 ~1:36 000 dans la table des matières et sélectionnez Propriétés.
  3. Cliquez sur l'onglet Général.
  4. Définissez la liste déroulante Ne pas afficher la couche si le zoom dépasse sur <Aucun>.
  5. Cliquez sur OK dans la boîte de dialogue Propriétés du groupe de couches.
  6. Enregistrez la carte.

Le document ArcMap est maintenant prêt à être utilisé dans l'application Web.

Créer le script Python

Vous allez créer un script Python qui sera utilisé en tant que service d'impression de géotraitement personnalisé.

Le script Python dans le service d'impression de géotraitement personnalisé exécute la fonction ConvertWebMapToMapDocument qui convertit une carte Web (au format JSON) que vous prévoyez d'imprimer ou d'exporter vers un document ArcMap. Le script supprime ensuite les couches de service du document ArcMap en sortie, en laissant les couches vectorielles qui correspondent à la couche de service dans la carte Web au format JSON. La chaîne JSON de carte Web contient également l'étendue de la carte dans l'application Web. Enfin, le script exporte le document ArcMap au format PDF.

Etapes :
  1. Ouvrez un IDE Python, tel qu'IDLE (livré avec ArcGIS for Desktop).
  2. Copiez et collez le code suivant dans un nouveau script Python.
  3. import arcpy
    import os
    import uuid
    
    # Input WebMap json
    Web_Map_as_JSON = arcpy.GetParameterAsText(0)
    
    # The template location in the server data store
    templateMxd = '//zoid/MyDataStore/BasicTutorial/Maps and GDBs/MediumScales_Anno.mxd'
       
    # Convert the WebMap to a map document
    result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
    mxd = result.mapDocument
    
    # Reference the data frame that contains the webmap
    # Note: ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap"
    df = arcpy.mapping.ListDataFrames(mxd, 'Webmap')[0]
    
    # Remove the service layer
    # This will just leave the vector layers from the template
    for lyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
        if lyr.isServiceLayer:
            arcpy.mapping.RemoveLayer(df, lyr)
            
    # Use the uuid module to generate a GUID as part of the output name
    # This will ensure a unique output name
    output = 'WebMap_{}.pdf'.format(str(uuid.uuid1()))
    Output_File = os.path.join(arcpy.env.scratchFolder, output)
    
    # Export the WebMap
    arcpy.mapping.ExportToPDF(mxd, Output_File) 
    
    # Set the output parameter to be the output file of the server job
    arcpy.SetParameterAsText(1, Output_File)
    
    # Clean up - delete the map document reference
    filePath = mxd.filePath
    del mxd, result
    os.remove(filePath)
    
  4. Changez la variable templateMxd pour qu'elle corresponde au chemin UNC du dossier dans votre dossier inscrit qui contient les documents ArcMap de modèle.
  5. RemarqueRemarque :

    Si ArcGIS for Server, ArcGIS for Desktop et le dossier inscrit se trouvent tous sur la même machine, les chemins UNC du dossier inscrit ne sont pas nécessaires. Vous pouvez en revanche utiliser des chemins absolus.

  6. Enregistrez le script Python. Nommez le script BasicTutorial.py. Enregistrez-le dans un dossier nommé WebApp au sein du dossier inscrit.

Créer un outil Python

Vous allez créer un outil de géotraitement personnalisé qui exécute le script BasicTutorial.py.

Etapes :
  1. Dans la fenêtre Catalogue d'ArcMap, accédez au dossier WebApp dans le répertoire de votre dossier inscrit.
  2. Cliquez avec le bouton droit sur le dossier WebApp et cliquez sur Nouveau > Boîte à outils. Nommez la boîte à outils BasicTutorial.
  3. Cliquez avec le bouton droit sur la boîte à outils BasicTutorial, puis cliquez sur Description d'élément.
  4. Dans la boîte de dialogue Description d'élément, renseignez les éléments Balises et Résumé avec le texte de votre choix. Vous pouvez également indiquer d'autres descriptions d'éléments.
  5. Cliquez sur Enregistrer et quittez la boîte de dialogue Description d'élément.
  6. Dans la fenêtre Catalogue, cliquez avec le bouton droit sur la boîte à outils BasicTutorial et sélectionnez Ajouter > Script.
  7. Dans la boîte de dialogue Ajouter un script, entrez BasicTutorial à la fois dans Nom et dans Etiquette.
  8. Cliquez sur Suivant.
  9. Pour Fichier script, accédez au dossier WebApp dans le dossier inscrit et sélectionnez BasicTutorial.py.
  10. Cliquez sur Suivant.
  11. Vous devez ajouter deux paramètres à l'outil de script.
    1. Le premier paramètre sera Web_Map_as_JSON. Ce paramètre utilise une représentation JSON de l'état de la carte à exporter telle qu'elle apparaît dans l'application Web. Les propriétés doivent correspondre à la capture d'écran suivante :
      Propriétés du paramètre Web_Map_as_JSON
    2. Le paramètre suivant est Output_File, c'est-à-dire le fichier en sortie qui sera créé. Les propriétés doivent correspondre à la capture d'écran suivante :
      Propriétés du paramètre Output_File

      AttentionAttention :

      Les noms des paramètres Web_Map_as_JSON et Output_File doivent être orthographiés exactement comme illustré, afin qu'ils correspondent à la signature d'outil de la tâche d'impression dans les API Web d'ArcGIS.

    3. Cliquez sur Terminer dans la boîte de dialogue Ajouter un script.
  12. Cliquez avec le bouton droit sur l'outil de script BasicTutorial, puis cliquez sur Description d'élément.
  13. Dans la boîte de dialogue Description d'élément, renseignez les éléments Balises et Résumé avec le texte de votre choix. Renseignez également le champ Explication de boîte de dialogue pour les quatre paramètres dans la section Syntaxe de la boîte de dialogue Description d'élément avec le texte de votre choix. Vous pouvez également indiquer d'autres descriptions d'éléments.

Exécuter l'outil

L'outil doit être exécuté avec succès pour créer un résultat dans la fenêtre Résultats pouvant être publié dans ArcGIS for Server.

Etapes :
  1. Dans la fenêtre Catalogue, cliquez avec le bouton droit sur l'outil de script BasicTutorial et sélectionnez Ouvrir.
  2. Ne définissez pas le paramètre Web_Map_as_JSON en entrée.
    AstuceAstuce:

    Pour la publication, vous pouvez laisser le paramètre en entrée Web_Map_as_JSON vierge, car les API Web d'ArcGIS fourniront la chaîne JSON de la carte Web dans l'application Web. Vous pouvez laisser le paramètre en entrée Web_Map_as_JSON vierge si le script Python a été écrit de manière ne pas échouer avec une entrée vierge. Par exemple, si le script ne recherche pas les couches des cartes Web en fonction de leur nom.

  3. Cliquez sur OK. Attendez la fin de l'exécution de l'outil.

Le résultat est maintenant prêt à être publié en tant que service de géotraitement.

Publication du résultat

Si vous ne connaissez pas la publication des services de géotraitement, reportez-vous aux rubriques :

Etapes :
  1. Ouvrez la fenêtre Résultats.
  2. Développez Session en cours.
  3. Cliquez avec le bouton droit sur le résultat BasicTutorial et sélectionnez Partager en tant que > Service de géotraitement.
  4. Sélectionnez Publier un service.
  5. Cliquez sur Suivant.
  6. Choisissez une connexion d'éditeur ou d'administrateur sur votre serveur ArcGIS 10.1 for Server.
  7. Cliquez sur Suivant.
  8. Cliquez sur Suivant.
  9. Cliquez sur Continuer.
  10. En haut à droite de la boîte de dialogue Editeur de services, cliquez sur Publier.

Le service de géotraitement est maintenant prêt à être utilisé dans les API Web d'ArcGIS.

Choisissez quelle API Web d'ArcGIS vous voulez utiliser pour créer l'application Web.

Les API Web d'ArcGIS offrent des fonctionnalités SIG similaires : il vous appartient de sélectionner votre plate-forme de développement préférée. Ce didacticiel n'explique pas en détail comment créer des applications Web avec chaque API. Consultez la documentation de l'API pour plus de détails. Pour en savoir plus, consultez les rubriques suivantes :

Chaque API Web d'ArcGIS possède une tâche d'impression. La tâche d'impression comporte une propriété URL qui référencera le service de géotraitement personnalisé que vous avez créé plus tôt. Consultez la documentation sur l'API Web d'ArcGIS pour plus d'informations sur la tâche d'impression.

Dans les sections ci-dessous, utilisez les exemples de code pour l'API Web d'ArcGIS que vous avez utilisée pour créer votre application Web.

Exemple de code ArcGIS API for JavaScript

Si vous utilisez ArcGIS API for JavaScript, utilisez l'exemple de code suivant pour créer votre application Web.

Dans l'exemple de code ArcGIS API for JavaScript ci-dessous, changez l'URL du service de géotraitement que vous avez créé au cours d'une étape précédente pour utiliser le nom de votre serveur. Il est référencé dans cette ligne :

var printUrl = "http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial";

Code pour BasicTutorial.html :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
  	<title>Webmap Printing</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
    <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.0/js/dojo/dijit/themes/claro/claro.css">  
    <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0"></script>
    <script type="text/javascript" language="Javascript">
      dojo.require("esri.map");
      dojo.require("esri.tasks.PrintTask");
      var printTask, params;
      
      function init() {
		     // limit scales in webmap to the usable scales of the template map document      	
      	var lods = [ {"level" : 11, "resolution" : 76.4370282850732, "scale" : 288895.277144},
           {"level" : 12, "resolution" : 38.2185141425366, "scale" : 144447.638572},
           {"level" : 13, "resolution" : 19.1092570712683, "scale" : 72223.819286},
           {"level" : 14, "resolution" : 9.55462853563415, "scale" : 36111.909643},
           {"level" : 15, "resolution" : 4.77731426794937, "scale" : 18055.954822}];
      	
        // set the extent to the Portland area - which matches the extent of the template map document
        var startExtent = new esri.geometry.Extent({"xmin":-13679000,"ymin":5680000,
        											"xmax":-13635000,"ymax":5740000,
        											"spatialReference":{"wkid":102100}});
        											
        var map = new esri.Map("map", {extent:startExtent, lods:lods});
        
        // add tiled map service to webmap
        var tiledUrl = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer";
        var tiledLayer = new esri.layers.ArcGISTiledMapServiceLayer(tiledUrl);
        map.addLayer(tiledLayer);
		      var printUrl = "http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial";
		      printTask = new esri.tasks.PrintTask(printUrl, {async: true});
		      params = new esri.tasks.PrintParameters();
        params.map = map;  
      }
      
      function print(){
      	var ptemplate = new esri.tasks.PrintTemplate();
      	// use the extent of the webmap in the output PDF
      	ptemplate.preserveScale = false;
      	params.template = ptemplate;
        printTask.execute(params, printComplete);
      }
      
      function printComplete(result){
        window.open(result.url);
      }

      dojo.addOnLoad(init);

    </script>
  </head>
  <body class="claro">
  	 <input type="button" id="print" value="Print" onclick="print();"/>
    <div id="map" style="width:1000px; height:600px; border:1px solid #000;"></div>
  </body>
</html>

Exemple de code ArcGIS for Flex

Si vous utilisez ArcGIS API for Flex, utilisez l'exemple de code suivant pour créer votre application Web.

Dans l'exemple de code ArcGIS API for Flex ci-dessous, changez l'URL du service de géotraitement que vous avez créé au cours d'une étape précédente pour utiliser le nom de votre serveur. Il est référencé dans ces lignes :

url="http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial"/>

Code pour BasicTutorial.mxml :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:esri="http://www.esri.com/2008/ags"
			   initialize="printTask.getServiceInfo()"
			   pageTitle="High-quality printing">
	
	<fx:Script>
		<![CDATA[
			import com.esri.ags.events.PrintEvent;
			import com.esri.ags.tasks.supportClasses.DataFile;
			import com.esri.ags.tasks.supportClasses.JobInfo;
			import com.esri.ags.tasks.supportClasses.ParameterValue;
			
			import mx.controls.Alert;
			
			public var preserveScale:Boolean = true;
			
			private function printBtn_clickHandler(event:MouseEvent):void
			{
				if (printTask.getServiceInfoLastResult.isServiceAsynchronous)
				{
					printTask.submitJob(printParameters);
				}
				else
				{
					printTask.execute(printParameters);
				}
			}
			
			private function printTask_jobCompleteHandler(event:PrintEvent):void
			{
				var jobInfo:JobInfo = event.jobInfo;
				if (jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED)
				{
					printTask.getResultData(jobInfo.jobId);
				}
				else
				{
					Alert.show(jobInfo.jobStatus);
				}
			}
			
			private function printTask_getResultDataCompleteHandler(event:PrintEvent):void
			{
				var dataFile:DataFile = event.parameterValue.value as DataFile;
				navigateToURL(new URLRequest(dataFile.url));
			}
			
			private function printTask_executeCompleteHandler(event:PrintEvent):void
			{
				var paramValue:ParameterValue = event.executeResult.results[0];
				var dataFile:DataFile = paramValue.value as DataFile;
				navigateToURL(new URLRequest(dataFile.url));
			}
		]]>
	</fx:Script>
	
	<fx:Declarations>
		<esri:PrintTask id="printTask"
						executeComplete="printTask_executeCompleteHandler(event)"
						fault="Alert.show(event.fault.faultString)"
						getResultDataComplete="printTask_getResultDataCompleteHandler(event)"
						jobComplete="printTask_jobCompleteHandler(event)"
						showBusyCursor="false"
						url="http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial"/>
		<esri:PrintParameters id="printParameters"
							  preserveScale="false"
							  map="{map}">
		</esri:PrintParameters>
		
		<esri:Extent id="initialExtent"
					 xmin="-13679000" ymin="5680000" xmax="-13635000" ymax="5740000">
			<esri:SpatialReference wkid="102100"/>
		</esri:Extent>
		
	</fx:Declarations>
	
	<s:controlBarLayout>
		<s:HorizontalLayout gap="10"
							paddingBottom="7"
							paddingLeft="10"
							paddingRight="10"
							paddingTop="7"
							verticalAlign="baseline"/>
	</s:controlBarLayout>
	<s:controlBarContent>
		<s:Button id="printBtn"
				  click="printBtn_clickHandler(event)"
				  enabled="{printTask.getServiceInfoLastResult != null}"
				  label="Print"/>
	</s:controlBarContent>

	<esri:Map id="map" extent="{initialExtent}">
		<esri:lods>
			<esri:LOD resolution="76.4370282850732" scale="288895.277144"/>
			<esri:LOD resolution="38.2185141425366" scale="144447.638572"/>
			<esri:LOD resolution="19.1092570712683" scale="72223.819286"/>
			<esri:LOD resolution="9.55462853563415" scale="36111.909643"/>
			<esri:LOD resolution="4.77731426794937" scale="18055.954822"/>
		</esri:lods>

		<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>
	</esri:Map>
	
</s:Application>

Exemple de code ArcGIS for Silverlight

Si vous utilisez ArcGIS API for Silverlight, utilisez l'exemple de code suivant pour créer votre application Web.

Code XAML :

<UserControl x:Class="Basic_Tutorial.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:esri="http://schemas.esri.com/arcgis/client/2009">

    <Grid x:Name="LayoutRoot" Background="White">

        <esri:Map x:Name="MyMap" Extent="-13679000,5680000,-13635000,5740000">
            <esri:Map.Layers>
                <esri:ArcGISTiledMapServiceLayer ID="MyTiledService" 
                    Url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>
            </esri:Map.Layers>
        </esri:Map>

        <StackPanel Orientation="Vertical" Margin="15" HorizontalAlignment="Left" VerticalAlignment="Top" >
            <Border x:Name="PrintPanel" CornerRadius="10" BorderBrush="Gray" BorderThickness="1" Background="White" HorizontalAlignment="Left" 
                    VerticalAlignment="Top" Margin="15" Padding="10">
                <Border.Effect>
                    <DropShadowEffect/>
                </Border.Effect>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Button x:Name="Print" Content="Print" Click="ExportMap_Click" 
                            Grid.Row="1" Grid.Column="0" Margin="2"/>
                </Grid>
            </Border>
        </StackPanel>
    </Grid>
</UserControl>

Dans l'exemple de code ArcGIS API for Silverlight ci-dessous, changez l'URL du service de géotraitement que vous avez créé au cours d'une étape précédente pour utiliser le nom de votre serveur. Il est référencé dans cette ligne :

printTask = new PrintTask("http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial");

Code sous-jacent en C# :

using System;
using System.Windows;
using System.Windows.Controls;
using ESRI.ArcGIS.Client.Printing;
using ESRI.ArcGIS.Client.Tasks;


namespace Basic_Tutorial
{
    public partial class MainPage : UserControl
    {
        PrintTask printTask;
        public MainPage()
        {
            InitializeComponent();
            printTask = new PrintTask("http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial");
            printTask.DisableClientCaching = true;
            printTask.JobCompleted += new EventHandler<PrintJobEventArgs>(printTask_JobCompleted);
            printTask.GetServiceInfoCompleted += new EventHandler<ServiceInfoEventArgs>(printTask_GetServiceInfoCompleted);
            printTask.GetServiceInfoAsync();
        }

        void printTask_GetServiceInfoCompleted(object sender, ServiceInfoEventArgs e)
        {
            PrintPanel.DataContext = e.ServiceInfo;
        }


        void printTask_JobCompleted(object sender, PrintJobEventArgs e)
        {
            if (e.Error == null)
            {
                if (e.PrintResult != null)
                    System.Windows.Browser.HtmlPage.Window.Navigate(e.PrintResult.Url, "_blank");
            }
        }

        private void ExportMap_Click(object sender, RoutedEventArgs e)
        {

            if (printTask == null || printTask.IsBusy) return;

            PrintParameters printParameters = new PrintParameters(MyMap)
            {

            };
            printTask.SubmitJobAsync(printParameters);
        }
    }
}

Exécuter l'application Web

Exécutez l'application Web que vous avez créée au cours de l'étape précédente. Consultez la documentation sur l'API Web d'ArcGIS pour savoir comment exécuter les applications Web, le cas échéant. Vous trouverez ci-dessous une capture d'application de l'application de l'API Web ArcGIS for Silverlight.

Exemple d'application Web

Effectuez un zoom avant sur une zone d'intérêt, puis cliquez sur le bouton Imprimer. Le fichier PDF en sortie va automatiquement apparaître au bout d'un moment. La sortie sera un document PDF imprimable contenant des données vectorielles locales de haute qualité qui ont été placées dans les modèles de mise en page au lieu d'images en cache tuilées de couches de service. Ceci permet d'obtenir une sortie cartographique de meilleure qualité. Vous trouverez un exemple de sortie ci-dessous :

Exemple de sortie PDF

Ceci conclut le didacticiel sur l'impression/exportation de base de cartes Web haute qualité. Pour des scénarios plus avancés, consultez le didacticiel sur l'impression/exportation avancée de cartes Web haute qualité.

Thèmes connexes

9/12/2013