Disponible avec une licence Standard ou Advanced.
Pour utiliser le type ST_Geometry afin de stocker des données spatiales dans votre base de données PostgreSQL, utilisez l’outil de géotraitement Créer le type spatial ou un script Python qui appelle la fonction ArcPy CreateSpatialType afin d’insérer le type, ses sous-types et les fonctions dans la base de données.
L’outil Créer le type spatial permet d’effectuer les opérations suivantes :
- Création d'un rôle de connexion sde dans le cluster de bases de données PostgreSQL.
- Octroi de l'autorité de super-utilisateur à l'utilisateur SDE (cette autorité peut être révoquée une fois le type ST_Geometry créé).
- Créez une structure nommée sde dans la base de données où vous voulez installer le type ST_Geometry.
- Octroi d'une autorité complète sur la structure sde à l'utilisateur SDE.
- Octroi de privilèges USAGE sur la structure sde au groupe de connexion public. Vous pouvez révoquer ce privilège, mais vous devez accorder le privilège USAGE sur la structure sde à tous les utilisateurs qui ont besoin d'accéder au type, aux sous-types ou aux fonctions ST_Geometry.
- Création des fonctions, domaines, tables (sde_coordinate_systems et sde_geometry_columns) et vues (st_geometry_columns et st_spatial_references) nécessaires dans la structure sde, ainsi que de la table sde_spatial_references dans la structure publique.
Avant d'exécuter l'outil ou la fonction, vous devez copier la bibliothèque st_geometry dans le serveur PostgreSQL.
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 un type spatial pour installer le type ST_Geometry dans une base de données PostgreSQL :
- Copiez la bibliothèque st_geometry du répertoire DatabaseSupport vers l’emplacement de l’installation d’ArcGIS Desktop et placez-la dans le répertoire lib de PostgreSQL. Veillez à copier la bibliothèque st_geometry appropriée à la version de PostgreSQL et au système d’exploitation que vous utilisez.
- L’emplacement du répertoire lib sur Linux peut varier selon la façon dont vous avez installé PostgreSQL. Pour déterminer l'emplacement correct de l'installation PostgreSQL, exécutez pg_config en tant qu'utilisateur postgres. La valeur qui est renvoyée pour PKGLIBDIR est le répertoire lib dans lequel vous devez placer le fichier st_geometry.so. Connectez-vous en tant qu’utilisateur racine pour copier le fichier dans le répertoire lib.
- Si PostgreSQL est installé sur un serveur Windows, placez le fichier st_geometry.dll dans le répertoire %PostgreSQL%\lib.
- Démarrez ArcCatalog ou ArcMap, ouvrez la fenêtre Catalogue, puis connectez-vous à la base de données en tant que superutilisateur PostgreSQL.
Cette opération génère un fichier .sde dans C:\Users\<user_name>\AppData\Roaming\ESRI\Desktop<version_number>\ArcCatalog.
- Ouvrez l'outil Créer un 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 le fichier de connexion à la base de données (.sde) que vous avez créé à l'étape 2 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.
- Laissez vide la zone de texte Nom de l'espace de table.
- 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 dans la base de données que vous avez spécifiée.
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 Server pour créer le type, le sous-type et les fonctions ST_Geometry d'Esri dans une base de données PostgreSQL.
- Copiez la bibliothèque st_geometry du répertoire DatabaseSupport vers l’emplacement de l’installation d’ArcGIS Desktop et placez-la dans le répertoire lib de PostgreSQL. Veillez à copier la bibliothèque st_geometry appropriée à la version de PostgreSQL et au système d’exploitation que vous utilisez.
- L’emplacement du répertoire lib sur Linux peut varier selon la façon dont vous avez installé PostgreSQL. Pour déterminer l'emplacement correct de l'installation PostgreSQL, exécutez pg_config en tant qu'utilisateur postgres. La valeur qui est renvoyée pour PKGLIBDIR est le répertoire lib dans lequel vous devez placer le fichier st_geometry.so. Connectez-vous en tant qu’utilisateur racine pour copier le fichier dans le répertoire lib.
- Si PostgreSQL est installé sur un serveur Windows, placez le fichier st_geometry.dll dans le répertoire %PostgreSQL%\lib.
-
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 la base de données PostgreSQL spdata, sur l'agrégat de base de données pgserve. La bibliothèque ST_Geometry se trouve dans le répertoire /net/pgserve/opt/PostgreSQL/9.3/lib sur le serveur PostgreSQL (pgserve).
create_spatial_type.py --DBMS POSTGRESQL -i pgserve --auth DATABASE_AUTH -U postgres -P M3tsy$ -D spdata -p 3$@b0eg -t sde --path /net/pgserve/opt/PostgreSQL/9.3/lib/st_geometry.so
Le type, les sous-types et les fonctions ST_Geometry sont créés dans la structure de l’utilisateur sde dans la base de données que vous avez spécifiée.