Disponible con una licencia Standard o Advanced.
Puede agregar el tipo ST_Geometry, sus subtipos y funciones a su base de datos de Oracle mediante un script de Python que utiliza la función CreateSpatialType de ArcPy.
Cuando lo hace, se añade un usuario llamado sde a la base de datos. El usuario sde posee el tipo ST_Geometry, sus subtipos, funciones y tablas.
En los siguientes pasos se explica cómo crear el tipo ST_Geometry en una base de datos de Oracle mediante una secuencia de comandos de Python:
- Copiar la biblioteca libst_shapelib (st_shapelib para Windows) desde el directorio DatabaseSupport en la ubicación de instalación de cliente ArcGIS y moverla a una ubicación en el servidor de Oracle.
Asegúrese de utilizar la biblioteca apropiada para el sistema operativo del servidor de Oracle.
El directorio en el servidor donde se coloca la biblioteca debe ser accesible desde el cliente el equipo en que ejecute la herramienta Crear tipo espacial o la secuencia de comandos. Si la ubicación de la biblioteca en un equipo de UNIX o Linux, asegúrese de que el administrador de base de datos tiene acceso de lectura a la carpeta y ejecute los privilegios en el archivo de biblioteca.
-
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 secuencia de comandos crea el tipo ST_Geometry en la instancia oserve/orcl de Oracle, y la biblioteca ST_Geometry está ubicada en el directorio /ora/shape del servidor de 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
El tipo ST_Geometry, sus subtipos y funciones se crean en el esquema del usuario sde y se hace una entrada en Oracle para la biblioteca de formas.
Si desea utilizar la función ST_Transform para realizar transformaciones geográficas mediante SQL, debe copiar la carpeta pedata desde el directorio de instalación de ArcGIS for Desktop, colocarla en el servidor de Oracle y configurar una variable de entorno PEDATAHOME en el servidor que señala esa ubicación.