Стандарт OGIS как расширение языка SQL
Консорциум OGIS был создан ведущими производителями программного обеспечения с целью выработки промышленного стандарта, регламентирующего взаимодействие ГИС. Модель пространственных данных OGIS может быть встроена в большое количество различных языков программирования, например C, Java, SQL и т. д. В этом разделе мы остановимся на встраивании этой модели в язык SQL.
Стандарт OGIS основан на модели геометрических данных, представленной на рис. 2.2. Вспомним, что эта модель данных состоит из базового класса GEOMETRY, который является абстрактным, – иначе говоря, мы не можем описать объекты как экземпляры этого класса, – однако задает пространственную систему координат, применимую ко всем производным от него классам. Четыре основных класса, порожденных от предка GEOMETRY, – это Point, Curve, Surface и GeometryCollection. С каждым из этих классов связан набор операций, выполняемых над экземплярами классов. Некоторые важные операции, а также их назначение приведены в таблице 3.9.
Операции, определенные в стандарте OGIS, делятся на три категории.
Таблица 3.9. Примеры операций, входящих в стандарт OGIS [OGIS, 1999]
Базовые функции | SpatialReference() | Возвращает базовую систему координат геометрии |
Envelope() | Возвращает минимальный ортогональный ограничивающий прямоугольник геометрии | |
Export() | Возвращает альтернативное представление геометрии | |
IsEmpty() | Возвращает истинное значение, если геометрия является пустым множеством | |
IsSimple() | Возвращает истинное значение, если геометрия является простой (без самопересечений) | |
Boundary() | Возвращает границы геометрии | |
Топологические операции и операции над множествами | Equal | Возвращает истинное значение, если внутренние области и границы обеих геометрий пространственно равны |
Disjoint | Возвращает истинное значение, если границы и внутренняя область не пересекаются | |
Intersect | Возвращает истинное значение, если геометрии имеют общие элементы | |
Touch | Возвращает истинное значение, если границы двух поверхностей пересекаются, а внутренние области – нет | |
Cross | Возвращает истинное значение, если внутренняя область поверхности пересекается кривой | |
Within | Возвращает истинное значение, если внутренняя область одной геометрии не пересекается с внешней областью другой геометрии | |
Contains | Проверяет, содержит ли одна геометрия другую | |
Overlap | Возвращает истину, если внутренние области двух геометрий имеют непустое пересечение | |
Пространственный анализ | Distance | Возвращает кратчайшее расстояние между двумя геометриями |
Buffer | Возвращает геометрию, содержащую все точки, лежащие на указанном или меньшем расстоянии от данной геометрии | |
ConvexHull | Возвращает наименьшее выпуклое геометрическое множество, заключающее в себе данную геометрию | |
Intersection | Возвращает геометрическое пересечение двух геометрий | |
Union | Возвращает геометрическое объединение двух геометрий | |
Difference | Возвращает фрагмент геометрии, который не пересекается с другой геометрией | |
SymmDiff | Возвращает фрагменты двух геометрий, которые не пересекаются друг с другом |
1. Базовые операции, применимые ко всем геометрическим типам данных. Например, SpatialReference возвращает базовую систему координат, в которой описана геометрия объекта. К числу распространенных систем координат относятся широко известная система широт и долгот, а также часто используемая система Universal Traversal Mercator (UTM).
2. Операции, выявляющие топологические отношения между пространственными объектами. Например, операция overlap проверяет, имеют ли внутренние области двух объектов (см. главу 2) непустое множество пересечений.
3. Общие операции пространственного анализа. Например, операция distance возвращает кратчайшее расстояние между двумя пространственными объектами.