Что происходит, когда вы создаете класс пространственных объектов с типом хранения геометрии SDO_GEOMETRY?
Когда вы создаете класс пространственных объектов с типом хранения SDO_GEOMETRY, происходит следующее:
Столбец SDO_GEOMETRY добавляется к бизнес-таблице класса объектов.
ArcGIS создает класс объектов, добавляя столбец геометрии к определенной бизнес-таблице. Если параметр GEOMETRY_STORAGE установлен на SDO_GEOMETRY, ArcGIS добавляет столбец SDO_GEOMETRY к бизнес-таблице.
В следующем примере бизнес-таблица имеет свойства имени и численности. После добавления столбца геометрии, она также имеет столбец SDO_GEOMETRY с названием Borders (Границы). Если необходимо, добавляется и публикуется столбец уникального идентификатора объектов (в данном примере это OBJECTID).
Имя |
Тип данных |
Null? |
---|---|---|
NAME |
VARCHAR2(32)* |
|
POPULATION |
NUMBER(11) |
|
BORDERS |
MDSYS.SDO_GEOMETRY |
|
OBJECTID |
NUMBER(38) |
NOT NULL |

*NVARCHAR2(32) используется вместо VARCHAR2(32), если вы используете строки Unicode.
Столбец геометрии может быть добавлен к бизнес-таблице с использованием ArcCatalog, административной утилиты sdelayer, или ArcSDE C и Java API.
Для столбца SDO_GEOMETRY создается пространственный индекс.
Когда столбец SDO_GEOMETRY добавляется в бизнес-таблицу, пространственный индек для этого столбца геометрии уже обычно создан. По умолчанию, ArcGIS создает индекс R-tree для столбца SDO_GEOMETRY.
В качестве альтернативы, ArcGIS может создать класс объектов без пространственного индекса; однако, пространственные запросы не могут выполняться, пока пространственный индекс не создан. Функция SDO_FILTER в Oracle, используемая ArcGIS, требует наличия пространственного индекса.
Вы можете создать пространственный индекс несколькими способами—в ArcCatalog, с помощью административной утилиты sdelayer, используя Oracle Spatial Index Advisor, с помощью SQL, или программно, используя ArcSDE C и Java API.
ArcSDE автоматически удаляет и пересоздает пространственный индекс Oracle Spatial, созданный в ArcGIS, при каждом переключении режима класса объектов из LOAD_ONLY_IO в режим NORMAL_IO и обратно. Пространственные индексы, определенные с помощью приложения Oracle Spatial Index Advisor или созданные с использованием SQL, не удаляются при переключении режима класса объектов на LOAD_ONLY_IO в ArcGIS.
В вид метаданных Oracle Spatial добавляется запись.
Когда ArcGIS добавляет столбец SDO_GEOMETRY в бизнес-таблицу, при этом также добавляется необходимая запись метаданных Oracle Spatial в вид метаданных USER_SDO_GEOM_METADATA. Эти метаданные включают имя таблицы, имя столбца SDO_GEOMETRY, идентификатор пространственной привязки, и информацию о координатных измерениях.
Если использовались SQL или приложения третьих компаний для создания таблицы, пространственного столбца и их метаданных, и таблица затем была зарегистрирована в ArcSDE с использованием инструмента командной строки sdelayer, то ArcSDE не будет удалять метаданные при отмене регистрации таблицы в ArcSDE. Однако ArcSDE всегда будет удалять метаданные при удалении таблицы, таким же образом, как при использовании команды sdetable -o delete.
Координатное измерение задано.
Вы можете создать геометрию в ArcGIS как 2D (x,y), 2D с измерениями, 3D (x,y,z) или 3D с измерениями. При создании нового класса объектов или добавлении столбца SDO_GEOMETRY к существующей таблице, ArcGIS помещает информацию об измерении Oracle Spatial в столбец DIMINFO в виде метаданных.
- X-координата является первым измерением.
- Y-координата является вторым измерением.
- Z-координата является третьим измерением, если класс объектов определен, как имеющий высоты.
- M-координата является последним измерением (третьим или четвертым, в зависимости от наличия или отсутствия z-координаты), если класс объектов определен, как имеющий измерения.
SRID для каждого значения SDO_GEOMETRY устанавливается на основе привязки координат.
Oracle Spatial предоставляет предопределенные привязки координат в таблице MDSYS.CS_SRS. При использовании ArcGIS для создания нового класса объектов, чтобы задать определенный SRID для столбца SDO_GEOMETRY, выберите подходящее определение привязки координат Oracle Spatial, затем установите в классе объектов параметр хранения SDO_SRID DBTUNE на это значение.
Например:
#MY_SDO_KEYWORD GEOMETRY_STORAGE SDO_GEOMETRY SDO_SRID 8307 UI_TEXT "MY_SDO_KEYWORD" END
Если параметр хранения SDO_SRID не установлен, ArcGIS устанавливает SRID для каждого значения SDO_GEOMETRY на NULL, также как и SRID в соответствующей записи метаданных.
ArcGIS не требует заполненных SRID в Oracle Spatial; ArcGIS управляет информацией о привязке координат для каждого класса объектов в его таблице SPATIAL_REFERENCES, независимо от Oracle Spatial. Для получения дополнительной информации о поддерживаемых привязках координат, см. Oracle Spatial User's Guide and Reference.
Публикуется столбец SDO_GEOMETRY.
При сохранении геометрии в базе геоданных, ArcGIS заполняет значение SDO_GEOMETRY из объекта ArcSDE API с названием SE_SHAPE. Объект SE_SHAPE может содержать простую и сложную геометрию, включая высоты, измерения, данные CAD, аннотации, и патчи поверхности. Тип данных SDO_GEOMETRY поддерживает поднабор этих геометрических свойств. Поскольку нет отображения один-к-одному компонент SDO_GEOMETRY и объекта SE_SHAPE, ArcGIS следует набору правил при хранении данных в таблицах Oracle Spatial:
- Создайте 4-значный SDO_GTYPE основываясь на названии экземпляра геометрии.
- Установите SDO_SRID на NULL, если не указана ни одна привязка координат в Oracle Spatial в параметре DBTUNE.
- Запишите значения координат в соответствующей системе привязки координат.
- Запишите значения координат в порядке x, y, z, и m, определяя координаты высоты и измерения только если присутствует объект SE_SHAPE.
- Если координаты высоты и/или измерения существуют в исходном объекте SE_SHAPE, сохраните все координаты с координатами высоты и/или измерения.
- Установите координаты высоты и измерения на NaN ("not a number"), если выбранные координаты в геометрии содержат неопределенные значения высоты или измерения.
- Разрешите измерения для любого типа геометрии, не только линий. Первая и последняя координата не обязаны содержать значения измерений.
- Не запрещайте значениям измерений быть отсортированными по возрастанию или убыванию.
- Запишите круговые дуги в тип SDO_GEOMETRY, когда класс объектов регистрируется с маской объекта CAD (с); в противном случае, сконвертируйте кривые в уплотненные линии с прямыми ребрами.
- Сконвертируйте не круговые дуги (такие, как параметрические кривые или сплайны) в линии с прямыми ребрами. Если класс объектов зарегистрирован с маской объектов CAD (c), также сохраните представление кривых в SE_ANNO_CAD_DATA.
- Проверьте все объекты перед сохранением их в базу данных. Правила проверки описаны в Справке разработчика ArcSDE, которая поставляется вместе с комплектом разработчика ArcSDE Client Software Developer Kit (SDK).
- Используйте SDO_POINT для добавления односоставной точки x,y или x,y,z в объект SDO_GEOMETRY. Для других типов точечных классов объектов, добавляйте вершины точек в объект SDO_ORDINATE_ARRAY.

