Well-Known Binary (WKB) представление OGC-геометрии
Хорошо известное двоичное представление для геометрии является частью спецификации Simple Features Открытого геопространственного консорциума (Open Geospatial Consortium (OGC), в котором реализуется простая модель хранения точечных, линейных и полигональных пространственных объектов с помощью координат x и y. Он обеспечивает портативное представление значения геометрии в виде непрерывного потока байтов. Она позволяет значениям геометрии обмениваться между клиентом ODBC и базой данных в двоичной форме. Она не сжата.
Тип хранения двоичной геометрии OGC well-known представляет собой спецификацию, принятую большинством институтов, включая Esri, поддерживающую базы геоданных, в которых используется программное обеспечение ArcGIS.
Тип хранения двоичной геометрии OGC well-known получен посредством сериализации экземпляров геометрии как последовательности типов чисел из набора {целое число без знака, число двойной точности} и сериализации каждого типа чисел как последовательности байтов с помощью одного из двух хорошо определенных, стандартных двоичных представлений для типов чисел, NDR или XDR.
XDR является аббревиатурой для eXtended Data Representation, то есть Расширенное представление данных. XDR является IETF-стандартом слоя представлений в модели OSI. XDR позволяет осуществлять перемещение данных независимым способом, благодаря чему данные могут передаваться между компьютерными системами. NDR является аббревиатурой для Network Data Representation, то есть Представление сетевых данных. NDR является реализацией слоя представлений в модели OSI.
Специальная двоичная кодировка, используемая для потока байтов с геометрией, описывается посредством одно-байтного тега, который идет впереди сериализированных байтов. Единственной разницей между этими двумя кодировками геометрии, является порядок байтов. XDR является кодировкой с обратным порядком байтов, в то время как NDR – кодировкой с прямым порядком байтов. Это означает, что представление кодировки XDR целочисленных без знака (32-бит (4-байт) типа данных, кодирующее неотрицательное целочисленное в диапазоне [0, 4294967295]), является кодировкой с обратным порядком байтов, каким является представление кодировки XDR, кодирующее представление типа данных двойной точности (64-бит (8 байт), которое кодирует числа двойной точности, используя формат двойной точности IEEE 754. И наоборот, NDR-представление целочисленного без знака является (кодировкой) с прямым порядком байтов (первый байт менее значимый), и NDR-представление числа двойной точности является (кодировкой) с прямым порядком байтов.
Конвертация между типами данных NDR и XDR для целочисленных без знака и чисел двойной точности является простой операцией, когда в потоке байтов происходит перестановка байтов в каждом целочисленном без знака или в каждом числе двойной точности.
Этот тип хранения геометрии может использоваться с базами геоданных, хранящимися в Oracle или SQL Server, для хранения двухмерной геометрии. Классы пространственных объектов, хранящиеся в двоичном представлении OGC well-known, также представлены в виде трех таблиц: бизнес-таблица, таблица объектов и таблица пространственных индексов. Это такие же таблицы, которые используются для классов пространственных объектов, которые хранятся в сжатом двоичном формате ArcSDE.
В бизнес-таблице находятся атрибуты и пространственный столбец. Пространственный столбец является ключом к таблице объектов и таблице пространственного индекса.
Отношения между бизнес-таблицей и таблицей объектов управляются через пространственный столбец и столбец идентификатора объектов (FID). Данный ключ, который поддерживается ArcGIS, является уникальным.
Если вы хотите хранить большую часть данных классов пространственных объектов в двоичном формате OGC well-known, измените значение параметра GEOMETRY_STORAGE под ключевым словом конфигурации DEFAULTS таблицы DBTUNE на OGCWKB. Если же вы хотите хранить только часть ваших классов пространственных объектов в двоичном формате OGC well-known, то вы можете указать ключевое слово конфигурации WKB_GEOMETRY при создании этих классов пространственных объектов.
Описание байтовых потоков геометрии WKB
Главным составляющим двоичного представления геометрии является поток байтов для точки, состоящей из двух чисел двойной точности. Потоки байтов для других типов геометрии выстраиваются с помощью потоков байтов для уже заданной геометрии. Ниже представлено определение потока байтов:
Определения основного типа
byte : 1 byte
uint32: 32-битное целое число без знака (4 байта)
double: число двойной точности (8 байт)
Составляющие: точка, LinearRing
Точка {
x двойн.
y двойн.
};
LinearRing {
uint32 numPoints;
Point points[numPoints];
}
enum wkbGeometryType {
wkbPoint = 1,
wkbLineString = 2,
wkbPolygon = 3,
wkbMultiPoint = 4,
wkbMultiLineString = 5,
wkbMultiPolygon = 6,
wkbGeometryCollection = 7
};
enum wkbByteOrder {
wkbXDR = 0, Big Endian
wkbNDR = 1 Little Endian
};
WKBPoint {
byte byteOrder;
uint32 wkbType; 1
Point point;
}
WKBLineString {
byte byteOrder;
uint32 wkbType; 2
uint32 numPoints;
Point points[numPoints];
}
WKBPolygon {
byte byteOrder;
uint32 wkbType; 3
uint32 numRings;
LinearRing rings[numRings];
}
WKBMultiPoint {
byte byteOrder;
uint32 wkbType; 4
uint32 num_wkbPoints;
WKBPoint WKBPoints[num_wkbPoints];
}
WKBMultiLineString {
byte byteOrder;
uint32 wkbType; 5
uint32 num_wkbLineStrings;
WKBLineString WKBLineStrings[num_wkbLineStrings];
}
wkbMultiPolygon {
byte byteOrder;
uint32 wkbType; 6
uint32 num_wkbPolygons;
WKBPolygon wkbPolygons[num_wkbPolygons];
}
WKBGeometry {
union {
WKBPoint point;
WKBLineString linestring;
WKBPolygon polygon;
WKBGeometryCollection collection;
WKBMultiPoint mpoint;
WKBMultiLineString mlinestring;
WKBMultiPolygon mpolygon;
}
};
WKBGeometryCollection {
byte byte_order;
uint32 wkbType; 7
uint32 num_wkbGeometries;
WKBGeometry wkbGeometries[num_wkbGeometries]
}
Утверждения для Стандартного двоичного представления геометрии
Двоичное представление геометрии создано для представления экземпляров типов геометрии, описанных в модели объектов геометрии и в спецификации Open Geospatial Abstract Specification.
Эти утверждения содержат следующие предположения относительно колец, полигонов и мультиполигонов:
- Линейные кольца: кольца являются простыми и закрытыми, что значит, что линейные кольца не могут быть самопересекаемыми.
- Полигоны: два линейных кольца в пределах полигона не могут пересекать один другого. Линейные кольца в границах полигона могут пересечься в единственной точке, но только по касательной.
- Мультиполигоны: Внутренние части двух полигонов, являющихся элементами мультиполигона, не могут пересекаться. Границы любых двух полигонов, которые являются элементами мультиполигона, могут соприкасаться только в ограниченном числе точек.