Exemple de service de géotraitement : données à la demande
Dossier |
DataOnDemand |
Objet |
Dans le cadre d'un polygone numérisé par l'utilisateur, ce service découpe des jeux de données dans une géodatabase fichier en générant des fichiers de formes, puis crée un fichier .zip qui est envoyé par e-mail à l'utilisateur. |
Services |
PortlandDataMapService (service de carte) et DataOnDemand (service de géotraitement) |
Tâches de géotraitement |
ClipZipAndEmail |
Entrées |
La zone d'intérêt (jeu d'entités surfaciques) et une adresse e-mail pour l'envoi des données |
Sorties |
aoizip.zip, un fichier compressé contenant les données |
Données |
L'exemple utilise un petit jeu de données de la ville de Portland dans l'Oregon. |
Extensions |
Aucune |
A remarquer |
Ce service est hébergé sur ESRI sampleserver (voir remarque ci-dessous). Il s'agit d'un service de découpage et d'expédition qui est décrit dans l'exemple de découpage et d'expédition. |
Dossier correspondant
C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand contient les outils et les données.
A propos de cet exemple
Ce service DataOnDemand est un autre exemple de service de découpage et d'expédition. Avant d'étudier ce service, vous devez commencer par lire l'exemple de découpage et d'expédition, car les entités et les fonctions du service DataOnDemand sont comparées à ce service (voir tableau ci-dessous). Si vous créez votre propre service de découpage et d'expédition, vous pouvez y associer les entités et les fonctions de ces deux services.
Exemple de découpage et d'expédition |
L'exemple suivant |
---|---|
L'utilisateur peut sélectionner les couches à télécharger. |
Un jeu de données fixe est téléchargé. |
Il est possible de spécifier la référence spatiale des données en sortie. |
La référence spatiale ne peut pas être spécifiée. Elle est définie en fonction de la référence spatiale des jeux de données en cours de découpage. |
Le format en sortie peut être spécifié. |
Seuls les fichiers de formes sont en sortie. |
Utilise des modèles, des scripts et des couches d'outils. Le service est publié à l'aide d'une carte. |
Aucun modèle n'est utilisé, seulement des scripts. La boîte à outils est publiée, plutôt qu'une carte. |
Les couches de la carte sont découpées. |
Les jeux de données sont découpés. (Comme aucune carte source ne contient de couches, ces dernières couches ne peuvent pas être utilisées. Seuls les jeux de données peuvent l'être.) |
La zone d'intérêt (le polygone de découpage que l'utilisateur numérise) n'est pas téléchargée. |
La zone d'intérêt est téléchargée. |
La sortie ne peut pas être envoyée par e-mail. |
La sortie peut être envoyée par e-mail en spécifiant un nom de serveur de messagerie dans le script ClipZipAndEmail (le fichier source est DataOnDemand/Scripts/zipandemail.py). |
Ce service inclut d'autres entités :
- Un document ArcMap qui affiche les données téléchargées est inclus dans le fichier .zip.
- Les scripts Python font état de nombreuses techniques utiles, parmi lesquelles :
- Recherche de données par rapport à l'emplacement du script
- Ajout d'une boîte à outils et utilisation de ses outils
- Importation d'un script et routines d'appel dans le script importé
- Utilisation de fonctions système pour copier la carte
Hébergement de ce service par ESRI
Ce service est hébergé sur les serveurs ESRI ArcGIS Online. Vous pouvez tester ce service comme suit :
- Ajoutez http://sampleserver1.arcgisonline.com/arcgis/services en tant que serveur ArcGIS.
- Ajoutez http://sampleserver2.arcgisonline.com/arcgis/services en tant que serveur ArcGIS.
- Dans ArcMap, ajoutez le service de carte Portland/Portland_ESRI_LandBase_AGO à partir de sampleserver1.
- Ajoutez le service de géotraitement Portland/ESRI_CadastralData_Portland à ArcToolbox à partir de sampleserver2.
- Développez la boîte à outils ESRI_CadastralData_Portland et exécutez la tâche ClipAndShip.
Les scripts et les outils du dossier DataOnDemand sont les mêmes que ceux utilisés par la tâche ClipAndShip dans le service de géotraitement ESRI_CadastralData_Portland. Les données présentées dans cet exemple, qui se trouvent dans DataOnDemand/ToolData/Portland.gdb, représentent un petit sous-ensemble des données utilisées dans le service de carte Portland_Portland_ESRI_LandBase_AGO.
Les cartes et les services de géotraitement qui se trouvent dans sampleserver1 et sampleserver2 sont susceptibles d'être modifiés dans le futur. La disponibilité permanente des services décrits ci-dessus n'est pas garantie.
Données
Les données, qui concernent une petite zone de la ville de Portland dans l'Oregon, se trouvent dans C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand\ToolData\Portland.gdb.
L'outil ClipZipAndEmail utilise une variable de jeu d'entités, qui nécessite une structure pour définir les types et les champs d'entités. Cette structure se trouve dans C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand\ToolData\Templates.gdb.
Le dossier ToolData contient également Mapofzip.mxd, qui est inclus dans le fichier ZIP et affiche les données découpées et expédiées.
Scripts
La boîte à outils DataOnDemandTools contient un outil de script, ClipZipAndEmail. La source de cet outil de script est DataOnDemand/Scripts/zipandemail.py.
Avant d'utiliser l'outil ClipZipAndEmail, vous devez modifier le code et indiquer le nom de votre serveur de messagerie. (Vous pouvez soit modifier la source Python directement dans une application comme PythonWin, soit cliquer avec le bouton droit sur l'outil de script et cliquer sur Modifier.) Votre administrateur système doit être en mesure de vous indiquer le nom de ce serveur de messagerie.
Certaines propriétés et entités importantes de ce script sont décrites ci-dessous.
- Comme le paramètre Zone à zipper est un jeu d'entités, il nécessite une structure. La structure est définie dans l'onglet Paramètres des propriétés de l'outil.
- La boîte à outils UtilityTools est ajoutée au script ClipZipAndEmail et c'est l'outil de script de compression de cette boîte à outils qui est utilisé. Reportez-vous à la routine zipData() du script.
- Dans le script ClipZipAndEmail, la routine emailZip() importe la routine send_mail() détectée dans le script sendemail.py (qui se trouve dans DataOnDemand/Scripts), comme suit :
from sendemail import send_mail
Publication
PortlandDataMapService est publié en tant que service de carte.
La boîte à outils DataOnDemandTools est publiée en tant que service de géotraitement.
Configuration du service
Pour configurer ce service pour vos données, vous devez modifier l'outil de script ClipZipAndEmail. La source de cet outil de script est DataOnDemand/Scripts/zipandemail.py. Vous pouvez soit modifier la source Python directement dans une application comme PythonWin, soit cliquer avec le bouton droit sur l'outil de script et cliquer sur Modifier.
Vous devrez changer l'emplacement des données et la liste des jeux de données. Dans la routine principale :
if __name__ == '__main__':
Recherchez la définition de la variable dataloc et modifiez-la :
global dataloc; dataloc = os.path.dirname(sys.path[0]) + g + "tooldata" + g + "portland.gdb" + g
L'emplacement des données est relatif à celui du script.
Pour en savoir plus sur l'utilisation de l'emplacement du script pour créer des chemins d'accès
Ensuite, modifiez la liste des jeux de données à découper, qui se trouve dans cet extrait de code :
ds = ["Streets" + g + "streets", \ "Water" + g + "StreamRoute", "Water" + g + "floodplain", "Water" + g + "riv_fill", \ "Transit" + g + "railroad", \ "Census" + g + "blockgrp", \ "Develop" + g + "Buildings", \ "Land" + g + "zoning", "Land" + g + "Parks", \ "Places" + g + "schools", "Places" + g + "hospital"]
Pour terminer, vous devez indiquer le nom du serveur de messagerie dans le script sendemail.py. Le code à modifier se trouve presque en haut du script :
def send_mail(send_from, send_to, subject, text, f=""): assert type(send_to)==list # Provide the name of your email server below # server = "ouremailserver.somewhere.com"