ArcGIS не поддерживает неоднородные (с разными типами) коллекции геометрий в объекте SDO_GEOMETRY, и ArcGIS не кодирует элементы SDO_ETYPE 0 в объекте SDO_GEOMETRY. Элементы SDO_ETYPE 0 являются специфическими для приложений.
Дополнительный столбец добавляется к бизнес-таблице, если сохраняются свойства CAD и аннотаций.
Тип SDO_GEOMETRY не может хранить все возможные типы геометрических элементов, которые хранение в ArcGIS должно поддерживать. Когда необходимо хранение этих элементов (что определяется по выбранным флагам типа геометрии при создании класса объектов), ArcGIS добавляет столбец с названием SE_ANNO_CAD_DATA к бизнес-таблице. Используя пример класса объектов из первой секции данного раздела, бизнес-таблица будет содержать следующее:
Имя |
Тип данных |
Null? |
---|---|---|
NAME |
VARCHAR2(32)* |
|
POPULATION |
NUMBER(11) |
|
BORDERS |
MDSYS.SDO_GEOMETRY |
|
SE_ANNO_CAD_DATA |
BLOB |
|
OBJECTID |
NUMBER(38) |
NOT NULL |

*NVARCHAR2(32) используется вместо VARCHAR2(32), если вы используете строки Unicode.
Когда ArcGIS определяет, что источником данных являются данные CAD, ArcGIS пишет простое геометрическое представление данных CAD в значение SDO_GEOMETRY и затем записывает неизмененные данные CAD в значение SE_ANNO_CAD_DATA. Если источник данных не имеет данных CAD, ArcGIS устанавливает значение SE_ANNO_CAD_DATA на NULL. Свойство SE_ANNO_CAD_DATA содержит данные из нескольких компонентов ArcGIS:
- Данные AutoCAD или MicroStation из клиента ArcSDE CAD Client
- Параметрические объекты, такие, как кубические сплайны и параметрические кривые из ArcMap
- Патчи поверхности из Дополнительный модуль ArcGIS Spatial Analyst
Пространственные запросы к классу объектов выполняются с использованием функций фильтра Oracle Spatial.
ArcGIS использует функцию SDO_FILTER в Oracle Spatial, чтобы выполнять первичный пространственный запрос. ArcGIS выполняет вторичный фильтр SDO_GEOMETRY на основе пространственного отношения, запрашиваемого приложением.
Приложения могут также включать функции первичного и вторичного фильтров Oracle Spatial в выражениях SQL WHERE clause, поддерживаемых в ArcGIS. Используя пространственные фильтры в выражении WHERE clause, приложения могут распространять пространственный запрос на сервер базы данных, сервер приложений ArcSDE, и на само приложение.