Хранение ST_Geometry в Oracle
Тип хранения Esri ST_Geometry доступен для баз геоданных в Oracle и для баз данных Oracle, что дает возможность использовать ISO- и OGC-совместимый SQL-доступ к базе геоданных. Данный вид хранения расширяет возможности базы данных Oracle, обеспечивая хранение для объектов (точек, линий и полигонов), которые представляют графические объекты. Оно было разработано для эффективного использования ресурсов баз данных Oracle; для совместимости с объектами баз данных Oracle, такими, как реплики и разделы; и для предоставления быстрого доступа к пространственным данным. Это позволяет интегрировать пространственные данные с другими типами бизнес-данных, поэтому многопользовательская база данных приобретает преимущества использования географических компонент при выполнении анализа и работы с другими продуктами. Хранение пространственных данных вместе с другими бизнес-объектами также облегчает многопользовательский доступ, управление и обеспечение безопасности данных, поскольку количество систем хранения данных уменьшается.
С версиями ArcGIS 9.3 и выше, новые базы геоданных для Oracle используют для хранения геометрии пространственный тип Esri ST_Geometry по умолчанию. При этом используется спецификация пользовательских типов данных SQL 3 (UDT), что позволяет создавать столбцы, в которых могут храниться пространственные данные, например улицы, земельные участки, достопримечательности. Для получения дополнительной информации о пространственном типе ST_Geometry, см. главу "Как ST_Geometry хранит пространственные данные" данного раздела.
Для создания базы геоданных и использования типа 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, можно использовать другие приложения, чтобы получать доступ к данным, созданным в базе геоданных ArcSDE для Oracle.
Тип ST_Geometry не поддерживается с транзакциями XA в Oracle.
Чтобы использовать SQL для доступа к базам геоданных в Oracle с данным пространственным типом, необходимо настроить Oracle Listener. Подробнее см. Настройка Oracle listener для использования SQL.
С версиями ArcGIS 9.3 и выше, для новых баз геоданных на Oracle необходимо, чтобы все функции и операторы ST уточнялись именем схемы sde. Например, при выполнении запроса, использующего оператор ST_Union, оператор должен вводиться как "sde.ST_Union". Для баз геоданных, обновленных из ArcSDE 9.2 или более ранних версий, это не требуется.
Чтобы получить доступ к пространственным объектам с помощью SQL, библиотеки ST_Geometry должны быть установлены на тот же сервер, что и система управлением баз данных Oracle. Если вы планируете запускать СУБД Oracle на сервере отдельно от ArcSDE, убедитесь, что операционная система вашего сервера Oracle поддерживает также ArcSDE, и что библиотеки 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 имеет метод constructor и функции. Метод constructor возвращает новый экземпляр (объект) типа данных и задает значения его атрибутов.
Имя constructor совпадает с типом (ST_Geometry). Когда вы присваиваете объекту тип данных ST_Geometry, вы запускаете метод constructor. Например:
CREATE TABLE hazardous_sites (name varchar2(128),
location st_geometry);
Ниже приводится список доступных функций ST_Geometry, которые используют в качестве входного параметра один ST_Geometry и возвращают запрашиваемое значение свойства в виде числа.
- Компонентная функция ST_Area возвращает площадь геометрии.
- ST_Len возвращает длину геометрии.
- 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, 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 одинаково. Имя constructor совпадает с тем типом, который он создает.
Поскольку 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 (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 (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 (ST_Point (10, 20, 5, 401, 1) );
SP_GRID_INFO
SP_Grid_Info используется как тип данных для поля GRID в таблице ST_Geometry_Index. Он содержит информацию об уровнях сеток пространственных индексов.
SQL> desc sp_grid_info
Name Null? Type
GRID1 NUMBER
GRID2 NUMBER
GRID3 NUMBER
Схема метаданных
Тип ST_Geometry для Oracle и таблицы метаданных принадлежат схеме SDE. Определение схемы – это описание базовой таблицы для таблиц метаданных, используемых для задания и описания типа столбца/таблицы, пространственного индекса (индекса домена ST_Spatial_Index domain) и информации о пространственной привязке. Все определения типов и типов индексов доменов, пакеты и таблицы метаданных создаются в схеме SDE.
Поскольку определения для ST_Geometry принадлежат пользователю SDE, никогда не удаляйте пользователя SDE из базы данных, если в базе данных существуют таблицы, содержащие столбцы ST_Geometry. Иначе эти таблицы станут недоступными.
Как упомянуто в инструкции разработчика Oracle's Application Developers Guide, когда пользователь удаляется из базы данных, одним из выполняемых выражений является DROP TYPE с опцией FORCE. Данное выражение удаляет все типы, принадлежавшие данному пользователю, чтобы пользователь мог быть удален из базы данных. DROP TYPE FORCE вызывает удаление типов, даже если они имели зависимые типы или связанные с ними таблицы. После этого связанные таблицы помечаются как некорректные, что делает данные в этих таблицах недоступными.
Описание следующих таблиц метаданных ST_Geometry приводится в разделе Системные таблицы базы геоданных, хранящиеся в Oracle:
- ST_COORDINATE_SYSTEMS
- ST_GEOMETRY_COLUMNS
- ST_GEOMETRY_INDEX
- ST_SPATIAL_REFERENCES
Создание классов пространственных объектов в Oracle с типом хранения ST_Geometry
Тип хранения геометрии, используемый для класса объектов, определяется заданным значением параметра GEOMETRY_STORAGE в ключевом слове конфигурации, которое задается при создании класса объектов.
Задание ST_Geometry в качестве типа хранения по умолчанию для нового класса объектов
Начиная с версии ArcGIS 9.3, ST_Geometry является типом хранения по умолчанию для классов объектов в базе геоданных в Oracle. Это означает, что параметру GEOMETRY_STORAGE в ключевом слове DEFAULTS в таблице DBTUNE присваивается значение ST_GEOMETRY.
Если вы хотите использовать тип хранения ST_GEOMETRY для большинства классов объектов, оставьте параметр GEOMETRY_STORAGE в ключевом слове DEFAULTS со значением ST_GEOMETRY.
Если вы изначально создали базу геоданных в версии ниже ArcGIS 9.3, и хотите, чтобы все новые классы объектов создавались с типом хранения ST_Geometry по умолчанию, то необходимо изменить значение параметра GEOMETRY_STORAGE ключевого слова DEFAULTS в таблице DBTUNE. Установите параметр GEOMETRY_STORAGE на ST_GEOMETRY.
Используйте административную команду sdedbtune для изменения настроек DBTUNE. Инструкции по использованию команды sdedbtune можно найти в Справочнике по командам администрирования ArcSDE (ArcSDE Administration Command Reference), поставляемом вместе с сервером приложений ArcSDE for Oracle, и в разделе Изменение содержания таблицы DBTUNE после ее создания.
Использование хранения ST_Geometry для некоторых классов объектов
ArcSDE for Oracle поддерживает несколько различных схем хранения геометрии – эти различные схемы могут использоваться одновременно в одной базе данных. Схемой по умолчанию может являться только одна схема геометрии, но отдельные таблицы могут быть созданы с использованием различных схем геометрии.
Если вы хотите, чтобы только некоторые из классов объектов имели определенный пространственный тип хранения, то вы можете выбрать соответствующее значение параметра DEFAULTS GEOMETRY_STORAGE и задать ключевое слово ST_GEOMETRY при создании этих классов объектов. Тогда эти классы объектов будут созданы со столбцом ST_Geometry. В файле dbtune ключевое слово 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, при помощи ArcGIS, то создаются три объекта базы данных. Эти объекты и параметры DBTUNE, которые используются для управления их типом хранения, перечислены в следующей таблице:
Объекты базы данных | Параметры хранения |
---|---|
Таблица со столбцом ST_Geometry | Параметр B_STORAGE определяет тип хранения для таблицы. Параметр ST_GEOM_LOB_STORAGE определяет тип хранения для сегментов LOB в таблице. |
Пространственный индекс | Параметр S_STORAGE определяет тип хранения пространственного индекса. |
Индекс в столбце ObjectID | Параметр B_INDEX_ROWID определяет тип хранения для этого индекса. |
Дополнительную информацию о параметрах конфигурации см. Параметры конфигурации DBTUNE в Oracle и в следующей главе о хранении LOB.
Настройка типа хранения для сегмента 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, необходимо изменить эти значения при создании каждого класса объектов. Если вы этого не сделаете, то при создании соответствующего класса объектов произойдет ошибка, поскольку каждое имя сегмента должно быть уникальным.