При создании таблицы или добавлении столбца в таблицу базы данных вы указываете определенный тип данных для столбца. Типы данных определяются, исходя из следующего:
- Какие значения можно хранить в столбце
- Какие операции можно применять к данным этого столбца
- Как данные этого столбца хранятся в базе данных
ArcGIS работает с определенными типами данных. При осуществлении доступа к таблице базы данных через Подключения к базам данных или слой запроса, ArcGIS отфильтровывает любые неподдерживаемые типы данных. ArcGIS не будет отображать неподдерживаемые типы данных, и вы не сможете редактировать их в ArcGIS. Аналогично, если при помощи ArcGIS копировать и вставлять таблицы, содержащие неподдерживаемые типы данных, из одной базы в другую, ArcGIS вставит только те столбцы, которые используют поддерживаемые типы данных.
В первом столбце в следующей таблице перечислены типы данных ArcGIS. Во втором столбце перечислены PostgreSQL типы данных, создаваемые ArcGIS. В третьем столбце показано, какие другие PostgreSQL типы данных (если имеются) сопоставляются типам данных ArcGIS при просмотре таблицы, созданной вне ArcGIS. В последнем столбце при необходимости предоставляется дополнительная информация.
Типы данных ArcGIS | Создаваемые типы данных PostgreSQL | Другие типы данных PostgreSQL, которые можно просматривать | Примечания |
---|---|---|---|
BLOB | BYTEA | ||
DATE | TIMESTAMP WITHOUT ZONE | TIMESTAMP | |
DOUBLE | NUMERIC(p) | BIG SERIAL, DOUBLE PRECISION | Точность и количество знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. |
FLOAT | NUMERIC(p) | Точность и количество знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. | |
GEOMETRY | ST_GEOMETRY or GEOMETRY (PostGIS) | В базе геоданных параметр GEOMETRY_STORAGE ключевого слова конфигурации, использующийся при создании класса пространственных объектов, определяет тип данных, создаваемых в базе данных. Чтобы использовать ST_Geometry в базе данных (не в базе геоданных), сначала необходимо установить его. Для получения подробной информации см. раздел Добавление типа геометрии ST_Geometry к базе данных PostgreSQL. Для использования типа геометрии PostGIS необходимо установить PostGIS в кластер базы данных PostgreSQL и активировать работу с PostGIS в самой базе данных. Более подробная информация находится в документации по PostgreSQL. | |
GLOBAL ID | VARCHAR(38) | Поддерживается только базами геоданных. | |
GUID | VARCHAR(38) | UUID | Поддержка UUID появилась в версии 10.5.1 и ArcGIS Pro 2.0. |
LONG INTEGER | INTEGER | SERIAL | |
OBJECT ID | INTEGER в базе геоданных SERIAL в базе данных | В ArcGIS тип ObjectID соответствует столбцу с идентификаторами записей (ID) таблицы (или класса объектов). В таблице может быть только один. | |
RASTER | BYTEA or ST_RASTER | Растры поддерживаются только базами геоданных. Тип создаваемых данных PostgreSQL зависит от ключевого слова конфигурации (rasterblob, binary или st_raster), использованного при создании набора данных мозаики или набора растровых данных. Необходимо отдельно настроить ST_Raster в базе геоданных, если вы собираетесь его использовать. Инструкции см. в разделе Установка ST_Raster в PostgreSQL. | |
SHORT INTEGER | SMALLINT | REAL | |
TEXT | CHARACTER VARYING | CHARACTER, VARCHAR, TEXT |
Если в таблице имеется столбец с типом данных, который не поддерживается в ArcGIS, можно преобразовать этот столбец в текст. Однако это следует делать, только если вы хотите увидеть значения в этом столбце; если вы собираетесь использовать эти значения в анализе, этого делать нельзя. Например, можно выполнить выражение SELECT, чтобы выбрать столбцы в tableb и преобразовать десятичный столбец (total) в текст:
SELECT id, name, total::text
FROM me.mydb.tableb;
Геометрические типы данных
Как указано в таблице, ArcGIS создает и может работать в PostgreSQL с двумя типами геометрических данных: Esri ST_Geometry или PostGIS Geometry. Более подробная информация о них приведена в следующих двух разделах.
ST_Geometry
Ниже приводится общее описание пространственного типа данных ST_Geometry. Сведения о реализации в PostgreSQL см. в разделе ST_Geometry в PostgreSQL.
Тип данных ST_Geometry использует спецификацию пользовательских типов данных SQL 3 (UDT), что позволяет создавать столбцы, в которых могут храниться пространственные данные, например, улицы, земельные участки, достопримечательности. В соответствии со стандартами International Organization for Standards (ISO) и Open Geospatial Consortium, Inc., (OGC) он обеспечивает поддержку SQL-доступа к базам геоданных и базам данных Данный вид хранения расширяет возможности базы данных, обеспечивая хранение для объектов (точек, линий и полигонов), которые представляют графические объекты. Оно было разработано для эффективного использования ресурсов баз данных, для совместимости с объектами баз данных, такими, как реплики и разделы, и для предоставления быстрого доступа к пространственным данным.
ST_Geometry является абстрактным невызываемым суперклассом. Однако его подклассы могут быть вызваны (инициализированы). Вызванный тип данных – это тип данных, который может быть определен как столбец таблицы; в него могут быть добавлены значения этого типа.
Хотя вы можете определить столбец в виде типа ST_Geometry, вы не добавляете значения ST_Geometry в этот столбец, поскольку он не может быть вызван. Вместо этого вы добавляете значения подкласса.
Следующая схема демонстрирует иерархию типа данных ST_Geometry и его подклассов.
Подклассы ST_Geometry разделены на две категории: подклассы основной геометрии и подклассы однородных наборов. Основная геометрия включает: ST_Point, ST_LineString и ST_Polygon, а однородные наборы включают ST_MultiPoint, ST_MultiLineString и ST_MultiPolygon. Как ясно из названий, наборы однородных элементов являются наборами базовых геометрий. Помимо добавлений одинаковых свойств с базовой геометрией, однородные наборы имеют некоторые собственные свойства.
Каждый подкласс хранит тип геометрии, отображенный в его имени; например, ST_MultiPoint хранит мультиточки. Список подклассов и их описание приведены в следующей таблице:
Подтип | Описание |
---|---|
ST_Point |
|
ST_LineString |
|
ST_Polygon |
|
ST_MultiPoint |
|
ST_MultiLineString |
|
ST_MultiPolygon |
|
Учтите, что каждый подкласс наследует свойства суперкласса ST_Geometry, но также имеет собственные свойства. Функции, которые работают с типом данных ST_Geometry, принимают любой из типов элементов подклассов. Однако некоторые функции определены на уровне подклассов, и принимают только заданные подклассы. Например, функция ST_GeometryN принимает в качестве входных параметров только значения подтипов ST_MultiLinestring, ST_MultiPoint или ST_MultiPolygon.
Геометрия PostGIS
PostGIS – это продукт, который расширяет возможности базы данных PostgreSQL для работы с пространственными данными. PostGIS следует спецификации Open Geospatial Consortium, Inc. (OGC) для простых объектов для языка структурированных запросов (Structured Query Language (SQL)). В этом продукте используется стандартные двоичные (WKB) и текстовые (WKT) представления геометрии.
В PostGIS имеется два пространственных типа: geometry и geography. В ArcGIS поддерживается только тип geometry.
При использовании типа хранения geometry в PostGIS с ArcGIS нужно учесть следующее:
- Нужно использовать шаблон базы данных PostGIS для создания базы данных PostgreSQL, используемой для базы геоданных, или активировать PostGIS в базе данных.
- Пользователь sde и любой пользователь, создающий данные в базе данных или геоданных, должен получить разрешения для используемых таблиц PostGIS.
- Классы создаваемых пространственных объектов могут использовать только пространственные привязки, перечисленные в таблице PostGIS public.spatial_ref_sys. Если указана привязка, не перечисленная в таблице, класс объектов создан не будет.
- Следует указать ключевое слово конфигурации, которое содержит параметр GEOMETRY_STORAGE, присвоенный для PG_GEOMETRY, чтобы создать класс объекта, использующий тип геометрии PostGIS.
- Нельзя переименовывать пространственные таблицы, сохраненные с использованием типа геометрии PostGIS. Данное ограничение связано с тем, что не существует функции PostGIS для обновления имени таблицы в public.geometry_columns.
- Классы пространственных объектов в базе геоданных, на PostgreSQL, которые используют тип геометрии PostGIS, содержат поле для хранения САПР и кривых, GDB_GEOMATTR_DATA. Если вы создаете пространственную таблицу вне ArcGIS, а затем регистрируете ее в базе геоданных, в таблицу будет добавлено это поле.
Для использования типа геометрии PostGIS следует установить PostGIS. PostGIS устанавливается после установки PostgreSQL. Убедитесь, что вы установили версию PostGIS, поддерживаемую версией ArcGIS, с которой вы работаете.
При установке PostGIS создается шаблон базы данных PostGIS в кластере базы данных PostgreSQL. Используйте шаблон базы данных PostGIS для создания базы данных, в которой будет храниться ваша база геоданных.
Предоставление прав на создание столбцов геометрии PostGIS
Если для базы данных разрешено использование PostGIS, в общей схеме будут созданы две таблицы – geometry_columns и spatial_ref_sys. Как минимум, нужно выдать права SELECT, INSERT, UPDATE и DELETE для столбцов таблицы geometry_columns, а также выбрать SELECT для таблицы spatial_ref_sys для пользователя sde и всех пользователей, которые будут создавать данные в базе геоданных.
GRANT select, insert, update, delete
ON TABLE public.geometry_columns
TO <user_name>;
GRANT select
ON TABLE public.spatial_ref_sys
TO <user_name>;
Создание класса пространственных объектов, использующего геометрию PostGIS
ArcGIS использует настройки параметров конфигурации в таблице sde_dbtune для определения типа пространственных данных, используемого при создании класса пространственных объектов. Этот параметр имеет название GEOMETRY_STORAGE. В базах геоданных, работающих в базах данных PostgreSQL, используют один из двух типов хранения геометрии: ST_GEOMETRY или PG_GEOMETRY (значение параметра типа хранения PostGIS geometry). Таким образом, если нужно создать класс объектов с использованием ArcGIS на базе типа хранения PostGIS geometry, следует указать ключевое слово конфигурации, которое содержит параметр GEOMETRY_STORAGE со значением PG_GEOMETRY.
По умолчанию новые классы пространственных объектов используют хранение ST_Geometry. Если нужно сохранить большинство данных с типом хранения PostGIS, измените параметр GEOMETRY_STORAGE в ключевом слове конфигурации DEFAULTS в таблице sde_dbtune на PG_GEOMETRY. Или если вы хотите хранить только часть классов пространственных объектов в типе геометрии PostGIS, то вы можете указать ключевое слово конфигурации PG_GEOMETRY при создании класса объектов. При экспорте из базы геоданных ключевое слово PG_GEOMETRY выглядит следующим образом:
##PG_GEOMETRY GEOMETRY_STORAGE "PG_GEOMETRY" UI_TEXT "User Interface text description for POSTGIS geometry storage" END
Остальные параметры хранения будут взяты из ключевого слова DEFAULTS. Более подробно о ключевых словах конфигурации и параметрах см. в следующих разделах:
Использование существующих таблиц геометрии
ArcGIS может использовать таблицы, содержащие столбцы геометрии формата PostGIS, созданные вне ArcGIS другими приложениями или при помощи SQL (которые иногда называют таблицами третьих лиц) при условии, что эти таблицы соответствуют следующим условиям.
- Каждая таблица должна содержать один столбец геометрии. Если нет, определите слой запроса или представление, которые будут содержать только один пространственный столбец.
- Таблицы не должны иметь других столбцов, тип которых задается пользователем.
- Таблицы должны иметь один тип геометрии (точки, линии или полигоны), при этом геометрия может быть составной.
- В каждой таблице необходимо наличие столбца с целочисленными, уникальными значениями (не NULL), которые можно использовать в качестве идентификатора строки.
- В каждой таблице должен присутствовать пространственный индекс.
Сведения о создании таблиц со столбцом PostGIS с помощью SQL находятся в документации к PostGIS.
Можно подключиться к базе данных PostgreSQL, содержащей таблицы PostGIS, через ArcGIS Desktop и зарегистрировать их в базе геоданных. Дополнительную информацию см. в разделе Регистрация таблицы или представления в базе геоданных.
Растровые типы данных
Для хранения растров в базе геоданных на PostgreSQL вы можете использовать типы данных bytea или ST_Raster. По умолчанию используется bytea. Если вы хотите использовать ST_Raster, необходимо настроить базу геоданных.
Bytea
Bytea – это тип данных в виде бинарной строки переменной длины, используемый в PostgreSQL. Он похож на BLOB. Более подробная информация об этом типе данных имеется в документации к PostgreSQL.
ST_Raster
ST_Raster – это определяемый пользователем тип данных, который можно установить в многопользовательских базах геоданных, чтобы обеспечить SQL-доступ к растровым данным.
Чтобы использовать тип ST_Raster, необходимо настроить его в базе данных.
Подробные сведения об определении объекта типа ST_Raster см. в разделе Тип данных ST_Raster.