Тип данных ST_Geometry использует спецификацию пользовательских типов данных SQL 3 (UDT), что позволяет создавать столбцы, в которых могут храниться пространственные данные, например, улицы, земельные участки, достопримечательности. В соответствии со стандартами International Organization for Standards (ISO) и Open Geospatial Consortium, Inc., (OGC) он обеспечивает поддержку SQL-доступа к базам геоданных и базам данных Данный вид хранения расширяет возможности базы данных, обеспечивая хранение для объектов (точек, линий и полигонов), которые представляют графические объекты. Он был разработан для эффективного использования ресурсов баз данных, для совместимости с объектами баз данных, такими, как реплики и разделы, и для предоставления быстрого доступа к пространственным данным.
Esri внедрил тип ST_Geometry в Oracle, PostgreSQL и SQLite. Это тот тип данных ST_Geometry, о котором говорится в Справке ArcGIS.
ST_Geometry является абстрактным невызываемым суперклассом. Однако его подклассы могут быть вызваны (инициализированы). Вызванный тип данных – это тип данных, который может быть определен как столбец таблицы; в него могут быть добавлены значения этого типа.
Хотя вы можете определить столбец в виде типа 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.
Чтобы определить подкласс для ST_Geometry, вы можете использовать функцию ST_GeometryType. Функция ST_GeometryType получает ST_Geometry и возвращает установленный подкласс в форме текстовой строки. Чтобы определить, какое количество элементов основной геометрии содержится в однородном наборе, вы можете использовать функцию ST_NumGeometries, которая получает однородный набор и возвращает количество элементов основной геометрии, которые в нем содержатся.
Вызовы функции ST_Geometry
Функции ST_Geometry в Oracle и PostgreSQL реализованы в SQL. Это язык уровня базы данных. В Oracle это процедурный язык структурированных запросов (PL/SQL). В PostgreSQL – это PL/pgSQL.
Вы выполняете доступ к базе данных напрямую при доступе к столбцам ST_Geometry в Oracle или PostgreSQL с помощью функций SQL; следовательно эта база данных должна поддерживать доступ к библиотеке ST_Geometry. В Oracle база данных также запускает процесс extproc.
В SQLite функции ST_Geometry реализованы в C в библиотеке ST_Geometry. Вы должны обращаться к библиотеке ST_Geometry, чтобы использовать функции ST_Geometry.
Oracle
Функции реализованы на языке PL/SQL, который вызывает функции из внешних файлов совместно используемых библиотек, написанных на языке программирования C. Функции вызываются из PL/SQL по псевдониму, который представляет собой соответствие между названием библиотеки – в случае с ST_Geometry в Oracle это st_shapelib – и именем файла библиотеки. (Для получения более подробных сведений о команде Oracle CREATE LIBRARY см. документацию). Когда в первый раз вызывается функция пространственного типа, для которой требуется st_shapelib, база данных запрашивает listener о запуске процесса extproc для сеанса SQL. Процессу extproc сообщается расположение st_shapelib, имя функции, которую необходимо вызвать, и ее параметры. Процесс extproc загружает st_shapelib и вызывает функцию. Когда внешняя функция завершает работу, extproc возвращает результаты и продолжает работать, ожидая новых вызовов функции во время текущей сессии. Процесс extproc завершается по завершении сессии SQL.
Для этого необходимы следующие настройки:
- Базе данных необходимо знать расположение файла с библиотекой st_shapelib, чтобы отправить эту информацию в listener и далее – процессу extproc.
- Если file_spec для библиотеки st_shapelib в таблице user_libraries не соответствует физическому местоположению файла st_shapelib на сервере, операторы и функции ST_Geometry не будут работать. Поэтому необходимо с помощью команды CREATE LIBRARY обновить определение библиотеки в пользовательских библиотеках Oracle, чтобы в них указывался правильный путь к файлу, содержащему st_shapelib.
- База данных должна знать о сервисе, обрабатывающем запросы и передающем их процессу extproc. Эта настройка сохраняется в файле tnsnames.ora.
- Процессу extproc должно быть разрешено загружать файл, содержащий st_shapelib. Это осуществляется с помощью определения переменной среды EXTPROC_DLLS в файле extproc.ora.
- Пользователь extproc (обычно запускаемый из-под пользователя, который владеет ORACLE_HOME) должен иметь права на чтение для того расположения, где находятся файлы библиотеки, и права доступа на выполнение этих файлов.
PostgreSQL
Библиотека st_geometry должна находиться в директории установки PostgreSQL, чтобы позволить PostgreSQL получить доступ к функциям ST_Geometry. Вам необходимо скопировать файл st_geometry.dll (Windows) в папку lib в директории установки PostgreSQL. На сервере Linux: скопируйте файл st_geometry.so (Linux) в /usr/lib/pgsql директорию на сервере PostgreSQL. Оба этих файла находятся в папке DatabaseSupport в местоположении установки ArcMap или ArcGIS Server или загружаются из My Esri.
SQLite
Необходимо указать расположение и загрузить библиотеку ST_Geometry, чтобы SQLite-клиент мог получить доступ к функциям SQL. Вы можете указать местоположение библиотеки в клиентских системных переменных PATH (Windows) или LIBPATH (Linux) при загрузке библиотеки либо ввести путь при загрузке библиотеки ST_Geometry. Для получения инструкций см. раздел Загрузка библиотеки SQLite ST_Geometry.
Реализация типа данных ST_Geometry
ST_Geometry выполнен как задаваемый пользователем тип, который может использоваться в базах данных и геоданных в IBM Db2, IBM Informix, Oracle, PostgreSQL и SAP HANA. ST_Geometry также может использоваться в базах данных SQLite, Dameng и IBM Netezza.
Каждая СУБДподдерживает ST_Geometry следующим образом:
ST_Geometry по базе данных
СУБД | Описание |
---|---|
Dameng | Тип ST_Geometry включен вместе с базой Dameng, но вы должны инициализировать его. |
IBM Db2 | Поддержку ST_Geometry обеспечивает модуль Db2 Spatial Extender, поставляемый компанией IBM вместе с продуктом Db2. Тип ST_Geometry был совместно разработан Esri и IBM. Учтите, что существуют некоторые отличия в синтаксисе SQL между Db2 для z/OS и Db2. Различия в синтаксисе в зависимости от версии Db2 приведены в документации к Db2. |
IBM Informix | Модуль Informix Spatial DataBlade, поставляемый компанией IBM вместе с продуктом Informix, устанавливает тип ST_Geometry в базу данных и базу геоданных. ST_Geometry является единственной опцией для хранения геометрии объектов в базах геоданных Informix. Этот модуль является совместной разработкой Esri и IBM; он обеспечивает высокую производительность и поддержку SQL-доступа к пространственным данным в соответствии со стандартами OGC и ISO. |
IBM Netezza | Тип ST_Geometry в Netezza внедрен через Netezza Spatial Esri библиотеку (nzSpatial_Esri), которая является частью пакета программного оборудования IBM Netezza Analytics. |
Oracle | Тип данных ST_Geometry устанавливается, когда вы создаете базу геоданных в Oracle, и он является типом хранения геометрии по умолчанию для баз геоданных в Oracle. Если вам не нужна функциональность базы геоданных, можно установить тип ST_Geometry в базу данных Oracle с помощью инструмента геообработки Создать пространственный тип. |
PostgreSQL | Тип данных ST_Geometry устанавливается, когда вы создаете базу геоданных в PostgreSQL, и он является типом по умолчанию для хранения геометрии в базах геоданных в PostgreSQL. Если вам не нужна функциональность базы геоданных, можно установить тип ST_Geometry в базу данных PostgreSQL с помощью инструмента геообработки Создать пространственный тип. |
SAP HANA | Инсталляция хранилища данных SAP HANA по умолчанию включает тип ST_Geometry. |
SQLite | В SQLite тип данных ST_Geometry реализован с помощью библиотеки st_geometry и столбца geometryblob. SQL-функции ST_Geometry хранятся в библиотеке st_geometry, а не в базе данных. Для создания базы данных SQLite, содержащей тип ST_Geometry, можно применить инструмент геообработки Создать базу данных SQLite. Или можно использовать SQL-функцию CreateOGCTables для создания типа данных ST_Geometry в существующей базе данных SQLite. |