E-mail:
Пароль:
Забыли пароль?

Краткий обзор стандартов поддержки ГИС в реляционных СУБД и вариантов их реализации

«Технология клиент-cервер», № 3, 2005 г.

Борисенков Д.В. (ЗАО НПП “РЕЛЭКС”, Воронеж) д.т.н., проф. Харин В.Н. (ВГЛТА, Воронеж)

Введение

Эволюция развития взаимодействия геоинформационных систем (ГИС) и реляционных систем управления базами данных (РСУБД) прошла несколько этапов. На раннем этапе ГИС обходились без помощи СУБД – они использовали свои собственные форматы файлов для хранения данных и свои собственные интерфейсы для доступа к этим данным. В начале 90-х годов крупнейшие разработчики ГИС, такие как IBM, ESRI и MapInfo, перешли к созданию ГИС-приложений, в которых реляционные СУБД использовались как хранилище данных. Это дало их продуктам такие типичные для РСУБД преимущества, как одновременный доступ многих пользователей, стандартные средства сохранения и восстановления данных и возможность работы в режиме клиент-сервер. РСУБД обеспечили представление пространственных данных в типах SQL и пространственное индексирование этих данных.

Однако доступ ГИС-приложений к данным все еще происходил через собственные интерфейсы этих приложений. Очевидной стала необходимость создания универсальных и общедоступных решений для хранения ГИС-данных в реляционных СУБД, которые обеспечили бы совместимость различных приложений по форматам данных и методам доступа к ним, а также задействовали бы для обработки этих данных всю мощь механизмов РСУБД.

Стандарт “Open GIS® Simple Features Specification For SQL”

Организация Open GIS Consortium (OGC) была основана в 1994 году с целью “обеспечить спецификации пространственного интерфейса, доступные для всеобщего использования”. Стандарт “Open GIS® Simple Features Specification For SQL” (далее – стандарт OGC), описывающий хранение, выборку, поиск и обновление пространственной информации реляционными СУБД, был создан OGC с участием крупнейших разработчиков реляционных СУБД – IBM, Informix и Oracle. В настоящее время действует версия 1.1 этого стандарта, утвержденная в 1999 году.

Предметом рассмотрения стандарта OGC являются геоданные – информация о некоторых объектах, которые имеют как пространственные (геометрические), так и прочие атрибуты. Представление всех геометрических атрибутов, рассматриваемых в стандарте, основано на двумерной геометрии с соединением вершин отрезками прямых линий.

В предлагаемой стандартом OGC модели данных каждому объекту геоданных (geospatial feature) соответствует одна запись в реляционной таблице для этого типа объектов (объектной таблице - feature table). Негеометрические атрибуты объекта хранятся в столбцах этой таблицы, имеющих стандартные типы данных SQL 92. Порядок хранения геометрических атрибутов зависит от варианта реализации стандарта.

Варианты реализации стандарта OGC

В стандарте OGC предлагаются два варианта его реализации – SQL 92 и SQL 92 with Geometry Types.

В SQL 92 (чисто реляционном варианте) каждый столбец для геометрического атрибута является внешним ключом, ссылающимся на отдельную таблицу, хранящую геометрические значения (геометрическую таблицу). Каждое геометрическое значение хранится в виде одной или нескольких записей этой геометрической таблицы. Данные в геометрической таблице могут храниться либо с использованием обычных числовых типов SQL, либо с использованием двоичных типов SQL – стандарт приводит схемы реализации для обоих случаев. Однако для варианта SQL 92 стандарт OGC не описывает набор функций над данными геометрических типов.

В SQL 92 with Geometry Types (реляционном либо объектно-реляционном варианте) к множеству типов SQL 92 добавляется набор геометрических типов. Стандарт описывает эти типы и набор функций над значениями этих типов, но не касается того, каким образом геометрические типы добавляются к множеству типов SQL 92.

В большинстве реляционных СУБД реализован второй вариант поддержки стандарта OGC - SQL 92 with Geometry Types. Вариант SQL 92 был реализован в ранних версиях Oracle, но впоследствии корпорация Oracle перешла на объектно-реляционный вариант.

