ArcGIS Desktop

  • Документация
  • Поддержка

  • My Profile
  • Справка
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Картографическая платформа вашей организации

ArcGIS Desktop

Полноценная профессиональная ГИС

ArcGIS Enterprise

ГИС предприятия

ArcGIS for Developers

Инструменты для встраивания приложений с местоположениями

ArcGIS Solutions

Бесплатные шаблоны карт и приложений для отрасли

ArcGIS Marketplace

Получение приложения и данных для вашей организации.

  • Документация
  • Поддержка
Esri
  • Войти
user
  • Мой профиль
  • Выход

ArcMap

  • На главную
  • Начало работы
  • Карта
  • Анализ
  • Управление данными
  • Инструменты
  • Дополнительные модули

Тип хранения ST_Geometry

  • Подклассы
  • Вызовы функции ST_Geometry
  • Реализация типа данных ST_Geometry

Тип данных ST_Geometry использует спецификацию пользовательских типов данных SQL 3 (UDT), что позволяет создавать столбцы, в которых могут храниться пространственные данные, например, улицы, земельные участки, достопримечательности. В соответствии со стандартами International Organization for Standards (ISO) и Open Geospatial Consortium, Inc., (OGC) он обеспечивает поддержку SQL-доступа к базам геоданных и базам данных Данный вид хранения расширяет возможности базы данных, обеспечивая хранение для объектов (точек, линий и полигонов), которые представляют графические объекты. Он был разработан для эффективного использования ресурсов баз данных, для совместимости с объектами баз данных, такими, как реплики и разделы, и для предоставления быстрого доступа к пространственным данным.

Esri внедряет определенный Esri тип ST_Geometry в Oracle, PostgreSQL и SQLite. Это тот тип данных ST_Geometry, о котором говорится в Справке ArcGIS.

ST_Geometry является абстрактным невызываемым суперклассом. Однако его подклассы могут быть вызваны (инициализированы). Вызванный тип данных – это тип данных, который может быть определен как столбец таблицы; в него могут быть добавлены значения этого типа.

Хотя вы можете определить столбец в виде типа ST_Geometry, вы не добавляете значения 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

  • Геометрия с размерностью 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.

Чтобы определить подкласс для 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.
    Примечание:

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

  • База данных должна знать о сервисе, обрабатывающем запросы и передающем их процессу 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. ST_Geometry также может использоваться в базах данных SQLite.

В таблице ниже описана поддержка типа данных ST_Geometry различными СУБД:

СУБД и тип данных ST_Geometry

СУБДОписание

Oracle

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

IBM DB2

Поддержку ST_Geometry обеспечивает модуль DB2 Spatial Extender, поставляемый компанией IBM вместе с продуктом DB2. ST_Geometry является единственной опцией для хранения геометрии объектов в базах геоданных DB2. Она разработана совместно Esri и IBM.

Учтите, что существуют некоторые отличия в синтаксисе SQL между DB2 для z/OS и DB2 для Windows/Linux/UNIX. Различия в синтаксисе в зависимости от версии СУБД приведены в документации к DB2.

IBM Informix

Модуль Informix Spatial DataBlade, поставляемый компанией IBM вместе с продуктом Informix, устанавливает тип ST_Geometry в базу данных и базу геоданных. ST_Geometry является единственной опцией для хранения геометрии объектов в базах геоданных Informix. Этот модуль является совместной разработкой Esri и IBM; он обеспечивает высокую производительность и поддержку SQL-доступа к пространственным данным в соответствии со стандартами OGC и ISO.

PostgreSQL

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

SQLite

В SQLite тип данных ST_Geometry реализован с помощью библиотеки st_geometry и столбца geometryblob. SQL-функции ST_Geometry хранятся в библиотеке st_geometry, а не в базе данных.

Для создания базы данных SQLite, содержащей тип ST_Geometry, можно применить инструмент геообработки Создать базу данных SQLite или функцию ArcPy CreateSQLiteDatabase. Или можно использовать SQL-функцию CreateOGCTables для создания типа данных ST_Geometry в существующей базе данных SQLite.

Связанные разделы

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

ArcGIS Desktop

  • На главную
  • Документация
  • Поддержка

ArcGIS Platform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Об Esri

  • О нас
  • Карьера
  • Блог Esri
  • Конференция пользователей
  • Саммит разработчиков
Esri
Расскажите нам, что вы думаете.
Copyright © 2018 Esri. | Конфиденциальность | Правовая информация