Disponible con una licencia Standard o Advanced.
Puede agregar el tipo ST_Geometry, sus subtipos y funciones a su base de datos de PostgreSQL mediante un script de Python que utiliza la función CreateSpatialType de ArcPy.
La herramienta Crear tipo espacial realiza lo siguiente:
- Crea un inicio de sesión sde en el cluster de base de datos de PostgreSQL
- Otorga los privilegios de superusuario al usuario SDE (se pueden revocar después de crear el tipo ST_Geometry)
- Crea un esquema denominado sde en la base de datos donde usted instala el tipo ST_Geometry
- Otorga al usuario sde plena autoridad en el esquema sde
- Otorga privilegios de USO en el esquema sde al grupo de inicio de sesión público (si lo desea, puede revocar este privilegio, pero debe usted otorgue USO en el esquema sde a todos los usuarios que necesitan acceder al tipo ST_Geometry, subtipos y funciones.)
- Crea las funciones, dominios, tablas (sistema_coordenadas_sde y columnas_geométricas_sde), y vistas necesarias (columnas_geométricas_st y referencias_espaciales_st) en el esquema sde, y la tabla referencias_espaciales_sde en el esquema público
Antes de ejecutar la secuencia de comandos, debe copiar la biblioteca st_geometry en el servidor de PostgreSQL.
En los siguientes pasos se explica cómo crear el tipo ST_Geometry en una base de datos de PostgreSQL utilizando una secuencia de comandos de Python:
- Copie la biblioteca st_geometry del directorio DatabaseSupport en la ubicación de instalación de cliente ArcGIS y colóquela en el directorio lib de PostgreSQL. Asegúrese de copiar la biblioteca st_geometry correcta para la versión de PostgreSQL y el sistema operativo en los que se ejecuta PostgreSQL.
- La ubicación del directorio lib en Linux puede variar en función de cómo haya instalado PostgreSQL. Para determinar la ubicación correcta para la instalación de PostgreSQL, ejecute pg_config como usuario de postgre. El valor que se devuelve para PKGLIBDIR es el directorio lib donde es necesario colocar la biblioteca st_geometry. Inicie sesión como usuario raíz para copiar el archivo en la ubicación lib.
- Si PostgreSQL está instalado en un servidor de Windows, coloque el archivo st_geometry.dll en el directorio %PostgreSQL%\lib.
-
Cree un archivo de texto en el equipo cliente de ArcGIS y copie en él la secuencia de comandos siguiente.
""" 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)
- Guarde el archivo con una extensión .py.
- Ejecute la secuencia de comandos, proporcionando opciones e información específicas de su sitio.
Por ejemplo, esta sencuencia de comandos crea el tipo ST_Geometry en el spdata de la base de datos de PostgreSQL, en el clúster de base de datos pgserve. La biblioteca ST_Geometry está ubicada en el directorio /net/pgserve/opt/PostgreSQL/9.3/lib del servidor de 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