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 CreateSpatialTypeArcPy afin d’insérer le type, ses sous-types et les fonctions dans la base de données.
Conseil :
Si vous avez utilisé l’outil de géotraitement Créer une géodatabase d’entreprise avec l’option Spatial Type définie sur PostGIS pour créer une géodatabase dans PostgreSQL, et que vous décidez ultérieurement d’ajouter le type ST_Geometry à cette géodatabase, vous pouvez exécuter l’outil Créer un type spatial pour ajouter le type ST_Geometry à cette géodatabase. Sinon, exécutez seulement l’outil Créer un type spatial dans une base de données.
L’outil Créer le type spatial permet d’effectuer les opérations suivantes :
- Créez 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 un schéma nommé sde dans la base de données.
- 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 sur le serveur PostgreSQL.
Remarque :
Le fichier st_geometry.dll requiert Microsoft Visual C++ Redistributable Package (x64) lorsqu’il est déployé sur un serveur Microsoft Windows. Reportez-vous à la rubrique Configuration requise des bases de données pour ArcGISPostgreSQL afin de connaître la version requise du paquetage. Si ce paquetage n’est pas présent sur le serveur PostgreSQL, téléchargez-le depuis le site de Microsoft et installez-le.
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 PostgreSQL :
- Téléchargez la bibliothèque st_geometry depuis My Esri et placez-la dans le répertoire PostgreSQL lib. Veillez à télécharger 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 sous Linux varie selon le mode d’installation de PostgreSQL. Pour déterminer l’emplacement correct de l’installation de 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 à la machine 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 sur le serveur.
- Ouvrez un projet dans ArcGIS Pro, ouvrez la fenêtre Catalog (Catalogue), puis connectez-vous à la base de données en tant que superutilisateur PostgreSQL.
Vous créez ainsi un fichier .sde dans le dossier de votre projet.
- 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 le fichier de connexion à la base de données (.sde) que vous avez créé à l’étape 2 dans la zone de texte Input Database (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.
Conseil :
Si la grappe de bases de données PostgreSQL détient déjà un rôle de connexion sde, vérifiez que le mot de passe que vous saisissez correspond à celui du rôle de connexion sde existant. Une géodatabase d'entreprise peut par exemple déjà se trouver dans la même grappe de bases de données. Dans ce cas, le rôle de connexion sde existe déjà et vous devez utiliser son mot de passe.
- Laissez vide la zone de texte Nom de l'espace de table.
- Cliquez sur Run (Exécuter).
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 une machine ArcMap, ArcGIS Pro ou ArcGIS Server pour créer le type ST_Geometry, le sous-type et les fonctions dans une base de données PostgreSQL.
- Téléchargez la bibliothèque st_geometry depuis My Esri et placez-la dans le répertoire PostgreSQL lib. Veillez à télécharger 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 sous Linux varie selon le mode d’installation de PostgreSQL. Pour déterminer l’emplacement correct de l’installation de 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 à la machine 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 sur le serveur.
- Créez un fichier texte sur la machine cliente ArcGIS, puis copiez le script suivant dans le fichier :
""" Name: create_spatial_type.py Description: Provide connection information to an enterprise database and create spatial type in the Oracle or PostgreSQL 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 10.1 and higher releases") #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("{}: error: {}\n".format(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("{}: error: {}\n".format(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, instnace, 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_database=Connection_File_Name_full_path, sde_user_password=password, tablespace_name=tablespace, st_shape_library_path=lib_path) 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 le cluster de base de données pgserve. La bibliothèque ST_Geometry se trouve dans le répertoire /net/pgserve/opt/PostgreSQL/12.4/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/12.4/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.
Vous avez un commentaire à formuler concernant cette rubrique ?