Стандарт ISO/IEC SQL/MM Part3: Spatial

ISO (International Organization for Standardization) выпустила несколько международно признанных стандартов языка SQL (SQL89, SQL92, SQL99, SQL2003). Стандарт ISO/IEC SQL - Multimedia and Application Packages, вторая редакция которого вышла в 2002 году, описывает поддержку мультимедийных данных в реляционных СУБД. Он состоит из нескольких частей; третья часть посвящена работе с пространственными данными. Этот стандарт частично пересекается со стандартом OGC; в то же время стандарт ISO является официальным международным стандартом и содержит значительно более формальное и подробное изложение материала.

Стандарт ISO также основан преимущественно на двумерной геометрии, однако он позволяет использовать дополнительные координаты для представления трехмерной информации. В качестве соединений вершин пространственных объектов этот стандарт допускает не только отрезки прямых линий, но и дуги окружностей.

Содержание стандартов

Оба стандарта включают рассмотрение следующих вопросов:

  • иерархия геометрических типов
  • операции над объектами геометрических типов
  • представление метаданных

В последующих пунктах приведено краткое описание содержания стандартов OGC и ISO, при этом особо отмечены различия между двумя стандартами, а там, где различия не оговариваются, содержание обоих стандартов совпадает. В стандарте ISO имена всех классов, функций и представлений для описания метаданных имеют префикс ST_, который обычно расшифровывается как Spatial Type. В случае, когда имя для стандарта ISO отличается от соответствующего имени для стандарта OGC только префиксом ST_, не будем указывать его.

Реализация поддержки пространственных данных в СУБД

Большинство распространенных в настоящее время реляционных СУБД в той или иной мере поддерживают указанные стандарты. В данном обзоре будут упомянуты следующие СУБД:

  • Oracle с расширением Oracle Spatial;
  • IBM DB2 с расширением Spatial Extender;
  • PostgreSQL с расширением PostGIS;
  • MySQL;
  • ЛИНТЕР.

Там, где необходимо, будут указаны конкретные версии СУБД, в которых реализованы те или иные средства поддержки пространственных данных. В частности, проверка работы средств поддержки GIS выполнялась на версиях PostgreSQL 8.0.3, MySQL 5.0.0 и ЛИНТЕР 6.0.10.

Иерархия геометрических объектов

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

Инстанциируемые подклассы класса Geometry описывают множества 0-мерных, 1-мерных и 2-мерных геометрических объектов в двумерном координатном пространстве (R 2). Все допустимые объекты этих классов являются топологически замкнутыми (то есть включают собственную границу).

Класс Geometry имеет следующие подклассы:

  • Point – простые 0-мерные объекты;
  • Curve – простые 1-мерные объекты;
  • Surface – простые 2-мерные объекты;
  • GeometryCollection (ST_GeomCollection) – составные объекты.

Класс GeometryCollection в свою очередь имеет следующие подклассы:

  • MultiPoint – совокупность 0-мерных объектов;
  • MultiCurve – совокупность 1-мерных объектов;
  • MultiSurface – совокупность 2-мерных объектов.

Класс GeometryCollection является инстанциируемым, то есть могут существовать объекты, принадлежащие ему и не принадлежащие ни одному из его подклассов (например, объединение отрезка и точки, не принадлежащей отрезку).

Класс Point (ST_Point) описывает одиночный 0-мерный геометрический объект (точку). Для описания совокупности точек (не обязательно различных) используется класс MultiPoint. Оба этих класса – инстанциируемые.

Класс Curve (кривая) является неинстанциируемым. Кривая задается множеством точек (вершин), тип соединения между точками определяется подклассом класса Curve, к которому принадлежит объект. Подкласс LineString описывает элементарный одномерный геометрический объект – ломаную, звенья которой являются отрезками прямых линий. В стандарте OGC этот класс имеет еще два подкласса: Line (ломаная из одного звена, то есть отрезок) и LinearRing (замкнутая ломаная без самопересечений). В стандарте ISO класс ST_Curve имеет еще два инстанциируемых подкласса – ST_CircularString (ломаная, звенья которой являются дугами окружностей) и ST_CompoundCurve (ломаная, звенья которой могут быть как отрезками прямых, так и дугами окружностей).

