Типы данных PostgreSQL, поддерживаемые в ArcGIS

При создании таблицы или добавлении столбца в таблицу базы данных вы указываете определенный тип данных для столбца. Типы данных определяются, исходя из следующего:

  • Какие значения можно хранить в столбце
  • Какие операции можно применять к данным этого столбца
  • Как данные этого столбца хранятся в базе данных

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,s)

big serial, double precision

Точность и количество знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS.

Float

numeric(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)

Поддерживается только базами геоданных.

GUID

varchar(38)

UUID

Long Integer

integer

serial

Object ID

Integer в базе геоданных

Serial в базе данных

В ArcGIS тип ObjectID соответствует столбцу с идентификаторами записей (ID) таблицы (или класса объектов). В таблице может быть только один.

Raster

bytea

Растры поддерживаются только базами геоданных.

Short Integer

smallint

real

Text

character varying

character, varchar, 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

  • Геометрия с размерностью 0, которая занимает отдельное местоположение в координатном пространстве.
  • Имеет одиночное значение координат x,y; всегда является простым и имеет значение границы NULL.

ST_LineString

  • Одномерный объект, хранящийся как последовательность точек, которая определяет линейно-интерполированный путь.
  • Объекты ST_LineString имеют длину.
  • ST_LineString является простым, если он не имеет самопересечений.
  • Конечные точки (граница) замкнутого ST_LineString занимают одну и ту же точку в пространстве.
  • ST_LineString является кольцом, если он одновременно замкнутый и простой.
  • Конечные точки обычно формируют границу ST_LineString, кроме того случая, когда ST_LineString замкнут, в этом случае граница отсутствует (NULL).
  • Внутренняя часть ST_LineString – это связанный путь, который лежит между конечными точками, кроме того случая, когда ST_LineString замкнут; в этом случае внутренняя часть является непрерывной.

ST_Polygon

  • Двумерная поверхность, хранящаяся как последовательность точек, определяющих ее внешнее ограничивающее кольцо, а также отсутствие или несколько внутренних колец.
  • ST_Polygon имеет площадь и всегда является простым.
  • Внешние и любые внутренние кольца определяют границу ST_Polygon, а пространство, заключенное между кольцами, определяет внутреннюю часть ST_Polygon.
  • Кольца объекта ST_Polygon могут пересекаться в касательной точке, но не могут пересекаться (перекрещиваться).

ST_MultiPoint

  • Набор элементов ST_Point.
  • Имеет размерность 0.
  • ST_MultiPoint является простым, если ни один из его элементов не занимает одно и то же координатное пространство.
  • Граница у ST_MultiPoint отсутствует (NULL).

ST_MultiLineString

  • Набор элементов ST_LineString.
  • Объекты ST_MultiLineString имеют длину.
  • Объекты ST_MultiLineString являются простыми, если они пересекаются только в конечных точках элементов ST_LineString.
  • Объекты ST_MultiLineString не являются простыми, если внутренние части элементов ST_LineString пересекаются.
  • Границей ST_MultiLineString являются непересекающиеся конечные точки элементов ST_LineString.
  • Объект ST_MultiLineString является замкнутым, если все его элементы ST_LineString замкнуты.
  • Граница ST_MultiLineString отсутствует (NULL), если все конечные точки всех элементов пересекаются.

ST_MultiPolygon

  • Набор полигонов.
  • Объекты ST_MultiPolygon имеют площадь.
  • Границей ST_MultiPolygon является суммированная длина всех внутренних и внешних колец его элементов.
  • Внутренняя часть ST_MultiPolygon определяется, как суммарные внутренние части всех его элементов ST_Polygon.
  • Граница элементов объекта ST_MultiPolygon может пересекаться только в касательной точке.

Подтипы ST_Geometry

Учтите, что каждый подкласс наследует свойства суперкласса 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 ограничивает размер тех форм, которые он может обработать. Дополнительные сведения см. в документации к 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, в базе геоданных. См. Регистрация таблицы или представления в базе геоданных для дополнительной информации.