При создании таблицы или добавлении столбца в таблицу базы данных вы указываете определенный тип данных для столбца. Типы данных определяются, исходя из следующего:
- Какие значения можно хранить в столбце
- Какие операции можно применять к данным этого столбца
- Как данные этого столбца хранятся в базе данных
ArcGIS работает с определенными типами данных. При осуществлении доступа к таблице базы данных через Подключения к базам данных, слой запроса или веб-сервис, ArcGIS отфильтровывает любые неподдерживаемые типы данных. ArcGIS не отображает неподдерживаемые типы данных, и вы не сможете редактировать их в ArcGIS. Аналогично, если при помощи ArcGIS копировать и вставлять таблицы, содержащие неподдерживаемые типы данных, из одной базы в другую, ArcGIS вставит только те столбцы, которые используют поддерживаемые типы данных.
В первом столбце в следующей таблице перечислены типы данных ArcGIS. Во втором столбце перечислены типы данных PostgreSQL, создаваемые ArcGIS. В третьем столбце показано, какие другие типы данных PostgreSQL (если они имеются) сопоставляются типам данных ArcGIS при просмотре таблицы, созданной вне ArcGIS (не зарегистрированной в базе геоданных). В последнем столбце при необходимости предоставляется дополнительная информация.
Тип данных ArcGIS | Созданные типы данных PostgreSQL | Другие типы данных PostgreSQL, которые можно просматривать | Примечания |
---|---|---|---|
Большое целое | bigint | ||
Blob | bytea | ||
Дата | timestamp without time zone | метка времени с часовым поясом | |
Только дата | date | ||
Double | numeric(p,s) | двойная точность | Точность (p) и масштаб (s), указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Для получения более подробной информации см. раздел Типы данных полей ArcGIS. |
Float | numeric(p,s) | decimal, double precision, numeric, real | Точность (p) и масштаб (s), указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Для получения более подробной информации см. раздел Типы данных полей ArcGIS. |
Геометрия | ST_Geometry, Geometry (PostGIS), Geography (PostGIS) | В базе геоданных параметр GEOMETRY_STORAGE ключевого слова конфигурации, использующийся при создании класса пространственных объектов, определяет тип данных, создаваемых в базе данных. Чтобы использовать ST_Geometry в базе данных (не в базе геоданных), вам нужно установить эту библиотеку. Для получения подробной информации см. раздел Добавление типа геометрии ST_Geometry к базе данных PostgreSQL. Для использования типа PostGIS geometry или geography необходимо установить PostGIS в кластер базы данных PostgreSQL и активировать работу с PostGIS в самой базе данных. Более подробная информация находится в документации по PostgreSQL. | |
Global ID | varchar(38) | Global ID поддерживаются только базами геоданных. | |
GUID | varchar(38) | UUID | |
Long integer | integer | serial | |
Object ID | integer (32-bit) или bigint (64-bit) в базе геоданных Serial в базе данных | Тип данных ArcGIS ObjectID соответствует столбцу с идентификаторами записей (ID) таблицы (или класса объектов). В таблице может быть только один. | |
Растр | bytea | Тип растровых данных ArcGIS поддерживается только в базах геоданных. | |
Short integer | smallint | ||
Текст | character varying | character, text | Если вы создаете текстовое поле с помощью SQL-клиента или стороннего приложения и не задаете длину (другими словами, длина равна 0), ArcGIS считывает это поле как CLOB. |
Только время | time | время без часового пояса, время с часовым поясом | |
Сдвиг метки времени | Не применяется | Не поддерживается |
Если в таблице имеется столбец с типом данных, который не поддерживается в ArcGIS, можно преобразовать этот столбец в текст. Однако это следует делать, только чтобы увидеть значения в этом столбце; этого делать нельзя, если вы собираетесь использовать эти значения в анализе. Например, можно выполнить выражение SELECT, чтобы выбрать столбцы в tableb и преобразовать десятичный столбец (total) в текст:
SELECT id, name, total::text
FROM me.mydb.tableb;
Геометрические типы данных
Как указано в таблице, ArcGIS создает и может работать в PostgreSQL с тремя типами геометрических данных: Esri ST_Geometry, PostGIS geometry и PostGIS geography. Более подробная информация о них приведена в следующих двух разделах.
ST_Geometry
Ниже приводится общее описание пространственного типа данных ST_Geometry. Сведения о реализации в PostgreSQL см. в разделе ST_Geometry в PostgreSQL.
Тип данных ST_Geometry использует спецификацию пользовательских типов данных SQL 3 (UDT), что позволяет создавать столбцы, в которых могут храниться пространственные данные, например, улицы, земельные участки, достопримечательности. В соответствии со стандартами International Organization for Standards (ISO) и Open Geospatial Consortium (OGC) он обеспечивает поддержку SQL-доступа к базам геоданных и базам данных. Данный вид хранения расширяет возможности базы данных, обеспечивая хранение для объектов (точек, линий и полигонов), которые представляют графические объекты. Оно было разработано для эффективного использования ресурсов баз данных, для совместимости с объектами баз данных, такими, как реплики и разделы, и для предоставления быстрого доступа к пространственным данным.
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 наследует спецификацию OGC Simple Features SQL. В этом продукте OGC используются стандартные двоичные (WKB) и текстовые (WKT) представления геометрии.
В PostGIS имеется два пространственных типа: geometry и geography. Чтобы их использовать, необходимо установить PostGIS на ваш кластер базы данных PostgreSQL и использовать шаблон базы данных PostGIS для создания базы данных, в которой вы будете хранить свою базу геоданных. Установите версию PostGIS, поддерживаемую версией ArcGIS, с которой вы работаете.
При использовании типа хранения пространственных данных в PostGIS с ArcGIS нужно учесть следующее:
- Нужно использовать шаблон базы данных PostGIS для создания базы данных PostgreSQL, используемой для базы геоданных, или активировать PostGIS в базе данных.
- Пользователь sde и любой пользователь, обращающийся к данным PostGIS в базе данных или геоданных, должен получить разрешения для используемых представлений PostGIS.
- Классы создаваемых пространственных объектов могут использовать только пространственные привязки, перечислены в виде PostGIS public.spatial_ref_sys. Если вы укажете пространственную привязку, которой нет в списке, класс объектов создан не будет.
- Следует указать ключевое слово конфигурации, которое содержит параметр GEOMETRY_STORAGE, присвоенный для PG_GEOMETRY (для PostGIS geometry) или PG_GEOGRAPHY (для PostGIS geography), чтобы создать класс объектов, использующий пространственные типы данных.
- Классы пространственных объектов в базе геоданных, на PostgreSQL, которые используют типы PostGIS, содержат поле для хранения САПР и кривых, GDB_GEOMATTR_DATA. Если вы создаете пространственную таблицу вне ArcGIS, и регистрируете ее в базе геоданных, в таблицу добавляется это поле.
- Тип PostGIS geography ограничивает размер тех форм, которые он может обработать. Дополнительные сведения см. в документации PostGIS.
Предоставление прав на создание столбцов PostGIS geometry или geography
При активации набора данных для PostGIS, будет добавлено три вида к публичной схеме: geometry_columns, geography_columns и spatial_ref_sys. Вам необходимо предоставить право доступа SELECT для представлений geometry_columns, geography_columns и spatial_ref_sys views для всех пользователей базы геоданных, включая пользователя sde.
GRANT select
ON public.geometry_columns
TO <login_name>;
GRANT select
ON public.geography_columns
TO <login_name>;
GRANT select
ON public.spatial_ref_sys
TO <login_name>;
Создание класса пространственных объектов, использующего тип пространственных данных PostGIS
ArcGIS использует настройки параметров конфигурации для определения типа пространственных данных, используемого при создании класса пространственных объектов. Это параметр GEOMETRY_STORAGE. В базах геоданных в PostgreSQL можно задать ST_GEOMETRY, PG_GEOMETRY (параметр для типа хранения PostGIS geometry) или PG_GEOGRAPHY (значение параметра для типа хранения PostGIS geography). Следовательно, необходимо указать ключевое слово конфигурации, которое содержит параметр GEOMETRY_STORAGE, установленный на тот тип пространственных данных PostGIS, который вам необходим: либо PG_GEOMETRY, либо PG_GEOGRAPHY.
Когда вы создаете базу геоданных для использования пространственного типа ST_Geometry, значение параметра GEOMETRY_STORAGE в ключевом слове конфигурации DEFAULTS устанавливается равным ST_GEOMETRY. Когда вы создаете базу геоданных для пространственного типа PostGIS, значение параметра GEOMETRY_STORAGE в ключевом слове конфигурации DEFAULTS устанавливается равным PG_GEOMETRY.
Если нужно сохранить большинство данных с другим пространственным типом, измените параметр GEOMETRY_STORAGE в ключевом слове конфигурации DEFAULTS. Или если вы хотите хранить часть классов пространственных объектов в типе геометрии PostGIS, можно указать ключевое слово конфигурации PG_GEOMETRY или PG_GEOGRAPHY при создании класса объектов. При экспорте из базы геоданных эти ключевые слова выглядят следующим образом:
##PG_GEOMETRY GEOMETRY_STORAGE "PG_GEOMETRY" UI_TEXT "User Interface text description for POSTGIS geometry storage" END
##PG_GEOGRAPHY GEOMETRY_STORAGE "PG_GEOGRAPHY" UI_TEXT "User Interface text description for POSTGIS geography storage" END
При использовании любого из этих ключевых слов конфигурации, остальные параметры хранилища берутся из ключевого слова DEFAULTS. Дополнительные сведения о параметрах конфигурации см. в разделе Параметры конфигурации PostgreSQL.
Использование существующих таблиц geometry или geography
ArcGIS может использовать таблицы, содержащие столбцы PostGIS geometry или geography, созданные вне ArcGIS другими приложениями или при помощи SQL (которые иногда называют таблицами третьих лиц) при условии, что эти таблицы соответствуют следующим условиям.
- Каждая таблица должна содержать один пространственный столбец. Если нет, определите слой запроса или представление, которые будут содержать только один пространственный столбец.
- Таблицы не должны иметь других столбцов, тип которых задается пользователем.
- Таблицы должны иметь единый тип объекта (точки, линии или полигоны), при этом геометрия может быть составной.
- В каждой таблице необходимо наличие столбца с целочисленными, уникальными значениями (не NULL), который определяется как столбец Object ID.
- В каждой таблице должен присутствовать пространственный индекс.
Сведения о создании таблиц со столбцом PostGIS с помощью SQL находятся в документации к PostGIS .
Можно подключиться к базе данных PostgreSQL из ArcGIS AllSource и зарегистрировать таблицы, включающие столбцы PostGIS, в базе геоданных. Дополнительную информацию см. в разделе Регистрация таблицы или представления в базе геоданных.