Disponible con una licencia Standard o Advanced.
Puede agregar el tipo ST_Geometry, sus subtipos y funciones a la base de datos de PostgreSQL utilizando la herramienta de geoprocesamiento Crear tipo espacial o una secuencia de comandos de Python que llame a la función CreateSpatialType de ArcPy.
La herramienta y la función hacen lo siguiente:
- Crean un inicio de sesión sde en el clúster de base de datos de PostgreSQL.
- Otorgan la autoridad de superusuario al usuario sde (se puede revocar después de crear el tipo ST_Geometry).
- Crean un esquema denominado sde en la base de datos en la que desea instalar el tipo ST_Geometry.
- Otorgan al usuario sde plena autoridad en el esquema sde.
- Conceden privilegios USAGE en el esquema sde al grupo de inicio de sesión público. Este privilegio se puede revocar, pero debe otorgar privilegios USAGE en el esquema sde a todos los usuarios que necesiten tener acceso al tipo, subtipos o funciones de ST_Geometry.
- Crean las funciones, dominios, tablas (sde_coordinate_systems y sde_geometry_columns) y vistas (st_geometry_columns y st_spatial_references) necesarias en el esquema sde, y la tabla sde_spatial_references en el esquema público.
Antes de ejecutar la herramienta o función, debe copiar la biblioteca st_geometry en el servidor de PostgreSQL.
Utilice la herramienta de geoprocesamiento Crear tipo espacial
Los siguientes pasos explican cómo ejecutar la herramienta de geoprocesamiento Crear tipo espacial para instalar el tipo ST_Geometry en la base de datos de PostgreSQL:
- Copie la biblioteca st_geometry del directorio DatabaseSupport en la ubicación de instalación de ArcGIS Desktop 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 del sistema operativo que esté utilizando.
- 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 postgres. El valor que se devuelve para PKGLIBDIR es el directorio lib donde es necesario colocar el archivo st_geometry.so. 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.
- Inicie ArcCatalog o ArcMap, abra la ventana Catálogo y, a continuación, conéctese a la base de datos como un superusuario de PostgreSQL.
Esto crea un archivo .sde en C:\Users\<user_name>\AppData\Roaming\ESRI\Desktop<version_number>\ArcCatalog.
- Abra la herramienta 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.
- Agregue la conexión de base de datos (archivo .sde) que creó en el paso 2 al cuadro de texto Base de datos de entrada.
- Escriba la contraseña que se utilizará para el usuario de la base de datos sde en el cuadro de texto Contraseña de usuario SDE.
- Deje el cuadro de texto Nombre del espacio de tabla en blanco.
- Haga clic en el botón Aceptar para ejecutar la herramienta.
El tipo ST_Geometry, sus subtipos y funciones se crean en el esquema del usuario sde.
Use la función CreateSpatialType
Ejecute una secuencia de comandos de Python que llame a la función CreateSpatialType de ArcPy en cualquier ArcMap, ArcGIS Pro o el equipo de ArcGIS Server para crear el tipo, el subtipo y las funciones de ST_Geometry en una base de datos de PostgreSQL.
- Copie la biblioteca st_geometry del directorio DatabaseSupport en la ubicación de instalación de ArcGIS Desktop 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 del sistema operativo que esté utilizando.
- 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 postgres. El valor que se devuelve para PKGLIBDIR es el directorio lib donde es necesario colocar el archivo st_geometry.so. 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
El tipo ST_Geometry, sus subtipos y funciones se crean en el esquema del usuario sde.