ST_Geometry в Oracle

Пространственный тип данных Esri ST_Geometry может использоваться в базах данных Oracle, как содержащих, так и не содержащих базы геоданных. Это позволяет интегрировать пространственные данные с другими типами бизнес-данных, поэтому многопользовательская база данных приобретает преимущества использования географического компонента при выполнении анализа и работы с другими продуктами. Хранение пространственных данных вместе с другими бизнес-объектами также облегчает многопользовательский доступ, управление и обеспечение безопасности данных, поскольку количество систем хранения данных уменьшается.

Тип пространственных Esri ST_Geometry является типом хранения геометрии по умолчанию для баз геоданных в Oracle. Вы также можете установить ST_Geometry в базах данных Oracle, используя инструмент геообработки Создать пространственный тип.

Примечание:

Тип ST_Geometry не поддерживается с транзакциями XA в Oracle.

Для создания базы геоданных и использования типа ST_Geometry и индекса доменов в СУБД Oracle, администратору базы геоданных (пользователь sde) должны быть предоставлены необходимые системные права для работы с типами, операторами и встроенными процедурами. Более подробно о необходимых правах и разрешениях см. Права доступа для баз геоданных в Oracle. Для установки типа ST_Geometry для базы данных Oracle необходимо наличие пользователя sde, которому должны быть предоставлены специальные права доступа для работы с типами, операторами и встроенными процедурами. Для получения более подробной информации, см. Добавление типа ST_Geometry в базу данных Oracle.

Используя пространственный тип Esri ST_Geometry в базах геоданных в Oracle или в базах данных Oracle, вы можете получить доступ к пространственным данным через функции SQL, которые поддерживают стандарт ISO SQL/MM Spatial Standard, и через спецификацию Simple Feature Specification в OGC. Вы можете использовать команды SQL, чтобы хранить, получать и управлять пространственными объектами так же, как любым другим типом данных. Вы можете использовать большое количество стандартизированных функций с командами SQL и встроенными процедурами, чтобы получать и анализировать пространственные данные. Также, имея доступ к данным через SQL, можно использовать другие приложения, чтобы получать доступ к данным, созданным Oracle.

Чтобы получить доступ к пространственным объектам с помощью SQL, библиотеки ST_Geometry должны быть установлены на тот же сервер, что и экземпляр Oracle. Убедитесь, что операционная система вашего сервера Oracle поддерживает библиотеки ST_Geometry.

Необходимо также настроить Oracle extproc, чтобы использовать SQL для доступа к таблицам, которые содержат пространственный тип ST_Geometry.

Как ST_Geometry хранит пространственные данные

Ниже приводится описание ST_Geometry в Oracle:

NameТип

ENTITY

NUMBER(38)

NUMPTS

NUMBER(38)

MINX

FLOAT(64)

MINY

FLOAT(64)

MAXX

FLOAT(64)

MAXY

FLOAT(64)

MINZ

FLOAT(64)

MAXZ

FLOAT(64)

MINM

FLOAT(64)

MAXM

FLOAT(64)

AREA

FLOAT(64)

LEN

FLOAT(64)

SRID

NUMBER(38)

POINTS

BLOB

Атрибуты пространственного типа представляют следующую информацию:

  • Entity: Тип геометрического объекта, хранящегося в пространственном столбце (linestring, multilinestring, multipoint, multipolygon, point или polygon), значение которого является битовой маской, полученной из встроенной процедуры st_geom_util.
  • Numpts: Число точек, определяющих геометрию; для составной геометрии используются разделители частей, одна точка для каждого разделителя.
  • Minx, miny, maxx, maxy: Пространственный конверт геометрии
  • Area: Площадь геометрии
  • Len: Длина периметра геометрии
  • SRID: Содержит идентификатор геометрии, который связывает ее с соответствующей записью о пространственной привязке (системе координат) в таблице ST_Spatial_References
  • Points: Содержит байтовый поток координат точек, которые определяют геометрию

Как и другие типы объектов, тип данных ST_Geometry имеет метод конструктора и функции. Метод конструктора возвращает новый экземпляр (объект) типа данных и задает значения его атрибутов.

Имя конструктора совпадает с типом (ST_Geometry). Когда вы присваиваете объекту тип данных ST_Geometry, вы запускаете метод конструктора. Пример:

CREATE TABLE hazardous_sites (name        varchar2(128),
                              location    st_geometry);

