Elaboration d'un script visant à créer le type ST_Geometry dans PostgreSQL
Vous pouvez ajouter le type, le sous-type et les fonctions ST_Geometry à votre base de données PostgreSQL à l'aide d'un script Python qui appelle l'outil de géotraitement Créer un type spatial.
L'outil Créer un 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 des privilèges de super-utilisateur à l'utilisateur sde (ces privilèges peuvent être révoqués une fois le type ST_Geometry créé)
- Création d'une structure nommée sde dans la base de données où vous installez le type ST_Geometry
- Octroi d'une autorité complète sur la structure sde à l'utilisateur sde
- Octroi du privilège USAGE sur la structure sde au groupe de connexion public (si vous le souhaitez, vous pouvez révoquer ce privilège, mais vous devez l'accorder à tous les utilisateurs qui doivent accéder aux fonctions, sous-types ou au type 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 le script, vous devez copier la bibliothèque st_geometry dans le serveur PostgreSQL.
Les étapes suivantes expliquent comment installer le type ST_Geometry dans une base de données PostgreSQL à l'aide d'un script Python :
Etapes :
- Copiez la bibliothèque st_geometry du répertoire DatabaseSupport vers l'emplacement de l'installation du client ArcGIS et placez-la dans le répertoire lib de PostgreSQL.
- Si PostgreSQL est installé sur un serveur Linux, connectez-vous au serveur en tant qu'utilisateur racine et placez le fichier st_geometry.so dans le répertoire /usr/lib64/pgsql.
- Si PostgreSQL est installé sur un serveur Windows, placez le fichier st_geometry.dll dans le répertoire %PostgreSQL%\lib.
-
Copiez cet exemple de script dans la fenêtre Python d'ArcGIS for Desktop ou dans n'importe quel IDE (environnement de développement intégré) Python, tel que PythonWin ou WING. Modifiez les valeurs des variables pour qu'elles correspondent aux informations de votre site.
""" Name: create_spatial_type.py Description: Provide connection information to an enterprise 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 10.1 release") #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, 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_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)
- Exécutez le script modifié pour créer le type, les sous-types et les fonctions ST_Geometry dans la base de données PostgreSQL.
Thèmes connexes
9/12/2013