Agregar el tipo ST_Geometry a una base de datos de Oracle

Disponible con una licencia Standard o Advanced.

Puede agregar el tipo, subtipo y las funciones de ST_Geometry de Esri a una base de datos Oracle mediante la herramienta de geoprocesamiento Crear tipo espacial o una secuencia de comandos Python que llame a la función CreateSpatialType de ArcPy.

Una vez que haya agregado el tipo ST_Geometry a su base de datos, podrá usarlo para almacenar datos espaciales.

Tanto la herramienta como la función crean un usuario denominado sde en la base de datos. El usuario sde posee el tipo ST_Geometry, sus subtipos, funciones y tablas.

Nota:

La biblioteca ST_Geometry necesita el paquete redistribuible de Microsoft Visual C++ (x64) cuando se implementa en un servidor de Microsoft Windows. Consulte Requisitos de ArcGIS Oracle para conocer la versión del paquete que se requiere. Si este paquete no está presente en el servidor, descárguelo desde el sitio web de Microsoft e instálelo.

Utilice la herramienta de geoprocesamiento Crear tipo espacial

En los siguientes pasos se explica cómo ejecutar la herramienta de geoprocesamiento Crear tipo espacial para instalar el tipo ST_Geometry en la base de datos de Oracle:

  1. Descargue la biblioteca st_shapelib (Windows) o libst_shapelib (Linux) de My Esri, y llévela a una ubicación del servidor Oracle.

    Utilice la biblioteca apropiada para el sistema operativo de su servidor 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 el script. Si coloca la biblioteca en un equipo UNIX o Linux, asegúrese de que el administrador de base de datos tiene acceso de lectura al directorio y privilegios para ejecutar el archivo de biblioteca.

  2. Abra un proyecto en ArcGIS Pro, abra el panel Catálogo y conéctese a la base de datos como administrador de base de datos sys de Oracle.

    Se crea un archivo .sde en la carpeta del proyecto.

  3. Abra la herramienta de geoprocesamiento Crear tipo espacial.

    Puede utilizar la ventana Buscar para buscar la herramienta o abrir la herramienta desde el conjunto de herramientas Espacio de trabajo de la caja de herramientas Administración de datos.

  4. Agregar la conexión de la base de datos que creó en el paso 3 al cuadro de texto Base de datos de entrada.
  5. Escriba una contraseña para que la utilice el usuario sde en el cuadro de texto Contraseña de usuario SDE.
  6. Para crear un espacio de tabla para utilizar como predeterminado del usuario sde, escríbalo en el cuadro de texto Nombre del espacio de tabla.

    La herramienta Crear tipo espacial crea un espacio de tablas de 400 MB en la ubicación de almacenamiento predeterminada de Oracle. Para controlar dónde se ubica el espacio de tablas o el tamaño del espacio de tabla, cree el espacio de tabla en Oracle primero y especifique el espacio de tabla existente en el cuadro de texto Nombre de espacio de tabla. La herramienta establecerá este espacio de tabla preexistente como el valor predeterminado para el usuario sde.

  7. Busque o escriba el valor de la Ruta de la biblioteca de formas ST_Geometry.

    Esta es la ruta al directorio del servidor de Oracle donde ha colocado el archivo libst_shapelib.so o st_shapelib.dll, incluido el nombre del archivo.

    Por ejemplo, si ha colocado el archivo libst_shapelib.so en el directorio, libraries, en un servidor Linux llamado boxy, escribirá /boxy/libraries/libst_shapelib.so.

  8. Haga clic en Ejecutar.

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, debe copiar la carpeta pedata desde el directorio de instalación de ArcGIS Pro, colocarla en el servidor de Oracle y establecer una variable de entorno PEDATAHOME en el servidor que señala esa ubicación.

Use la función CreateSpatialType

Ejecute una secuencia de comandos de Python que llame a la función CreateSpatialType de ArcPy en cualquier equipo ArcGIS Pro o ArcGIS Server para crear el tipo, el subtipo y las funciones de ST_Geometry de Esri en una base de datos Oracle.

  1. Descargue la biblioteca st_shapelib (Windows) o libst_shapelib (Linux) de My Esri, y llévela a una ubicación del servidor 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 el script. Si coloca la biblioteca en un equipo UNIX o Linux, asegúrese de que el administrador de base de datos tiene acceso de lectura al directorio y privilegios para ejecutar el archivo de biblioteca.

  2. Cree un archivo de texto en el equipo cliente de ArcGIS y copie en él el script siguiente.
    """
    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.management.CreateDatabaseConnection(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.management.CreateSpatialType(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)
  3. Guarde el archivo con una extensión .py.
  4. Ejecute el script, proporcionando opciones e información específicas de su sitio.

    Por ejemplo, este script 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, debe copiar la carpeta pedata desde el directorio de instalación de ArcGIS Pro, colocarla en el servidor de Oracle y establecer una variable de entorno PEDATAHOME en el servidor que señala esa ubicación.