У класса Curve есть подкласс LineString, который описывает элементарный одномерный геометрический объект – ломаную, звенья которой являются отрезками прямых линий. В стандарте OGC этот класс имеет еще 2 подкласса: Line (ломаная из одного звена, то есть отрезок) и LinearRing (замкнутая ломаная без самопересечений). В стандарте ISO класс ST_Curve имеет еще два инстанциируемых подкласса – ST _ CircularString (ломаная, звенья которой являются дугами окружностей) и ST_CompoundCurve (ломаная, звенья которой могут быть как отрезками прямых, так и дугами окружностей). Для объектов этих классов звенья ломаной, являющиеся дугами окружностей, задаются тремя точками – начальной, конечной и промежуточной.

У класса MultiCurve существует единственный инстанциируемый класс MultiLineString – совокупность объектов класса LineString. Ограничений на взаимное расположение ломаных, составляющих элемент этого класса, не налагается. Заметим, что стандарт ISO не содержит описаний составных типов, соответствующих типам ST_CircularString и ST_CompoundCurve; однако в этом стандарте класс ST_MultiCurve является инстанциируемым, в отличие от класса MultiCurve стандарта OGC. Объект класса ST_MultiCurve может включать объекты классов ST_LineString, ST_CircularString и ST_CompoundCurve.

Класс Surface (фигура) является неинстанциируемым. Фигура задается границей: границей фигуры является либо замкнутая кривая без самопересечений, либо множество таких кривых, если фигура имеет “дыры”. Кривые, составляющие границу фигуры, не должны пересекаться и могут касаться друг друга лишь в одной точке (в противном случае фигура “распалась” бы на составные части). Подкласс Polygon описывает класс многоугольников, границы которых являются замкнутыми ломаными. Стандарт ISO описывает также класс объектов ST_CurvePolygon, элементы границы которого должны быть объектами класса ST_CompoundCurve.

У класса MultiSurface существует единственный инстанциируемый подкласс MultiPolygon – совокупность объектов типа Polygon. На взаимное расположение многоугольников, составляющих элемент этого класса, налагаются ограничения – их границы не должны пересекаться и могут касаться друг друга лишь в конечном числе точек. Стандарт ISO не содержит описания составного типа, соответствующего типу ST_CurvePolygon; однако в этом стандарте класс ST_MultiSurface является инстанциируемым, в отличие от класса MultiSurface стандарта OGC. Объект класса ST_MultiSurface может включать объекты классов ST_Polygon и ST_CurvePolygon.

Заметим, что пустое множество точек (рассматриваемое как геометрический объект размерности -1) не представлено в иерархии отдельным классом. В то же время при вычислении функции, результат которой является геометрическим объектом, в ответе часто получается именно пустое множество точек (например, пересечение двух непересекающихся объектов). Стандарты позволяют любому инстанциируемому классу принимать значение пустого множества точек, и пустое множество точек может быть явно или неявно преобразовано к любому инстанциируемому геометрическому типу.

Типы SQL для геометрических объектов

Некоторые СУБД (Oracle, PostgreSQL) используют для представления иерархии типов стандартный механизм определения пользовательских типов (UDT), который является объектным расширением реляционной модели данных в SQL 92. Другие, чисто реляционные СУБД (MySQL, ЛИНТЕР) добавляют геометрические типы полей в множество стандартных типов.

Имена типов в PostgreSQL, MySQL и ЛИНТЕР соответствуют стандарту OGC, в DB 2 – стандарту ISO. Oracle Spatial использует для хранения геометрических данных единый тип столбца MDSYS. SDO_GEOMETRY.

В некоторых СУБД также реализованы специальные упрощенные типы данных для представления таких фигур, как прямоугольники со сторонами, параллельными осям координат, и круги (CIRCLE, RECTANGLE/BOX 3 D и т.п.).

