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

Поддержка стандарта OpenGIS в СУБД ЛИНТЕР. Перспективы обработки ГИС-информации ядром СУБД

Поддержка стандарта OpenGIS в СУБД ЛИНТЕР. Перспективы обработки ГИС-информации ядром СУБД

Конференция «Корпоративные базы данных – 2010»

Ермаков Михаил, Борисенков Дмитрий

Поддержка пространственных (геометрических) типов данных в реляционной СУБД включает в себя следующие аспекты: представление пространственных данных в типах языка SQL, выбор формата хранения данных в БД; методы доступа к пространственным данным, хранящимся в БД, индексирование пространственных данных и использование индексов для поиска; единообразие обработки пространственных и любых других типов данных; поддержка множества специальных операций над пространственными данными; работа утилит СУБД с пространственными типами данных для их визуального отображения; поддержка взаимодействия СУБД с существующими ГИС-приложениями.

СУБД ЛИНТЕР поддерживает общепринятые стандарты поддержки ГИС: OpenGIS Implementation Specification for Geographic information – Simple feature access – Part 2: SQL option – v. 1.2.0, а также ISO/IEC CD 13249-3:2006 Database languages – SQL. Multimedia and Application Packages — Part 3: Spatial.

Подсистема обработки географических данных в СУБД ЛИНТЕР состоит из следующих компонентов: библиотека манипулирования геоданными LINGEO, компилятор языка SQL, ядро ЛИНТЕР со средствами поддержки обработки геоданных, дополнения в системный словарь СУБД.

В СУБД ЛИНТЕР включена поддержка следующих типов данных, описанных в модели OpenGIS: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, GeometryСollection. Также для совместимости c другими СУБД были добавлены типы данных Box, Line и Circle.

С точки зрения хранения геометрические типы данных в СУБД ЛИНТЕР реализованы как разновидности типа данных VARBYTE (при максимальной длине значения до 4000 байт — по умолчанию) или BLOB (при максимальной длине значения более 4000 байт). По умолчанию (если не указана) максимальная длина значения геометрического типа равна 1024 байтам.

В качестве внутреннего формата хранения геометрических типов в СУБД ЛИНТЕР используется модифицированный формат WKB – WKB, следом за которым (в конце) дописан SRID.

Особенности реализации в СУБД ЛИНТЕР стандартных функций над пространственными данными: функция Centroid возвращает координаты «центра масс» многоугольника при условии, что вся его «масса» равномерно распределена между вершинами внешней границы многоугольника. Для функции PointOnSurface, которая возвращает значение типа Point — точку, которая гарантированно принадлежит аргументу — объекту типа Polygon, СУБД ЛИНТЕР возвращает первую точку внешней границы аргумента. Операция пересечения для значения типа Circle и значения, которое включает Polygon, реализуется особым образом, что связано с наличием поддержки только фигур с границами в виде прямолинейных отрезков. Окружность аппроксимируется вписанным правильным многоугольником с 32 вершинами, и полученный многоугольник пересекается со вторым значением геометрического типа. Количество вершин аппроксимирующего многоугольника (32) в настоящее время задано жестко, но в дальнейшем можно дать возможность пользователю изменять эту величину.

Для оптимизации поисковых операций с участием геометрических данных необходимо использовать индексы. Индексирование геометрических данных (как и других типов данных) в СУБД ЛИНТЕР в настоящее время выполняется с помощью B-дерева. Команды создания индекса для геометрических данных имеют в СУБД ЛИНТЕР тот же самый синтаксис, что и команды создания обычного индекса:

CREATE OR REPLACE TABLE point_test( p0 POINT );
CREATE INDEX p0 ON point_test;

Индекс по геометрическим типам данных может быть и составным:

CREATE OR REPLACE TABLE lspoint_test( p POINT, ls LINESTRING );
CREATE INDEX test ON lspoint_test(p,ls);

Используемый в СУБД ЛИНТЕР вариант индексации пространственных данных ставит в соответствие каждому значению его MBR — минимальный ограничивающий прямоугольник.

Для поиска по геометрическим типам данных в СУБД ЛИНТЕР используется предикат BETWEEN. Нижняя и верхняя граница предиката BETWEEN для геометрических данных задают левый нижний и правый верхний угол прямоугольника, при полном или частичном попадании в который значение предиката BETWEEN считается истинным (TRUE).

Для обработки пространственных предикатов других типов индексы в СУБД ЛИНТЕР в настоящее время не используются. Стратегия вычисления запросов, содержащих такие предикаты, организуется таким образом, чтобы перенести проверку их истинности на самый поздний этап, когда вычислены все остальные предикаты.

Для проверки функционирования подсистемы геоданных СУБД ЛИНТЕР используется набор тестов, созданный на основе приложения C3 к стандарту OpenGIS Simple Features for SQL («Conformance Tests»).

Разработаны собственные наборы тестов для проверки выполнения отдельных операций над данными геометрических типов: тесты преобразования всех типов геометрических объектов в текстовый формат (WKT) и внутренний формат (WKB) из текстового; тесты вычисления характеристик геометрических объектов различных типов; тесты вычисления расстояний между различными типами геометрических объектов для всех возможных вариантов их взаимного расположения; тесты объединения, пересечения, разности и симметрической разности фигур сложной формы (многоугольники, содержащие исключенные области, в том числе множественные, вложенные друг в друга, имеющие форму «решётки», «расчёски» и т.д.).


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

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