Création d'une extension d'application de compléments Python
Une extension d'application peut être utilisée de différentes façons pour fournir des fonctionnalités supplémentaires pour ArcGIS Desktop.
- Une extension d'application est souvent utilisée pour regrouper un ensemble de fonctions associées qui effectuent des tâches similaires. Parmi les exemples d'extensions dans ArcMap, citons ArcGIS 3D Analyst extension, Business Analyst, etc.
- Les extensions d'application sont généralement chargées d'écouter et de réagir à divers événements signalés par l'application hôte. Par exemple, à chaque ajout ou suppression d'une couche, un événement est déclenché et l'extension réagit en enregistrant automatiquement la carte.
- Les extensions d'application permettent de coordonner les activités entre d'autres composants (tels que les boutons et les outils) au sein d'un complément conteneur. Par exemple, une extension peut ne pas activer un jeu d'outils sur une barre d'outils si un ensemble de couches spécifique n'est pas ajouté à la carte.
Cette rubrique vous guide tout au long du processus de création d'une extension d'application. Avant de commencer ce workflow, vérifiez que vous avez créé un projet de complément ArcMap et spécifié des paramètres de projet. Pour plus d'informations, reportez-vous à la rubrique Création d'un projet de complément. Ce workflow explique comment créer une extension pour ArcMap. Il n'existe toutefois aucune différence dans la création de menus pour les applications ArcGIS Desktop. Cette rubrique présente le processus de création d'une extension qui ajoute une couche de base à ArcMap à chaque ouverture d'un document ou à chaque création d'un document. La classe Python créée par l'assistant de complément Python sera ensuite examinée afin d'étudier les propriétés et méthodes qui fournissent des fonctionnalités à votre extension.
La création d'une extension d'application est un processus à deux étapes :
-
Création de l'extension d'application.
Après avoir saisi les paramètres du projet requis, cliquez sur l'onglet Contenu des compléments. Pour commencer, cliquez avec le bouton droit sur EXTENSIONS, puis cliquez sur Nouvelle extension.
Une extension possède un certain nombre de propriétés que vous pouvez saisir. La liste ci-dessous répertorie toutes les propriétés et en donne une explication. Ces propriétés sont enregistrées dans le fichier config.xml du projet.
Propriété Description Name (requise)
Représente le nom de l'extension d'application. Dans la capture d'écran ci-après, il s'agit du nom utilisé dans la boîte de dialogue Extensions pour les applications bureautiques.
Class Name (requise)
Classe Python représentant votre extension. La classe Python est l'endroit où vous écrivez la logique métier de l'extension. Cette classe est importante car elle est appelée lorsque l'extension d'application est utilisée dans une application bureautique. Utilisez la convention d'attribution de noms Python lorsque vous construisez la classe. Les classes Python utilisent la notation avec majuscules. Dans cet exemple nous allons créer une classe nommée AjouterCoucheBase.
ID (requise)
Il s'agit du nom unique permettant d'identifier l'extension. Vous pouvez créer plusieurs extensions pour un projet donné ; cet ID permet de distinguer les différentes extensions d'application. Dans l'idéal, vous devriez remplacer l'ID par défaut par une valeur plus explicite. Cet ID ne doit pas contenir d'espace. Vous pouvez utiliser des traits de soulignement pour lier les mots. N'utilisez pas de mots-clés Python. Consultez la documentation Python pour connaître les mots réservés. L'espace de nom du complément est ajouté à l'ID en tant que préfixe. L'espace de nom est stocké dans le fichier config.xml.
Description (facultative)
Décrit la finalité de l'extension d'application. Par exemple, l'extension 3D Analyst fournit des outils de modélisation de surface et de visualisation 3D. La description s'affiche dans la partie inférieure de la boîte de dialogue Extensions.
Loads Automatically (facultative)
Permet de charger l'extension d'application à l'ouverture d'une application bureautique. Par défaut, cette option est activée. Si cette case à cocher est activée, la propriété enabled du script Python est définie sur True.
Lorsque vous avez terminé de saisir les propriétés, vous pouvez cliquer sur le bouton Enregistrer dans le bas de l'Assistant. Cela a pour effet de créer tous les fichiers et dossiers nécessaires dans le dossier de travail.
- Modification du script Python.
L'étape suivante consiste à modifier le script Python et à mettre à jour la classe Python de manière à inclure les fonctionnalités à ajouter à une couche de base à chaque ouverture ou création d'une carte. La classe procède en écoutant et en réagissant aux événements openDocument et newDocument d'ArcMap. Pour ajouter les fonctionnalités à l'extension personnalisée, procédez de la manière suivante :
- Modifiez le script Python dans le dossier Install contenu dans le dossier de travail que vous avez créé grâce à l'Assistant.
Une classe portant le nom que vous avez saisi dans l'Assistant existe. Ne la renommez pas, car son nom est référencé dans le fichier config.xml. Pour obtenir des informations sur chaque fonction de la classe d'extension, reportez-vous à la rubrique Classe d'extension.
- Mettez à jour les fonctions d'événements newDocument et openDocument comme illustré ci-après.
Ce code fournit les fonctionnalités permettant d'ajouter une couche de base au bloc de données actif si elle n'existe pas déjà.
def newDocument(self): """ Adds a base layer if it is not already added to the active data frame of the map. """ # Provide a layer file and the layer name as it would appear in the Table of contents. base_layer = r'C:\GISData\module5\World_Street_Map.lyr' base_layer_name = 'World Street Map' mxd = arcpy.mapping.MapDocument('current') active_view = mxd.activeView df = arcpy.mapping.ListDataFrames(mxd, active_view)[0] if arcpy.mapping.ListLayers(mxd, base_layer_name) == []: arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer)) arcpy.RefreshTOC() else: return def openDocument(self): """ Adds a base layer if it is not already added to the active data frame of the map. """ base_layer = r'C:\GISData\module5\World_Street_Map.lyr' base_layer_name = 'World Street Map' mxd = arcpy.mapping.MapDocument('current') active_view = mxd.activeView df = arcpy.mapping.ListDataFrames(mxd, active_view)[0] if arcpy.mapping.ListLayers(mxd, base_layer_name) == []: arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer)) arcpy.RefreshTOC() else: return
- Supprimez toutes les fonctions non mises en œuvre à partir du script.
Vous devez supprimer toutes les fonctions non mises en œuvre à partir du script. Cela garantit qu'elles ne sont jamais appelées par l'application.
- Enregistrez le script.
- Modifiez le script Python dans le dossier Install contenu dans le dossier de travail que vous avez créé grâce à l'Assistant.
- Testez l'extension d'application.
Une fois que l'extension d'application est créée et que le code de script est ajouté, il est important de créer le fichier de complément et de le tester avant de le partager. La procédure correspondante est indiquée à la rubrique Test d'un complément.
- Déployez et partagez l'extension d'application.
La procédure de déploiement et de partage du complément est présentée à la rubrique Partage de compléments.