Операции над объектами

Все операции над геометрическими объектами делятся на следующие основные категории:

  • получение геометрических объектов из их внешнего представления или преобразование их во внешнее представление;
  • получение характеристик геометрического объекта (качественных или количественных);
  • получение информации об относительном расположении двух геометрических объектов;
  • получение новых геометрических объектов из объектов-операндов.

Иногда та или иная операция может быть отнесена к различным категориям, например, функция ST_Boundary возвращает границу объекта, которая является характеристикой этого объекта, и в то же время служит для получения нового объекта из объекта-операнда.

В стандарте OGC для операций над геометрическими объектами используется синтаксис функций, например Intersection (g1, g2). В стандарте ISO для тех же целей используется синтаксис методов, например g1. ST_Intersection (g2).

Текстовое представление геометрических объектов

Формат текстового представления геометрических объектов - WKT (Well - known Text) служит и как входной формат для создания новых геометрических объектов, и как выходной формат для получения описания существующих объектов или результатов операций.

Примеры представления геометрических объектов в формате WKT :

  • POINT (10 20) – точка с координатами (X =10, Y =20)
  • POLYGON ((10 10, 10 20, 20 20, 10 10)) – треугольник с координатами вершин (X =10, Y =10), (X =10, Y =20) и (X =20, Y =20)
  • GEOMETRYCOLLECTION(POINT(10 10), LINESTRING(10 20, 20,10)) –

совокупность двух объектов – точки (X =10, Y =10) и отрезка между точками (X =10, Y =20) и (X =20, Y =10)

Описание формата WKT в стандарте ISO содержит:

  • представление объектов, отсутствующих в стандарте OGC (CIRCULARSTRING, COMPOUNDCURVE, CURVEPOLYGON);
  • представление типов объектов, описанных в стандарте OGC как неинстанциируемые (MULTICURVE, MULTISURFACE) - заданный таким образом объект может быть преобразован к подтипу указанного типа (MULTILINESTRING в первом случае, MULTIPOLYGON во втором);
  • возможность представления дополнительных координат Z и M и объектов с этими координатами.

Для преобразования геометрического объекта в его текстовое представление служит функция AsText. Для получения геометрического объекта из его текстового представления и значения SRID служит функция GeomFromText. Функции PointFromText, LineFromText, PolyFromText и т.п. наряду с получением геометрического объекта из его текстового представления осуществляют проверку полученного геометрического объекта на принадлежность определенному типу.

Стандарт ISO декларирует тип CLOB (Character Large Object) как тип аргумента или результата для функций, имеющих аргумент или возвращающих результат в формате WKT.

Расширение стандарта WKT (EWKT), используемое в PostGIS, сходно с описанием WKT в стандарте ISO.

Двоичное представление геометрических объектов

Формат двоичного представления геометрических объектов – WKB (Well - known Binary) служит для обмена информацией между СУБД и приложениями. Он определяет набор кодов типов геометрических объектов и набор структур для хранения информации об этих объектах.

Общими для всех структур описания геометрических объектов являются следующие поля: флаг порядка байт в формате хранения и код типа объекта. Признак хранения всех числовых полей в формате LSBF (младший байт первый) или MSBF (старший байт первый) представляется однобайтовым флагом (0/1). Поле такого признака для сложных объектов (MultiPoint, MultiLineString, MultiPolygon, GeometryCollection и т.д) имеет не только представление объекта в целом, но и каждое представление простого объекта, входящего в состав сложного объекта. Поле кода типа объекта служит для выбора структуры. Все координаты точек в WKB-формате представляются вещественными числами двойной точности (double). Все величины, выражающие количества элементов, входящих в состав того или иного объекта (число точек в ломаной, число ломаных в мультиломаной и т.п.) представляются 32-битными беззнаковыми целыми числами (uint 32).

Примеры структур формата WKB :

Point /* Точка как элемент описания геометрического объекта */

{
double x ;
double y ;
};

WKBPoint /*Структура описания точки как геометрического объекта */