Ниже приводится список функций доступа ST_Geometry, которые используют в качестве входного параметра один ST_Geometry и возвращают запрашиваемое значение свойства в виде числа.

  • Компонентная функция ST_Area возвращает площадь геометрии.
  • ST_Length возвращает длину геометрии.
  • ST_Entity возвращает число, содержащее битовую маску, описывающую тип примитива.
  • ST_NumPoints возвращает число точек (вершин), которые задают геометрию.
  • ST_MinM, ST_MinX, ST_MinY и ST_MinZ возвращают минимальную желаемую координату геометрии.
  • ST_MaxM, ST_MaxX, ST_MaxY и ST_MaxZ возвращают максимальную желаемую координату геометрии.
  • ST_SRID возвращает идентификатор пространственной привязки геометрии.
  • Get_release – это статическая выборочная функция, используемая внутренне для администрирования пространственного типа (т.е., для обновления и установки патчей).

Например, следующий запрос возвращает названия и площадь отдельных штатов США.

SELECT name, sde.st_area(geometry)
FROM us_states
ORDER BY name;

ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point и ST_Polygon являются подтипами (или подклассами) ST_Geometry. ST_Geometry и его подтипы используют общие атрибуты и функции. Определение конструктора для ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point и ST_Polygon одинаково. Имя конструктора совпадает с тем типом, который он создает.

Поскольку ST_Point – это ограниченный объект (значение одиночной точки), он также может быть создан, используя один из следующих методов.

Данный метод использует точки координат и SRID.

METHOD
 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?
 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 SRID                           NUMBER                  IN
SQL> INSERT INTO sample_pt VALUES (sde.ST_Point (10, 20, 1) );

Данный метод позволяет выбирать точки координат и значение высоты для каждой точки.

METHOD
 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?
 
 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 PT_Z                           NUMBER                  IN
 SRID                           NUMBER                  IN
SQL> INSERT INTO sample_pt VALUES (sde.ST_Point (10, 20, 5, 1) );

Данный последний метод для ST_Point дополнительно позволяет задать значение измерения создаваемого объекта точки.

METHOD
 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?
 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 PT_Z                           NUMBER                  IN
 MEASURE                        NUMBER                  IN
 SRID                           NUMBER                  IN
SQL> INSERT INTO sample_pt VALUES (sde.ST_Point (10, 20, 5, 401, 1) );

Схема метаданных

Тип ST_Geometry для Oracle и таблицы метаданных принадлежат схеме SDE. Определение схемы – это описание базовой таблицы для таблиц метаданных, используемых для задания и описания типа столбца/таблицы, пространственного индекса (индекса домена ST_Spatial_Index) и информации о пространственной привязке. Все определения типов и типов индексов доменов, пакеты и таблицы метаданных создаются в схеме sde.

Поскольку определения для ST_Geometry принадлежат пользователю sde, никогда не удаляйте пользователя sde из базы данных, если в базе данных существуют таблицы, содержащие столбцы ST_Geometry. Иначе эти таблицы станут недоступными.

Как упомянуто в инструкции Oracle Application Developer's Guide, когда пользователь удаляется из базы данных, одним из выполняемых выражений является DROP TYPE с опцией FORCE. Данное выражение удаляет все типы, принадлежавшие данному пользователю, чтобы пользователь мог быть удален из базы данных. DROP TYPE FORCE вызывает удаление типов, даже если они имели зависимые типы или связанные с ними таблицы. После этого связанные таблицы помечаются как некорректные, что делает данные в этих таблицах недоступными.

Более подробно:

Кроме того, для обработки метаданных ST_Geometry создаются следующие объекты базы данных:

  • Пользователь базы данных sde
  • Табличное пространство по умолчанию для пользователя sde
  • Функции ST_Geometry
  • Представления ST_Geometry
    • ALL_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOM_INDEX_V
  • Триггеры ST_Geometry
    • DB_EV_DROP_ST_METADATA
    • DB_EV_ALTER_ST_METADATA
    • DB_EV_RENAME_ST_METADATA
    • TG_ST_SPATIAL_REF_SRID
    • TG_ST_CREF_SYS
    • TG_GCOL_NAME
    • TG_ST_GEOMINDEX_NAME
  • Пакет SPX_UTIL и тело пакета
  • Оператор SDEXMLTOTEXT
  • Типы ST_Geometry
    • BLOB_ARRAY_TAB
    • INT_ARRAY_TAB
    • FLT_ARRAY_TAB
    • BND_ROWID_TAB
    • SP_GRID_INFO

      SP_Grid_Info используется как тип данных для поля GRID в таблице ST_Geometry_Index. Он содержит информацию об уровнях сеток пространственных индексов.

Создание классов пространственных объектов в Oracle с типом хранения ST_Geometry

