Доступно с лицензией Standard или Advanced.
Чтобы использовать тип ST_Geometry для хранения пространственных данных в базе данных PostgreSQL, администратор базы данных может запустит инструмент геообработки Создать пространственный тип или скрипт Python, вызывающий функцию CreateSpatialType ArcPy для добавления типа, его подтипов и функций в базу данных.
Подсказка:
Если вы использовали инструмент геообработки Создать многопользовательскую базу геоданных с параметром Пространственный тип, установленным на PostGIS, чтобы создать базу геоданных в PostgreSQL, а позднее вы решили добавить в эту базу геоданных тип ST_Geometry, то вы можете запустить инструмент Создать пространственный тип, чтобы добавить ST_Geometry в эту базу геоданных. Во всех других случаях следует использовать инструмент Создать пространственный тип в базе данных.
Инструмент Создать пространственный тип и функция выполняет следующие действия:
- Создает роль логина sde в кластере базы данных PostgreSQL.
- Присваивает пользователю sde права суперпользователя (они могут быть отозваны после создания типа ST_Geometry).
- Создайте в базе данных схему с именем sde.
- Присваивает пользователю sde все права для схемы sde.
- Выдайте права USAGE схемы sde для группы персональных учетных записей. Вы можете отозвать данное право доступа, но должны присвоить право USAGE схемы sde всем пользователям, нуждающимся в доступе к типу, подтипам или функциям ST_Geometry.
- Создает необходимые функции, домены, таблицы (sde_coordinate_systems и sde_geometry_columns), виды (st_geometry_columns и st_spatial_references) в схеме sde, а также таблицу sde_spatial_references в общей схеме.
Перед запуском инструмента или функции необходимо скопировать библиотеку st_geometry на сервер PostgreSQL.
Примечание:
Для файла st_geometry.dll требуется Microsoft Visual C++ Redistributable Package (x64) при развертывании на сервере Microsoft Windows. См. Требования ArcGIS к базе данных PostgreSQL, чтобы узнать о требующейся версии пакета. Если данный пакет отсутствует на сервере PostgreSQL, загрузите его с сайта Microsoft и установите.
Используйте инструмент геообработки Создать пространственный тип.
Чтобы запустить инструмент геообработки Создать пространственный тип для установки типа ST_Geometry в базу данных PostgreSQL, выполните следующие шаги:
- Загрузите библиотеку st_geometry с сайта My Esri и поместите ее в папку PostgreSQL lib.
Библиотеки st_geometry различаются для разных операционных систем, версий PostgreSQL и версий ArcGIS.
Если опция загрузки отсутствует, свяжитесь с администратором вашей организации ArcGIS.
- Местоположение директории lib на Linux меняется в зависимости от способа установки PostgreSQL. Чтобы определить корректное местоположение для установки PostgreSQL, запустите команду pg_config под пользователем postgres. Значение, возвращаемое для PKGLIBDIR, является директорией lib, в которую необходимо поместить файл st_geometry.so. Войдите в систему как пользователь root, чтобы скопировать этот файл в местоположение lib.
- Если PostgreSQL установлен на сервере Windows, поместите файл st_geometry.dll в директорию %PostgreSQL%\lib на сервере.
- Откройте проект в ArcGIS Pro, откройте панель Каталог и подключите базу данных как суперпользователь PostgreSQL.
Файл подключения к базе данных (.sde) создан в вашей папке проекта.
- Откройте инструмент Создать пространственный тип.
Вы можете воспользоваться окном Поиск для поиска инструмента или открыть его из группы инструментов Рабочая область набора инструментов Управление данными.
- Добавьте подключение к базе данных, созданное на шаге 2, в текстовое поле параметра Входное подключение к базе данных.
- Введите пароль пользователя базы данных sde в поле параметра Пароль пользователя SDE.
Подсказка:
Если в кластере базы данных PostgreSQL уже есть роль sde, убедитесь, что введенный вами пароль соответствует паролю существующей роли sde. Например, если у вас есть многопользовательская база геоданных в том же кластере баз данных, роль sde уже будет существовать, и вы должны использовать здесь пароль для нее.
- Оставьте поле параметра Имя табличного пространства пустым.
- Щелкните Запустить.
Тип ST_Geometry, подтипы и функции создаются в схеме пользователя sde указанной вами базы данных.
Используйте функцию CreateSpatialType
Чтобы запустить скрипт Python, который вызывает функцию CreateSpatialType ArcPy на любом компьютере ArcGIS Pro или ArcGIS Server для создания типа, подтипа и функций ST_Geometry в базе данных PostgreSQL, выполните следующие шаги:
- Загрузите библиотеку st_geometry с сайта My Esri и поместите ее в папку PostgreSQL lib.
Библиотеки st_geometry различаются для разных операционных систем, версий PostgreSQL и версий ArcGIS.
- Местоположение директории lib на Linux меняется в зависимости от способа установки PostgreSQL. Чтобы определить корректное местоположение для установки PostgreSQL, запустите команду pg_config под пользователем postgres. Значение, возвращаемое для PKGLIBDIR, является директорией lib, в которую необходимо поместить файл st_geometry.so. Войдите в систему как пользователь root, чтобы скопировать этот файл в местоположение lib.
- Если PostgreSQL установлен на сервере Windows, поместите файл st_geometry.dll в директорию %PostgreSQL%\lib на сервере.
- Создайте текстовый файл на клиентском компьютере ArcGIS и скопируйте в этот файл следующий скрипт:
""" 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) - Сохраните файл с расширением .py.
- Запустите скрипт, предоставив специфичные для вашего сайта опции и информацию.
Например, этот скрипт создает тип ST_Geometry в базе данных PostgreSQL spdata, на кластере базы данных pgserve. Библиотека ST_Geometry расположена в директории /net/pgserve/opt/PostgreSQL/12.4/lib на сервере 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/12.4/lib/st_geometry.so
Тип ST_Geometry, подтипы и функции создаются в схеме пользователя sde указанной вами базы данных.