{
byte byteOrder; /* Флаг LSBF/MSBF */
uint 32 wkbType ; /* Код типа объекта (1 для Point) */
Point point ;
};

WKBMultiPoint /* Структура описания множества точек как геом. объекта */

{
byte byteOrder; /* Флаг LSBF/MSBF */
uint32 wkbType; /* Код типа объекта (4 для MultiPoint) */
uint 32 num _ wkbPoints ; /* Число точек в множестве */
WKBPoint wkbPoints [ num _ wkbPoints ]; /* Массив описаний точек */
};

Описание формата WKB в стандарте ISO содержит:

  • представление объектов, отсутствующих в стандарте OGC (CIRCULARSTRING, COMPOUNDCURVE, CURVEPOLYGON);
  • представление типов объектов, описанных в стандарте OGC как неинстанциируемые (MULTICURVE, MULTISURFACE) - заданный таким образом объект может быть преобразован к подтипу указанного типа (MULTILINESTRING в первом случае, MULTIPOLYGON во втором);
  • возможность представления объектов, имеющих дополнительные координат Z и/или M.

Для преобразования объекта в его двоичное представление служит функция AsBinary. Для получения геометрического объекта из его двоичного представления и значения SRID служит функция GeomFromWKB. Функции PointFromWKB, LineFromWKB, PolyFromWKB и т.п. наряду с получением геометрического объекта из его двоичного представления осуществляют проверку полученного геометрического объекта на принадлежность определенному типу.

Стандарт ISO декларирует тип BLOB (Binary Large Object) как тип аргумента или результата для функций, имеющих аргумент или возвращающих результат в формате WKB.

Расширение стандарта WKB (EWKB), используемое в PostGIS, сходно с описанием WKT в стандарте ISO.

Характеристики геометрических объектов

Все геометрические объекты имеют некоторые характеристики. Есть характеристики, общие для всех классов объектов, например, размерность (функция ST_Dimension). Другие характеристики имеют смысл только для некоторых классов объектов, например, площадь (функция ST_Area) может быть вычислена для двумерных геометрических объектов.

Определение относительного расположения геометрических объектов

Определение взаимного расположения геометрических объектов основано на модели DE -9 IM (пространственно-расширенной матрицы девяти пересечений) Эгенхофера. Каждый геометрический объект a делит двумерное пространство R2 на три непересекающиеся области – внутреннюю область объекта I (a), границу объекта B (a) и внешнюю область E (a). Объединением этих трех областей является R2. Если у нас есть два геометрических объекта a и b, то для определения их относительного расположения необходимо построить матрицу 3 x 3, указывающую, какую размерность имеет пересечение соостветствующих областей этих объектов (пустому множеству точек соответствует размерность -1):


I(b)

B(b)

E(b)

I(a)

dim(I(a) ? I(b))

dim(I(a) ? B(b))

dim(I(a) ? E(b))

B(a)

dim(B(a) ? I(b))

dim(B(a) ? B(b))

dim(B(a) ? E(b))

E(a)

dim(E(a) ? I(b))

dim(E(a) ? B(b))

dim(E(a) ? E(b))

Функции, определяющие относительное расположение геометрических объектов, могут налагать следующие ограничения на элементы p этой матрицы:

p = T – пересечение областей не пусто (размерность 0, 1 или 2);

p = F – пересечение областей пусто (размерность -1);

p = 0 – пересечение областей имеет размерность 0 (точка или множество отдельных точек, не может включать кривые или фигуры);

p = 1 – пересечение областей имеет размерность 1 (включает кривую или множество кривых, может включать отдельные точки, но не может включать фигуры);

p = 2 – пересечение областей имеет размерность 2 (включает фигуры);

p = * – пересечение областей может быть любым.

Иногда также используется более простой вариант матрицы девяти пересечений, когда возможно только наложение ограничений p = T или p = F либо отсутствие ограничений p = *.

Приведем пример описания операции, определяющей относительное расположение объектов, через задание ограничений на матрицу DE -9 IM. Аргументами операции являются два геометрических объекта, результатом – значение булевского типа. Операция

