Disponible avec une licence Standard ou Advanced.
Vous pouvez ajouter le type, le sous-type et les fonctions ST_Geometry d'Esri à votre base de données Oracle à l'aide de l'outil de géotraitement Créer le type spatial ou d'un script Python qui appelle la fonction ArcPy CreateSpatialType.
L'outil et la fonction créent tous les deux un utilisateur nommé sde dans la base de données. L'utilisateur sde possède le type, les sous-types, les fonctions et les tables ST_Geometry.
Utilisez l'outil de géotraitement Créer le type spatial.
Les étapes suivantes expliquent comment exécuter l'outil de géotraitement Créer le type spatial pour installer le type ST_Geometry dans une base de données Oracle :
- Copiez la bibliothèque libst_shapelib (st_shapelib pour Windows) du répertoire DatabaseSupport dans l'emplacement d'installation du client ArcGIS et placez-la dans un emplacement sur le serveur Oracle.
Veillez à utiliser la bibliothèque appropriée au système d'exploitation de votre serveur Oracle.
Le répertoire dans lequel vous placez la bibliothèque sur le serveur doit être accessible depuis la machine sur laquelle vous allez exécuter l'outil Créer un type spatial ou le script. Si vous placez la bibliothèque sur une machine UNIX ou Linux, vérifiez que l'administrateur de base de données dispose d'un accès en écriture sur le répertoire et qu'il exécute les privilèges sur le fichier de bibliothèque.
- Lancez ArcCatalog ou ArcMap et ouvrez la fenêtre Catalogue.
- Créez une connexion à votre base de données Oracle. Connectez-vous en tant qu'administrateur de base de données système Oracle.
- Ouvrez l’outil Créer le type spatial.
Vous pouvez utiliser la fenêtre Rechercher pour trouver l'outil ou l'ouvrir à partir du jeu d'outils Espace de travail de la boîte à outils Gestion des données.
- Ajoutez la connexion à la base de données que vous avez créée à l'étape 3 dans la zone de texte Base de données en entrée.
- Entrez le mot de passe de l'utilisateur de base de données sde dans la zone de texte Mot de passe utilisateur SDE.
- Si vous souhaitez créer un espace de table par défaut pour l'utilisateur sde, entrez-le dans la zone de texte Nom de l'espace de table.
Un espace de table de 400 Mo est créé dans l'emplacement de stockage par défaut Oracle. Si vous souhaitez contrôler l'endroit où l'espace de table est créé ou sa taille, créez-le d'abord dans Oracle, puis spécifiez l'espace de table existant dans la zone de texte Nom de l'espace de table. L'outil définit cet espace de table prédéfini comme espace de table par défaut pour l'utilisateur sde.
- Accédez à ou saisissez le chemin d'accès à la bibliothèque de formes ST_Geometry. Il s'agit du chemin d'accès au répertoire sur le serveur Oracle où vous avez placé le fichier libst_shapelib ou st_shapelib, y compris le nom du fichier.
Par exemple, si vous avez placé le fichier libst_shapelib.so dans le répertoire libraries sur le serveur Linux boxy, vous pouvez saisir/boxy/libraries/libst_shapelib.so.
- Cliquez sur OK pour exécuter l'outil.
Le type, les sous-types et les fonctions ST_Geometry sont créés dans la structure de l'utilisateur sde et une entrée est créée dans Oracle pour la bibliothèque de formes.
Si vous comptez utiliser la fonction ST_Transform pour procéder à des transformations géographiques, vous devez copier le dossier pedata de votre répertoire d'installation ArcMap, le placer sur le serveur Oracle et définir une variable d'environnement PEDATAHOME sur le serveur qui pointe sur cet emplacement.
Utiliser la fonction CreateSpatialType
Vous exécutez un script Python qui appelle la fonction CreateSpatialType ArcPy sur n'importe quelle machine ArcMap, ArcGIS Pro ou ArcGIS for Server pour créer le type, le sous-type et les fonctions ST_Geometry d'Esri dans une base de données Oracle.
- Copiez la bibliothèque libst_shapelib (st_shapelib pour Windows) du répertoire DatabaseSupport dans l'emplacement d'installation du client ArcGIS et placez-la dans un emplacement sur le serveur Oracle.
Veillez à utiliser la bibliothèque appropriée au système d'exploitation de votre serveur Oracle.
Le répertoire dans lequel vous placez la bibliothèque sur le serveur doit être accessible depuis la machine sur laquelle vous allez exécuter l'outil Créer un type spatial ou le script. Si vous placez la bibliothèque sur une machine UNIX ou Linux, vérifiez que l'administrateur de base de données dispose d'un accès en écriture sur le répertoire et qu'il exécute les privilèges sur le fichier de bibliothèque.
-
Créez un fichier texte sur l'ordinateur du client ArcGIS, puis copiez-y le script suivant.
""" Name: create_spatial_type.py Description: Provide connection information to an Oracle or PostgreSQL database and create spatial type in the database. Type create_spatial_type.py -h or create_spatial_type.py --help for usage Author: Esri """ # Import system modules import arcpy, os, optparse, sys # Define usage and version parser = optparse.OptionParser(usage = "usage: %prog [Options]", version="%prog 1.0 for " + arcpy.GetInstallInfo()['Version'] ) #Define help and options parser.add_option ("--DBMS", dest="Database_type", type="choice", choices=['ORACLE', 'POSTGRESQL', ''], default="", help="Type of enterprise DBMS: ORACLE, or POSTGRESQL.") parser.add_option ("-i", dest="Instance", type="string", default="", help="DBMS instance name") parser.add_option ("--auth", dest="account_authentication", type ="choice", choices=['DATABASE_AUTH', 'OPERATING_SYSTEM_AUTH'], default='DATABASE_AUTH', help="Authentication type options (case-sensitive): DATABASE_AUTH, OPERATING_SYSTEM_AUTH. Default=DATABASE_AUTH") parser.add_option ("-U", dest="Dbms_admin", type="string", default="", help="DBMS administrator user") parser.add_option ("-P", dest="Dbms_admin_pwd", type="string", default="", help="DBMS administrator password") parser.add_option ("-D", dest="Database", type="string", default="none", help="Database name: Not required for Oracle") parser.add_option ("-p", dest="Password", type="string", default="", help="SDE user password") parser.add_option ("-t", dest="tablespace", type="string", default="", help="Default tablespace for SDE user") parser.add_option ("--path", dest="libpath", type="string", default="", help="path to the ST shape library including library file name.") # Check if value entered for option try: (options, args) = parser.parse_args() #Check if no system arguments (options) entered if len(sys.argv) == 1: print "%s: error: %s\n" % (sys.argv[0], "No command options given") parser.print_help() sys.exit(3) #Usage parameters for spatial database connection database_type = options.Database_type.upper() instance = options.Instance account_authentication = options.account_authentication.upper() password = options.Password tablespace = options.tablespace database = options.Database.lower() dbms_admin = options.Dbms_admin dbms_admin_pwd = options.Dbms_admin_pwd lib_path = options.libpath if( database_type ==""): print " \n%s: error: \n%s\n" % (sys.argv[0], "DBMS type (--DBMS) must be specified.") parser.print_help() sys.exit(3) # Local variables instance_temp = instance.replace("\\","_") instance_temp = instance_temp.replace("/","_") instance_temp = instance_temp.replace(":","_") Conn_File_NameT = instance_temp + "_" + database if os.environ.get("TEMP") == None: temp = "c:\\temp" else: temp = os.environ.get("TEMP") if os.environ.get("TMP") == None: temp = "/usr/tmp" else: temp = os.environ.get("TMP") Connection_File_Name = Conn_File_NameT + ".sde" Connection_File_Name_full_path = temp + os.sep + Conn_File_NameT + ".sde" # Check for the .sde file and delete it if present arcpy.env.overwriteOutput=True if os.path.exists(Connection_File_Name_full_path): os.remove(Connection_File_Name_full_path) print "\nCreating Database Connection File...\n" # Process: Create Database Connection File... # Usage: out_file_location, out_file_name, DBMS_TYPE, instance, database, account_authentication, username, password, save_username_password(must be true) arcpy.CreateDatabaseConnection_management(out_folder_path=temp, out_name=Connection_File_Name, database_platform=database_type, instance=instance, database=database, account_authentication=account_authentication, username=dbms_admin, password=dbms_admin_pwd, save_user_pass="TRUE") for i in range(arcpy.GetMessageCount()): if "000565" in arcpy.GetMessage(i): #Check if database connection was successful arcpy.AddReturnMessage(i) arcpy.AddMessage("\n+++++++++") arcpy.AddMessage("Exiting!!") arcpy.AddMessage("+++++++++\n") sys.exit(3) else: arcpy.AddReturnMessage(i) arcpy.AddMessage("+++++++++\n") # Process: Create spatial type... try: print "Create spatial type...\n" arcpy.CreateSpatialType_management(input_workspace=Connection_File_Name_full_path, sde_user_password=password, tablespace_name=tablespace, st_shape_library_path=lib_path) print "after spatial type...\n" for i in range(arcpy.GetMessageCount()): arcpy.AddReturnMessage(i) arcpy.AddMessage("+++++++++\n") except: for i in range(arcpy.GetMessageCount()): arcpy.AddReturnMessage(i) if os.path.exists(Connection_File_Name_full_path): os.remove(Connection_File_Name_full_path) #Check if no value entered for option except SystemExit as e: if e.code == 2: parser.usage = "" print "\n" parser.print_help() parser.exit(2)
- Enregistrez le fichier avec l'extension .py.
- Exécutez le script en indiquant les options et informations propres à votre site.
Par exemple, ce script crée le type ST_Geometry dans l'instance Oracle oserve/orcl et la bibliothèque ST_Geometry se trouve dans le répertoire /ora/shape du serveur Oracle (oserve).
create_spatial_type.py --DBMS ORACLE -i oserve/orcl --auth DATABASE_AUTH -U sys -P M3tsy$ -p 3$@b0eg -t sde --path /net/oserve/ora/shape/libst_shapelib.so
Le type, les sous-types et les fonctions ST_Geometry sont créés dans la structure de l'utilisateur sde et une entrée est créée dans Oracle pour la bibliothèque de formes.
Si vous comptez utiliser la fonction ST_Transform pour procéder à des transformations géographiques avec SQL, vous devez copier le dossier pedata de votre répertoire d’installation ArcMap ou ArcGIS for Server, le placer sur le serveur Oracle et définir une variable d’environnement PEDATAHOME sur le serveur qui pointe vers cet emplacement.