ArcGIS Desktop

  • Dokumentation
  • Support

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS for Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

Hilfe

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Verwalten von Daten
  • Werkzeuge
  • Mehr ...

Verwenden eines Python-Skripts zum Erstellen des ST_Geometry-Typs in PostgreSQL

Mit der Standard- oder Advanced-Lizenz verfügbar.

Sie können der PostgreSQL-Datenbank den Typ "ST_Geometry", einen Subtype und Funktionen mithilfe eines Python-Skripts hinzufügen, das die ArcPy-Funktion CreateSpatialType aufruft.

Funktionen des Werkzeugs "Räumlichen Typ erstellen":

  • Erstellt eine Anmelderolle mit der Bezeichnung "sde" im PostgreSQL-Datenbank-Cluster
  • Gewährt dem SDE-Benutzer Superuser-Berechtigungen (diese können entzogen werden, nachdem der Typ "ST_Geometry" erstellt wurde)
  • Erstellt ein Schema mit der Bezeichnung "sde" in der Datenbank, in der der Typ "ST_Geometry" installiert wird
  • Erteilt dem SDE-Benutzer uneingeschränkte Berechtigungen für das SDE-Schema
  • Erteilt der Gruppe mit öffentlicher Anmeldung USAGE-Berechtigungen für das SDE-Schema (Sie können die Berechtigung widerrufen, aber die USAGE-Berechtigung für das SDE-Schema muss allen Benutzern gewährt werden, die auf den Typ "ST_Geometry", Subtypes oder Funktionen zugreifen müssen)
  • Erstellt die notwendigen Funktionen, Domänen, Tabellen ("sde_coordinate_systems" und "sde_geometry_columns") und Sichten ("st_geometry_columns" und "st_spatial_references") im SDE-Schema und die Tabelle "sde_spatial_references" im öffentlichen Schema

Bevor Sie das Skript ausführen, müssen Sie die Bibliothek "st_geometry" auf den PostgreSQL-Server kopieren.

In den folgenden Schritten wird erklärt, wie Sie den Typ "ST_Geometry" in einer PostgreSQL-Datenbank mithilfe eines Python-Skripts erstellen:

  1. Kopieren Sie die Bibliothek "st_geometry" aus dem DatabaseSupport-Verzeichnis in das ArcGIS Client-Installationsverzeichnis, und platzieren Sie sie im PostgreSQL-Bibliotheksverzeichnis. Stellen Sie sicher, dass Sie die richtige Bibliothek "st_geometry" für die PostgreSQL-Version und das Betriebssystem, auf dem PostgreSQL ausgeführt wird, kopieren.
    • Der Speicherort des Verzeichnisses "lib" unter Linux kann je nach Installation von PostgreSQL variieren. Um den richtigen Speicherort Ihrer PostgreSQL-Installation zu ermitteln, führen Sie "pg_config" als postgres-Benutzer aus. Der für "PKGLIBDIR" zurückgegebene Wert ist das Verzeichnis "lib", in dem Sie die st_geometry-Bibliothek speichern können. Melden Sie sich als Stammverzeichnisbenutzer an, um die Datei in das Verzeichnis "lib" zu kopieren.
    • Wenn PostgreSQL unter einem Windows-Server installiert ist, fügen Sie die Datei st_geometry.dll in das Verzeichnis %PostgreSQL%\lib ein.
  2. Erstellen Sie eine Textdatei auf einem ArcGIS-Client-Computer, und kopieren Sie das folgende Skript in die Datei.
    """
    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)
    
  3. Speichern Sie die Datei mit der Erweiterung .py.
  4. Führen Sie das Skript aus, indem Sie für Ihre Site spezifische Optionen und Informationen bereitstellen.

    Dieses Skript erstellt beispielsweise den Typ "ST_Geometry" in der PostgreSQL-Datenbank "spdata" im Datenbank-Cluster "pgserve". Die Bibliothek "st_geometry" befindet sich im Verzeichnis /net/pgserve/opt/PostgreSQL/9.3/lib auf dem PostgreSQL-Server (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
    

ArcGIS Desktop

  • Startseite
  • Dokumentation
  • Support

ArcGIS Plattform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Insider-Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2018 Esri. | Datenschutz | Rechtliches