Touches (ST_Touches) – “касается” – возвращает значение “истина”, если пересечение объектов не пусто, но пересечение их внутренних областей пусто; и значение “ложь” в противном случае. Матрица девяти пересечений в этом случае должна соответствовать одному из следующих случаев:

FT * - внутренние области не пересекаются, но граница второго объекта пересекается
*** с внутренней областью первого объекта
***

F ** - внутренние области не пересекаются, но граница первого объекта пересекается
T ** с внутренней областью второго объекта
***

F **
* T * - внутренние области объектов не пересекаются, но границы пересекаются
***

Координатные системы

Любые пространственные данные представлены в определенной координатной системе. Координатная система может быть или не быть географической (связанной с определенным представлением поверхности земного шара). Например, декартова прямоугольная система координат не связана ни с каким определенным представлением земной поверхности.

Декартова прямоугольная система координат – координаты измеряют смещения точки от заданного начала координат вдоль перпендикулярных друг другу осей координат в двух- или трехмерном пространстве.

Геодезическая (географическая) система координат – положение точки на поверхности Земли задается угловыми координатами (широтой и долготой).

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

Локальная система координат – декартова прямоугольная система координат, не привязанная к представлению поверхности Земли.

Системы координат, используемые в стандартах, делятся на следующие классы:

двумерная система координат – координаты каждой точки задаются двумя числами (X, Y);

двумерная система координат (X, Y) с дополнительной метрикой для каждой точки (M) - XYM ;

трехмерная система координат (X, Y, Z) с дополнительной метрикой для каждой точки (M) - XYZM.

Создание таблиц, содержащих столбцы геометрических типов и добавление столбцов геометрических типов в таблицы

Создание таблиц, содержащих столбцы геометрических типов, может выполняться следующими способами:

  • Задание столбца геометрического типа непосредственно в операторе создания таблицы (CREATE TABLE).
  • Добавление столбцов геометрических типов в таблицы (оператором добавления столбца ALTER TABLE или процедурой AddGeometryColumn).

Добавление столбцов геометрических типов в таблицы

Для добавления столбцов геометрических типов в таблицы стандарт OGC предлагает процедуру AddGeometryColumn. Аргументами этой процедуры являются:

  • FEATURE_TABLE_CATALOG,
    FEATURE_TABLE_SCHEMA,
    FEATURE _ TABLE _ NAME – имя таблицы, в которую добавляется столбец (включая имя схемы и имя каталога)
  • GEOMETRY _ COLUMN _ NAME – имя добавляемого столбца
  • SRID – идентификатор используемой системы координат

Процедура AddGeometryColumn

  • проверяет наличие в таблице SPATIAL _ REFERENCE _ SYSTEM записи с первичным ключом, равным значению SRID;
  • добавляет запись для создаваемого столбца в таблицу GEOMETRY _ COLUMNS;
  • добавляет столбец в указанную таблицу, используя оператор ALTER TABLE ADD COLUMN;
  • добавляет для указанной таблицы ограничение целостности, которое проверяет, что SRID любого занесенного в столбец геометрического значения совпадает с SRID, заданным для столбца).

В PostGIS процедура AddGeometryColumn имеет дополнительные аргументы TYPE – допустимый тип геометрических объектов (например ‘POLYGON' или ‘MULTILINESTRING') и DIMENSION – число, задающее допустимую максимальную размерность геометрических объектов. Имя каталога не входит в число аргументов. Пример:

CREATE TABLE " urban _ areas " (gid serial, " nam " varchar);

SELECT AddGeometryColumn('','urban_areas','the_geom','-1',

' MULTIPOLYGON ',2);

В MySQL и ЛИНТЕР порядок добавления столбцов геометрических типов в таблицу тот же самый, что и для всех остальных типов столбцов – имя и тип столбца задаются либо в предложении CREATE TABLE при создании таблицы, либо в предложении ALTER TABLE ADD COLUMN при добавлении столбца в уже существующую таблицу. Пример:

CREATE TABLE "urban_areas" (gid integer, "nam" varchar(50)

" the _ geom " MULTIPOLYGON);