В базах данных с установленным пространственным типом ST_Geometry при создании класса объектов вы выбираете ST_Geometry как тип хранения.

В базах геоданных тип хранения геометрии, используемый для класса объектов, определяется заданным значением параметра GEOMETRY_STORAGE в ключевом слове конфигурации, которое задается при создании класса объектов.

Задание ST_Geometry в качестве типа хранения по умолчанию для новых классов объектов базу геоданных

ST_Geometry – это тип хранения, используемый по умолчанию для классов объектов в новой базе геоданных на Oracle. Это означает, что параметру GEOMETRY_STORAGE в ключевом слове конфигурации DEFAULTS присваивается значение ST_GEOMETRY.

Если вы создали базу геоданных в версии ниже ArcGIS 9.3, собираетесь обновить ее и хотите, чтобы все новые классы объектов создавались с типом хранения ST_Geometry по умолчанию, то необходимо задать значение параметра GEOMETRY_STORAGE в ключевом слове DEFAULTS как ST_GEOMETRY. Инструкции см. в Изменение ключевых слов конфигурации.

Использование хранения ST_Geometry для некоторых классов объектов базы геоданных

Базы геоданных в Oracle поддерживают несколько разных типов хранения геометрии – все эти разные типы могут использоваться вместе в одной и той же базе данных. В то время, как тип хранения геометрии по умолчанию может быть только один, отдельные таблицы могут создаваться с применением различных типов хранения геометрии.

Если вы хотите, чтобы только некоторые из классов объектов использовали пространственный тип хранения ST_Geometry, вы можете выбрать соответствующее значение параметра DEFAULTS GEOMETRY_STORAGE и задать отдельное ключевое слово для типа хранения ST_GEOMETRY. Например, можно добавить ключевое слово конфигурации к вашей базе геоданных так:

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (
#               TABLESPACE <tablespace_name>
                ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"
UI_TEXT             "User Interface text description for ST_GEOMETRY"
COMMENT             "Any general comment for ST_GEOMETRY keyword"
END

После добавления ключевого слова его можно использовать при создании классов объектов, для которых вы хотите применить тип хранения ST_Geometry. Например, если у вас имеется небольшой поднабор данных, к которым требуется доступ через SQL, вы можете создать только этот поднабор классов объектов с использованием типа пространственных данных ST_Geometry для хранения геометрии.

Какие объекты базы данных создаются для классов объектов?

Если создаете класс объектов, использующий тип хранения ST_Geometry, при помощи ArcGIS, то создаются три объекта базы данных. Эти объекты и параметры конфигурации, которые используются для управления их типом хранения, перечислены в следующей таблице:

Объекты базы данныхПараметры хранения

Таблица со столбцом ST_Geometry

Параметр B_STORAGE определяет тип хранения для таблицы.

Параметр ST_GEOM_LOB_STORAGE определяет тип хранения для сегментов LOB в таблице.

Пространственный индекс

Параметр S_STORAGE определяет тип хранения пространственного индекса.

Индекс в столбце ObjectID

Параметр B_INDEX_ROWID определяет тип хранения для этого индекса.

Настройка типа хранения для сегмента LOB

Вам необходимо изменить параметр ST_GEOM_LOB_STORAGE в списке ключевого слова DEFAULTS. Однако после добавления в ключевое слово DEFAULTS имя сегмента LOB не должно быть включено в описание данного параметра. Если оно будет включено в описание, и вы не измените значение для имени, то при создании второго объекта произойдет ошибка, поскольку каждое имя сегмента LOB должно быть уникальным для данной схемы. Следующий пример параметра ST_GEOM_LOB_STORAGE не содержит имен объектов, что позволяет избегать противоречий в именах внутри одной схемы:

ST_GEOM_LOB_STORAGE  " STORE AS (
  ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

Примеры корректных значений для параметра ST_GEOM_LOB_STORAGE включают следующие:

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (TABLESPACE TERRA_NDX ENABLE STORAGE IN ROW CHUNK 8K
 RETENTION CACHE)"
UI_TEXT             "User Interface text description for ST_GEOMETRY"
COMMENT             "Any general comment for ST_GEOMETRY keyword"
END

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"
UI_TEXT             "User Interface text description for ST_GEOMETRY"
COMMENT             "Any general comment for ST_GEOMETRY keyword"
END

Как упоминалось ранее в этой главе, если заданы имена LOB и табличного пространства индекса LOB, необходимо изменить эти значения при создании каждого класса объектов. Если вы этого не сделаете, то при создании соответствующего класса объектов произойдет ошибка, поскольку каждое имя сегмента должно быть уникальным.