Remarques sur le géotraitement des données ArcSDE
Fichier de connexion à une base de données (.sde)
Les outils de géotraitement nécessitent un fichier de connexion à une base de données (.sde) lors de l'accès aux données depuis des géodatabases ArcSDE Enterprise ou depuis une base de données.
Création dynamique de fichiers de connexion ArcSDE
Les fichiers de connexion ArcSDE peuvent être créés le cas échéant à l'aide de l'outil Créer un fichier de connexion à ArcSDE. Cet outil permet d'automatiser la création de fichiers de connexion ArcSDE en cas de besoin et évite ainsi de préparer les fichiers de connexion avant d'exécuter les outils ayant accès aux données ArcSDE. Vous pouvez obtenir les propriétés de la connexion à partir de n'importe quelle source, par exemple un fichier texte, un flux XML codé ou une base de données sécurisée, et les transmettre à l'outil Créer un fichier de connexion à ArcSDE pour créer le fichier de connexion ArcSDE requis. Lorsque vous avez terminé avec le fichier de connexion, vous pouvez le supprimer immédiatement à l'aide de l'outil Supprimer ou la commande de suppression appropriée du système d'exploitation.
L'historique du géotraitement et les résultats stockent tous les paramètres passés aux outils. Comme les informations de connexion sont entrées dans les paramètres de l'outil Créer un fichier de connexion à ArcSDE, elles sont également stockées sauf si la consignation dans l'historique est activée. A chaque fois qu'un outil est exécuté, qu'il s'agisse d'un outil système, de modèle ou de script, un enregistrement de son exécution est consigné dans un fichier journal d'historique. Les informations contenues dans le fichier journal d'historique sont essentiellement les mêmes que celles se trouvant dans la fenêtre Résultats. Pour ne pas stocker les informations de connexion (mot de passe ou toute autre information sécurisée dans un paramètre) dans le fichier journal d'historique ou dans la fenêtre Résultats lorsque l'outil Créer un fichier de connexion à ArcSDE est exécuté, désactivez la journalisation dans l'historique. Reportez-vous à la rubrique Fichiers d'historique pour plus de détails.
Performances des outils de géotraitement pour l'utilisation des données ArcSDE
Le géotraitement n'a aucun impact sur les performances réelles du serveur ArcSDE, la géodatabase ou la base de données. L'optimisation appropriée de la base de données, ainsi que la conception et l'implémentation de l'application à l'aide de la base de données (ArcSDE et la géodatabase dans ce cas) permettent principalement d'obtenir les meilleures performances lors de l'utilisation des données ArcSDE. Toutefois, certains éléments doivent être pris en compte lors de l'utilisation des données ArcSDE dans les outils de géotraitement pour éviter certains problèmes du workflow susceptibles de nuire aux performances des outils et des workflow.
Les outils de géotraitement servent principalement aux opérations de création/chargement des données
La plupart des outils de géotraitement permettent de créer des données. Pour l'essentiel, les résultats du géotraitement doivent être affichés comme opération de chargement de données dans le cadre de l'envoi des résultats de l'outil vers ArcSDE. Il est important de planifier toutes les opérations de chargement de données de manière à ne pas nuire aux performances de la base de données. La plupart des administrateurs de bases de données (et utilisateurs) ne seront pas très contents lorsque le résultat de l'outil Agréger contiendra 50 millions d'enregistrements et que le chargement des données par l'outil dans la base ArcSDE s'effectuera le matin aux heures de pointe sur le réseau et la base de données. Les opérations de chargement de données volumineuses peuvent affecter chaque utilisateur de la base de données (et dans certains cela peut représenter des centaines ou des milliers d'utilisateurs), mais aussi chaque utilisateur du réseau vers lequel les données sont envoyées. Si les entrées de l'opération de géotraitement sont volumineuses ou sont combinées (comme pour l'utilisation des outils de superposition) pour créer une énorme classe d'entités en sortie, il est préférable de planifier la création de cette sortie à un moment de la journée où la charge du réseau et de la base de données sera le moins affectée.
Dans la plupart des cas, il peut être judicieux d'utiliser les outils pour créer la sortie dans une géodatabase fichier. Une fois que la sortie a été validée dans la géodatabase fichier, vous pouvez transférer les données dans ArcSDE (en utilisant, par exemple, Copier des entités ou Classe d'entités vers classe d'entités) à un moment de la journée où l'impact sur les performances du réseau et de la base de données sera moindre.
Cas où vous ne devez pas stocker les données dans ArcSDE
Les données intermédiaires sont créées lorsque vous exécutez des modèles et des scripts qui se déroulent en plusieurs étapes pour obtenir le résultat final. Si les données se trouvent dans ArcSDE et que vous envoyez également toutes les données intermédiaires vers ArcSDE, vous pouvez saturer le réseau et augmenter inutilement la charge du serveur de base de données. Il est recommandé d'envoyer toutes les données intermédiaires dans une géodatabase fichier ou, dans le cas de classes d'entités simples, à une classe d'entités momentanée.
Si le résultat de l'analyse est temporaire ou ne sera pas partagée par un grand nombre, stockez-le ailleurs que dans ArcSDE. Reportez-vous à la rubrique Types de géodatabases pour consulter une comparaison des différents types de géodatabases et vous aider à choisir le type qui répond le mieux à vos besoins.
Les opérations de mise à jour dans une classe d'entités ArcSDE existante peuvent être fastidieuses lorsque le nombre de mises à jour est très important. Les outils suivants :
permettent tous de mettre à jour une classe d'entités existante. Si vous mettez à jour un très grand nombre de lignes dans des classes d'entités ArcSDE, vous pouvez essayer d'utiliser l'environnement de géotraitement Auto_Commit pour augmenter le nombre des entités traitées avant qu'une validation ne soit appelée dans la base de données. Toutefois, effectuer des opérations de mise à jour de très grande envergure dans une version de la géodatabase fichier des données, puis charger les données dans ArcSDE peut se révéler plus rapide que réaliser directement les mises à jour dans la classe d'entités ArcSDE et peut être préférable pour votre workflow.
Remarques sur l'index spatial des outils de géotraitement qui modifient les données existantes
Les index spatiaux sont utilisés dans ArcGIS pour rechercher rapidement les entités des classes. Chaque fois qu'une entité est insérée ou supprimée, l'index spatial doit être mis à jour. Lorsqu'une sortie est créée, le géotraitement diffère la création de l'index spatial des nouvelles classes d'entités jusqu'à la fin du chargement de toutes les données. Lorsque vous modifiez des classes d'entités existantes, deux options sont disponibles pour le moment de la mise à jour de l'index spatial. Vous pouvez laisser l'index spatial tel quel et le mettre à jour après chaque modification, ou vous pouvez retirer l'index spatial avant d'effectuer les modifications et le mettre à jour une fois après que toutes les modifications ont été effectuées.
Index spatiaux et outils de géotraitement
Certains outils de géotraitement peuvent modifier les données existantes :
Lorsque vous utilisez des outils de géotraitement qui modifient les données existantes, le paramètre d'environnement, MaintainSpatialIndex, permet de contrôler d'une certaine manière le mode de traitement de l'index spatial ArcSDE au cours des opérations d'insertion, de suppression et de mise à jour (appelées également modifications). Deux options peuvent fournir une amélioration des performances des opérations de mise à jour des données existantes. Vous pouvez activer le paramètre MaintainSpatialIndex pour laisser l'index spatial tel quel et laisser à ArcSDE l'initiative de la mise à jour automatique au cours des mises à jour. Ou alors, vous pouvez le désactiver, auquel cas les outils de géotraitement qui mettront à jour les données existantes ignoreront l'index spatial ArcSDE avant d'effectuer les mises à jour. L'index spatial sera lu une fois que toutes les modifications auront été effectuées.index spatiaux lors de l'utilisation des curseurs de mise à jour et d'insertion
Les curseurs de mise à jour et d'insertion fonctionnent également avec les données existantes Lorsque vous utilisez les curseurs de mise à jour et d'insertion pour modifier les données, vous pouvez utiliser l'outil Supprimer un index spatial pour retirer l'index spatial ArcSDE avant les opérations de mise à jour qui impliquent un volume important d'enregistrements. Une fois que les mises à jour ont été effectuées, vous pouvez utiliser l'outil Ajouter un index spatial pour recréer l'index spatial. Cela peut améliorer dans l'ensemble les performances de l'opération de mise à jour dans le cas d'un volume important d'enregistrements. Reportez-vous à la rubrique Vue d'ensemble des index spatiaux de la géodatabase pour en savoir plus sur l'utilisation des index spatiaux.
Conseils sur les données ArcSDE lors de la création de scripts
Avec les systèmes de gestion de base de données relationnelles (SGBDR) tels qu'Oracle, SQL Server, IBM DB2 et PostgreSQL, les noms d'objet doivent être complets, surtout si les données auxquelles vous avez accès sont en dehors de votre structure. L'utilisation de noms complets permet de désigner clairement le nom d'un objet de manière à utiliser l'objet approprié (classe d'entités, table relationnelle, table, etc.). Chaque base de données présente une légère différence pour désigner un nom d'objet. Consultez la documentation de la base de données pour plus de détails.
Utilisez le nom complet de la table ou de la classe d'entités
Lorsqu'une table ou une classe d'entités qui n'est pas désignée de manière complète est transmise à un outil, le géotraitement attribue automatiquement un nom à partir du nom de l'utilisateur actuellement connecté dans l'espace de travail qui a été créé à l'aide du fichier de connexion ArcSDE. Si un script doit accéder aux données d'un utilisateur autre que l'utilisateur connecté, il doit désigner de manière complète le nom de la table ou la classe d'entités pour éviter que l'outil de géotraitement ne le désigne à partir du nom de l'utilisateur connecté. Sinon, une erreur peut se produire ou l'outil peut utiliser les données incorrectes.
Affiche l'utilisation d'une classe d'entités avec un nom complet qui appartient à un utilisateur autre que l'utilisateur connecté. L'utilisateur de la base de données des boîtes à outils doit posséder certains droits d'accès aux données de l'utilisateur de la carte.
import arcpy
# Create an ArcSDE connection file that connects as the toolbox database user
arcpy.CreateArcSDEConnectionFile_management(r'C:\temp',r'toolboxuser.sde','gpserver','5151','',"DATABASE_AUTH",'toolbox','toolbox')
# Perform a union operation using data owned by the connected user, toolbox,
# and another feature class owned by the map database user.
arcpy.Union_analysis(r'C:\temp\toolboxuser.sde\toolbox.states;C:\temp\toolboxuser.sde\map.counties',r'C:\temp\toolboxuser.sde\statesCountiesUnion')
Chaque base de données est légèrement différente quand il s'agit de désigner le nom complet d'un objet. Pour plus de détails, reportez-vous à la documentation SQL de votre SGBD.
Utiliser des noms de champ complets
Les champs sont considérés comme des objets dans la base de données, et lorsque vous accédez aux objets qui n'appartiennent pas à l'utilisateur connecté, vous devez accéder aux champs en utilisant leur nom complet. Chaque fois que vous créez une instruction SQL complexe, l'utilisation de noms de champ complets garantira le fonctionnement de l'instruction SQL. Encore une fois, chaque base de données est légèrement différente quad il s'agit de désigner les objets avec un nom complet. Pour plus de détails, reportez-vous à la documentation SQL de votre SGBD.
Géotraitement avec des données versionnées
Le versionnement de géodatabase est disponible uniquement dans les géodatabases Enterprise. ArcSDE est la géodatabase Enterprise. Avec les outils de géotraitement, vous pouvez accéder aux données versionnées de deux façons différentes selon que les données ArcSDE sont transmises comme chemin d'accès de jeu de données ou nom de couche.
Avec les classes d'entités, le géotraitement utilise toujours les informations de connexion dans le fichier de connexion qui fait partie du chemin d'accès à la classe d'entités ArcSDE pour ouvrir la classe d'entités. Cela signifie que pour accéder aux données vous êtes lié par la version définie dans les propriétés de connexion du fichier .sde.
Si vous ajoutez les données à ArcMap, elles sont représentées comme couches d'entités ou vues tabulaires. Lorsqu'un outil de géotraitement identifie une entrée comme couche d'entités ou vue tabulaire, il ne fait plus référence au fichier de connexion ArcSDE pour rouvrir la classe d'entités à l'aide des propriétés de la connexion du fichier de connexion. En fait, il accède à la classe d'entités à l'aide de l'espace de travail déjà ouvert de la couche. Si toutes les modifications, notamment la version vers laquelle pointe l'espace de travail, ont été apportés à l'espace de travail, l'outil les prend en compte. Si vous utilisez l'outil Changer de version dans ArcMap sur les données ArcSDE dans la table des matières ArcMap, l'outil de géotraitement utilise la version des donnes auxquelles l'espace de travail est connecté après que l'outil Modifier la version est exécuté.
Utilisation des classes d'entités versionnées avec les outils de géotraitement
Lorsque vous accédez directement aux classes d'entités dans les outils de géotraitement en utilisant un chemin d'accès qui indique le fichier de connexion ArcSDE (.sde), vous gérez la version à laquelle les classes d'entités sont connectées comme suit :
- Vous référencez les classes d'entités à l'aide d'un chemin d'accès à un fichier de connexion ArcSDE.
- Vous créez une version à l'aide de l'outil Créer une version. Lorsque vous créez une version de cette façon, la nouvelle version sera un enfant de la version répertoriée dans le fichier de connexion transmise comme argument à l'outil.
- Vous créez un fichier de connexion à l'aide de l'outil Créer un fichier de connexion à ArcSDE en vous assurant que vous utilisez la nouvelle version créée dans le paramètre Version de l'outil.
- Vous utilisez ce nouveau fichier de connexion pour accéder à la classe d'entités pendant que vous êtes connecté à la nouvelle version.
- Pour utiliser de nouveau la classe d'entités pendant que vous êtes connecté à la version parent, utilisez le fichier de connexion d'origine.
Lorsque vous nommez les fichiers de connexion ArcSDE, il peut être utile de nommer le fichier .sde de manière à identifier clairement le travail effectué à l'aide de chaque fichier de connexion créé :
- Utilisation des paramètres de connexion : gpserver5151toolboxVersion1.sde (nom du serveur + port + nom d'utilisateur + version)
- Utilisation du nom de l'analyste SIG qui utilisera le fichier .sde : Ken.sde
- Attribution d'un nom au fichier .sde en reprenant le nom du projet pour lequel il sera utilisé : ServiceEauxMAJJuin2010.sde
Quelle que soit la convention d'appellation utilisée, assurez-vous que le nom du fichier est clair et respecte les règles de sécurité de votre organisation.
Script Python affichant le workflow pour l'utilisation de classes d'entités versionnées.
# VersionedFeatureClassExample.py
# Description: Simple example showing how to access versioned feature classes in geoprocessing tools.
# import system modules
import arcpy
import sys, os
# Set variables
sdeConnFilePath = sys.path[0] + os.sep + "sdeconnectionfiles"
analysisVersion = "TOOLBOX.proposedStreets2k9"
defaultVersionConnection = r'gpserver5151toolboxDEFAULT.sde'
proposedStreetsVersion = r'gpserver5151toolboxproposedStreets2k9.sde'
# Perform analysis on the Default version to determine current number of streams within 100 meters of streets.
inputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'TOOLBOX.Redlands\TOOLBOX.streams'
selectFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'TOOLBOX.Redlands\TOOLBOX.street'
outputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'StreamsNearStreets'
arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management(inputFC,"WITHIN_A_DISTANCE",selectFC,"100 Meters","NEW_SELECTION",'#'), outputFC,'','','')
print "Streams within 100 Meters of current streets: " + str(arcpy.GetCount_management(outputFC))
# Create an ArcSDE connection file for connecting to the proposedStreets2k9 version
folderName = sdeConnFilePath
fileName = proposedStreetsVersion
serverName = "gpserver"
serviceName = "5151"
databaseName = ""
authType = "DATABASE_AUTH"
username = "toolbox"
password = "toolbox"
saveUserInfo = "SAVE_USERNAME"
versionName = analysisVersion
saveVersionInfo = "SAVE_VERSION"
arcpy.CreateArcSDEConnectionFile_management (folderName, fileName, serverName, serviceName, databaseName, authType, username, password, saveUserInfo, versionName, saveVersionInfo)
# Perform the same analysis on the proposedStreets2k9 version to see the effect of the proposed changes.
inputFC = sdeConnFilePath + os.sep + proposedStreetsVersion + os.sep + r'TOOLBOX.Redlands\TOOLBOX.streams'
selectFC = sdeConnFilePath + os.sep + proposedStreetsVersion + os.sep + r'TOOLBOX.Redlands\TOOLBOX.street'
outputFC = sdeConnFilePath + os.sep + defaultVersionConnection + os.sep + r'NewStreamsNearStreets'
arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management(inputFC,"WITHIN_A_DISTANCE",selectFC,"100 Meters","NEW_SELECTION",'#'), outputFC,'','','')
print "Streams projected to be within 100 Meters of streets after proposed street additions:" + str(arcpy.GetCount_management(outputFC))
Accès aux classes d'entités versionnées à l'aide de couches d'entités/vues tabulaires avec les outils de géotraitement
Le workflow à utiliser pour accéder aux classes d'entités versionnées à l'aide des couches d'entités ou des vues tabulaires se présente comme suit :
- Créez une couche avec les outils Générer une couche ou Générer une vue tabulaire pour toutes les entrées. Assurez-vous d'utiliser le fichier de connexion ArcSDE dont le parent ou la version de démarrage sont spécifiés dans la propriété Version du fichier de connexion.
- Utilisez ces couches dans tous les outils.
- Si vous souhaitez changer de version, utilisez l'outil Changer de version.
- Continuez à utiliser les couches d'entités dans les outils. Le géotraitement respecte la version référencée par l'espace de travail ouvert après que l'outil Changer de version est exécuté.
- Utilisez l'outil Changer de version en fonction des exigences du projet pour changer de version afin de réaliser les analyses.
Script Python affichant le workflow pour l'utilisation de couches d'entités versionnées.
# VersionedFeatureLayersExample.py
# Description: Simple example showing how to access versioned feature classes using layers.
# import system modules
import arcpy
from arcpy import env
import sys, os
# Set Environments
env.workspace = sys.path[0] + os.sep + "gpserver5151toolboxDEFAULT.sde"
# Create the layers
arcpy.MakeFeatureLayer_management(r'TOOLBOX.Redlands\TOOLBOX.street', 'RedlandsStreets')
arcpy.MakeFeatureLayer_management(r'TOOLBOX.Redlands\TOOLBOX.streams', 'RedlandsStreams')
# Perform analysis on the Default version to determine current number of streams within 100 meters of streets.
arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management("RedlandsStreams","WITHIN_A_DISTANCE","RedlandsStreets","100 Meters","NEW_SELECTION",'#'), 'StreamsNearStreets','','','')
print "Streams within 100 Meters of current streets: " + str(arcpy.GetCount_management("StreamsNearStreets"))
# Change to the development version
arcpy.ChangeVersion_management('RedlandsStreets','TRANSACTIONAL', 'TOOLBOX.proposedStreets2k9','')
# Perform the same analysis on the development version to see the effect of the proposed changes.
arcpy.MakeFeatureLayer_management(arcpy.SelectLayerByLocation_management("RedlandsStreams","WITHIN_A_DISTANCE","RedlandsStreets","100 Meters","NEW_SELECTION",'#'), 'NewStreamsNearStreets','','','')
print "Streams projected to be within 100 Meters of streets after proposed street additions: " + str(arcpy.GetCount_management("NewStreamsNearStreets"))