Удаление столбцов геометрических типов из таблиц

Для удаления столбцов геометрических типов из таблиц стандарт OGC предлагает процедуру DropGeometryColumn. Аргументами этой процедуры являются:

  • FEATURE_TABLE_CATALOG,
    FEATURE_TABLE_SCHEMA,
    FEATURE _ TABLE _ NAME – имя таблицы, из которой удаляется столбец (включая имя схемы и имя каталога)
  • GEOMETRY _ COLUMN _ NAME – имя удаляемого столбца

Процедура DropGeometryColumn

  • удаляет для указанной таблицы ограничение целостности, проверяющее значение SRID;
  • удаляет запись для удаляемого столбца из таблицы GEOMETRY _ COLUMNS;
  • удаляет столбец из указанной таблицы, используя оператор ALTER TABLE DROP COLUMN.

В PostGIS имя каталога не входит в число аргументов.

В MySQL порядок удаления столбцов геометрических типов из таблицы тот же самый, что и для всех остальных типов столбцов – имя столбца задается в предложении ALTER TABLE DROP COLUMN.

Занесение значений в столбцы геометрических типов

Занесение значений в столбцы геометрических типов, как и в столбцы других типов, производится с помощью предложений INSERT и UPDATE языка SQL. Заносимые значения могут быть представлены либо в текстовом виде (формат WKT), либо в двоичном (формат WKB).

Пример:

INSERT INTO "urban_areas" ("objectid","nam","the_geom")
VALUES (16874, ' KULIKOVO ',
GeometryFromText (' MULTIPOLYGON (((
39.511776 52.1988602, 39.503582 52.198639, 39.5044174 52.2007484, 39.5086402 52.2116128,
39.5130004 52.2130852, 39.527111 52.2244454,
39.5431404 52.2321, 39.62254 52.2321,
39.6052208 52.2260018, 39.5730018 52.2178612,
39.5601388 52.2207222, 39.5431404 52.2189178,
39.5405006 52.2138062, 39.5137482 52.2025834,
39.511776 52.1988602)))', -1));

Аналогичным образом выполняется и обновление данных в столбцах геометрических типов:

UPDATE TABLE “roads”
SET “the_geom” =
GeometryFromText('MULTILINESTRING((
39.5208054 51.3376122,39.532833 51.3395844))',-1));

Выборка значений из столбцов геометрических типов

Выбираемые из столбцов геометрических типов значения могут быть представлены либо в текстовом виде (формат WKT), либо в двоичном (формат WKB) путем выполнения над ними соответствующих преобразований. Пример:

select asText (“the_geom”) from “urban_areas”;

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

Многомерная природа пространственных данных не позволяет эффективно индексировать их с помощью B-деревьев, успешно используемых для индексации числовых и символьных данных.

Специализированные методы индексации, используемые для пространственных данных, делятся на 2 основных класса:

  • методы индексации точек и множеств точек;
  • методы индексации пространственных областей.

В промышленных СУБД используются в основном следующие методы индексации:

квадродерево (quadtree) – последовательное деление координатной плоскости на 4 части;

R -дерево – иерархическая пространственная структура, в котором каждый объект представлен его минимальным охватывающим прямоугольником со сторонами, параллельными координатным осям (MBR);

GiST (Generalized Search Tree) – обобщенное дерево поиска.

Для индексирования пространственных данных в СУБД используются различные варианты предложения CREATE INDEX, например, в MySQL (индекс типа R -дерева):

CREATE SPATIAL INDEX roads_the_geom ON roads (the_geom);

в PostgreSQL (индекс типа GIST) так:

CREATE INDEX “roads_the_geom” ON “roads” USING GIST (“the_geom”); а в Oracle для индекса типа R -дерева так: C REATE INDEX “the_geom” ON “roads” (“the_geom”) INDEXTYPE IS MDSYS.SPATIAL_INDEX ; а для индекса типа квадродерева, например, так: C REATE INDEX “the_geom” ON “roads” (“the_geom”) INDEXTYPE IS MDSYS.SPATIAL_INDEX (SDO_LEVEL=1) ;

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

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

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

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

