При создании таблицы или добавлении столбца в таблицу базы данных вы указываете определенный тип данных для столбца. Типы данных определяются, исходя из следующего:
- Какие значения можно хранить в столбце
- Какие операции можно применять к данным этого столбца
- Как данные этого столбца хранятся в базе данных
ArcGIS работает с определенными типами данных. При осуществлении доступа к таблице базы данных через Подключения к базам данных, слой запроса или веб-сервис, ArcGIS отфильтровывает любые неподдерживаемые типы данных. ArcGIS не отображает неподдерживаемые типы данных, и вы не сможете редактировать их в ArcGIS. Аналогично, если при помощи ArcGIS копировать и вставлять таблицы, содержащие неподдерживаемые типы данных, из одной базы в другую, ArcGIS вставит только те столбцы, которые используют поддерживаемые типы данных.
В первом столбце в следующей таблице перечислены типы данных ArcGIS. Во втором столбце перечислены типы данных PostgreSQL, создаваемые ArcGIS. В третьем столбце показано, какие другие типы данных PostgreSQL (если они имеются) сопоставляются типам данных ArcGIS при просмотре таблицы, созданной вне ArcGIS (не зарегистрированной в базе геоданных). В последнем столбце при необходимости предоставляется дополнительная информация.
Типы данных ArcGIS | Созданные типы данных PostgreSQL | Другие типы данных PostgreSQL, которые можно просматривать | Примечания |
---|---|---|---|
BLOB | bytea | ||
Дата | timestamp without time zone | дата, время без часового пояса, время с часовым поясом, временная отметка с часовым поясом | |
Double | numeric(p,s) | двойная точность | Точность и количество знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. |
Float | numeric(p,s) | decimal, double precision, numeric, real | Точность и количество знаков, указанные в 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) | Поддерживается только базами геоданных. | |
GUID | varchar(38) | UUID | |
Long Integer | integer | serial | |
Object ID | Integer в базе геоданных Serial в базе данных | В ArcGIS тип ObjectID соответствует столбцу с идентификаторами записей (ID) таблицы (или класса объектов). В таблице может быть только один. | |
Растр | bytea | Растры поддерживаются только базами геоданных. | |
Short Integer | smallint | ||
Текст | character varying | character, text | Если вы создаете текстовое поле с помощью SQL-клиента или стороннего приложения и не задаете длину (другими словами, длина равна 0), ArcGIS считывает это поле как CLOB. |
Если в таблице имеется столбец с типом данных, который не поддерживается в 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, Inc. (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. В этом продукте используется стандартные двоичные (WKB) и текстовые (WKT) представления геометрии.
В PostGIS имеется два пространственных типа: geometry и geography. Чтобы использовать их, необходимо установить PostGIS на ваш кластер базы данных PostgreSQL, и использовать шаблон базы данных PostGIS для создания базы данных, в которой вы будете хранить свою базу геоданных. Убедитесь, что вы установили версию PostGIS, поддерживаемую версией ArcGIS, с которой вы работаете.
При использовании типа хранения пространственных данных в PostGIS с ArcGIS нужно учесть следующее:
- Нужно использовать шаблон базы данных PostGIS для создания базы данных PostgreSQL, используемой для базы геоданных, или активировать PostGIS в базе данных.
Примечание:
Если база геоданных создается с использованием инструмента геообработки Создать многопользовательскую базу геоданных, ваша база данных будет создана с использованием шаблона, отличающегося от шаблона PostGIS. Поэтому, если вы хотите использовать тип PostGIS geometry или geography, следует создать базу данных вручную, используя шаблон PostGIS. После этого при запуске инструмента геообработки Создать многопользовательскую базу геоданных можно выбрать существующую базу данных с поддержкой 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, установленный на тот тип пространственных данных, который вам необходим: либо PG_GEOMETRY, либо PG_GEOGRAPHY.
По умолчанию новые классы пространственных объектов используют хранение ST_Geometry. Если нужно сохранить большинство данных с типом хранения PostGIS, измените параметр 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 Desktop и зарегистрировать таблицы, включающие столбцы PostGIS, в базе геоданных. См. Регистрация таблицы или представления в базе геоданных для дополнительной информации.