Двухступенчатая форма поиска пространственных данных часто выражается заданием отдельного предиката для каждой ступени поиска. Например, в PostGIS:

ELECT ”nam”, asText(”the_geom”) FROM “urban_areas” WHERE “the_geom” && GeomFormText('POLYGON((39 51, 39 52, 40 52, 40 51, 39 51))') AND Intersects(“the_geom”,GeomFormText('POLYGON((39 51, 39 52, 40 52, 40 51, 39 51))')); Предикат && (пересечение MBR) задает грубый поиск (с вероятным использованием индекса), предикат Intersects – точный поиск. В MySQL для выполнения грубого поиска используется операция MBRIntersects, однако операции точного поиска не были реализованы в MySQL 5.0.0.

Импорт и экспорт пространственных данных

Широко распространенным форматом файлов для представления пространственных данных является формат. shp (shapefile), разработанный организацией ESRI (Environmental Systems Research Institute) в 1997-1998 годах.

Каждый. shp -файл содержит набор “форм” одного типа (в их число могут входить и пустые формы). К числу типов форм, соответствующих классам геометрических объектов, относятся точка (Point), множество точек (MultiPoint), ломаная (PolyLine) и многоугольник (Polygon). Каждый из этих типов форм имеет 3 варианта – для двумерной системы координат, XYM -координат и XYZM -координат. Также существует один тип сложной формы – MultiPat с h, приблизительно соответствующий типу MultiPolygon стандарта OGC. Негеометрические атрибуты, связанные с геометрическими данными в. shp -файле, хранятся в DBF -формате.

Многие СУБД имеют утилиты для импорта данных из. shp -формата и экспорта данных в этот формат. Например, в PostgreSQL импорт данных из. shp -формата выполняет утилита shp 2 pgsql, экспорт данных в. shp -формат – утилита pgsql 2 shp.

Другим распространенным форматом представления пространственных данных является GML (Geography Markup Language), разработанный OGC. В Oracle 10 g есть функция TO _ GMLGEOMETRY, сохраняющая пространственный объект в формате GML.

Представление метаданных

Стандарт вводит следующие представления для доступа к метаданным:

SPATIAL _ REF _ SYS – представление описаний всех систем координат, которые могут быть использованы для представления геометрических объектов;

GEOMETRY _ COLUMNS – представление описаний всех столбцов таблиц базы данных, содержащих данные геометрических типов.

Выполнение процедур AddGeometryColumn и DropGeometryColumn обеспечивает автоматическое обновление данных в представлении GeometryColumns.

Заключение

Разумеется, данная статья не претендует на подробное изложение вопроса, ее цель – дать читателю общее представление о затрагиваемой теме. Без сомнения, средства поддержки ГИС в СУБД будут активно развиваться в ближайшие годы, и, возможно, появятся новые версии упомянутых здесь стандартов.


Литература

  1. Open GIS Consortium, Inc. OpenGIS Simple Features Specification for SQL, Revision 1.1, 1999.
  2. ISO/IEC 13249-3:2002 FDIS. Informational technology – Database languages – SQL Multimedia and Application Packages – Part 3: Spatial, 2 nd edition, 2002.
  3. Основы пространственных баз данных. Шаши Шекхар, Санджей Чаула. Пер. с англ. М., Кудиц-Образ, 2004.
  4. Environmental Systems Research Institute, Inc. ESRI Shapefile Technical Description, 1997.
  5. Oracle, Corp. Oracle Spatial User's Guide and Reference, Release 9.0.1, 2001.
  6. International Business Machines, Corp. DB2 Spatial Extender. User's Guide and Reference, Version 8.1, 2002.
  7. David W. Adler. IBM DB2 Spatial Extender – Spatial Data within the RDBMS. Proceedings of the 27 th VLDB Conference, Roma, Italy, 2001.
  8. Knut Stolze. SQL/MM Spatial: The Standard to Manage Spatial Data in Relational Database Systems.

Возврат к списку

ѕрокрутить вверх