Открыть сервис

Well-Known Binary

Well-Known Binary (WKB) — это стандартизированный формат двоичного представления геометрических объектов, используемый для хранения и передачи пространственных данных в геоинформационных системах (ГИС). Он представляет собой бинарную версию текстового формата Well-Known Text (WKT), разработанного Open Geospatial Consortium (OGC) и описанного в стандарте ISO 19125-1:2004. WKB обеспечивает компактное, машинно-читаемое представление геометрий, таких как точки, линии, многоугольники и их коллекции, что позволяет эффективно обмениваться данными между различными ГИС-приложениями и базами данных.

История и стандартизация

Формат WKB был впервые предложен как часть спецификации Simple Features Access (SFA) консорциума OGC (США, международная организация по стандартизации в сфере геопространственных данных) в конце 1990-х годов. Целью создания WKB было устранение недостатков текстового WKT, который, будучи удобным для чтения человеком, занимал много места и требовал дополнительного парсинга при обработке компьютерами. WKB, напротив, оптимизирован для прямого считывания процессором и хранения в двоичных файлах или базах данных.

В 2004 году стандарт был принят как международный стандарт ISO 19125-1:2004 «Geographic information — Simple feature access — Part 1: Common architecture». С тех пор WKB стал основой для многих ГИС-продуктов, включая PostgreSQL/PostGIS, Oracle Spatial, SQLite/SpatiaLite, а также библиотеки, такие как GDAL/OGR и GEOS. В 2011 году была опубликована расширенная версия формата — Extended Well-Known Binary (EWKB), которая добавляет поддержку систем координат (SRID) и трёхмерных геометрий (XYZ, XYM, XYZM).

Структура формата

WKB представляет собой последовательность байтов, организованную в соответствии с фиксированной схемой. Каждый геометрический объект кодируется в виде заголовка, за которым следуют данные о координатах. Основные элементы структуры:

  • Порядок байтов (Byte Order): 1 байт, указывающий на порядок следования байтов (endianness). Значение 0x01 (little-endian) или 0x00 (big-endian). Это позволяет WKB корректно обрабатываться на разных архитектурах процессоров.
  • Тип геометрии (Geometry Type): 4 байта (32-битное целое без знака), определяющее тип геометрического объекта. Код типа включает информацию о размерности (2D, 3D, с M-координатой) и типе (точка, линия и т.д.). Основные коды: 1 — Point, 2 — LineString, 3 — Polygon, 4 — MultiPoint, 5 — MultiLineString, 6 — MultiPolygon, 7 — GeometryCollection.
  • Координаты (Coordinates): Массив чисел с плавающей запятой двойной точности (double, 8 байт каждое), представляющих координаты X, Y и, при необходимости, Z (высота) и M (мерная координата). Количество координат зависит от типа геометрии.

Для сложных типов (например, Polygon) в структуру добавляются вложенные массивы: сначала указывается количество колец (внешнее и внутренние), затем для каждого кольца — количество точек и их координаты.

Пример для точки (Point)

Геометрия «Точка с координатами (10.5, 20.3)» в little-endian WKB будет выглядеть как:

  • 01 (порядок байтов: little-endian)
  • 01000000 (тип: Point, код 1)
  • 0000000000002440 (координата X: 10.5 в double)
  • 3333333333333440 (координата Y: 20.3 в double)

Общий размер: 21 байт (1 + 4 + 8 + 8).

Типы геометрий

WKB поддерживает все основные типы геометрий, определённые в стандарте OGC Simple Features:

  • Point (Точка): Одна пара координат (X, Y). Код: 1.
  • LineString (Линия): Последовательность из двух и более точек, образующих ломаную линию. Код: 2.
  • Polygon (Многоугольник): Замкнутая область, задаваемая внешним кольцом и опциональными внутренними кольцами (отверстиями). Код: 3.
  • MultiPoint (Мультиточка): Набор точек. Код: 4.
  • MultiLineString (Мультилиния): Набор линий. Код: 5.
  • MultiPolygon (Мультиполигон): Набор многоугольников. Код: 6.
  • GeometryCollection (Коллекция геометрий): Набор разнотипных геометрий. Код: 7.

Каждый из этих типов может быть расширен для поддержки трёхмерных координат (добавление Z) или мерных координат (M), что обозначается добавлением флагов к коду типа (например, для 3D-точки код будет 0x80000001).

Extended Well-Known Binary (EWKB)

EWKB является расширением WKB, разработанным для включения дополнительной информации о системе координат (SRID — Spatial Reference Identifier). SRID — это целое число, идентифицирующее конкретную систему координат (например, EPSG:4326 для WGS 84). В EWKB SRID добавляется в заголовок после типа геометрии, занимая 4 байта. Это позволяет однозначно интерпретировать координаты без необходимости внешнего контекста.

EWKB также поддерживает трёхмерные геометрии (XYZ, XYM, XYZM) и включает флаги для указания размерности. Формат EWKB широко используется в PostgreSQL/PostGIS и других системах, где требуется самодостаточность данных.

Применение

WKB и EWKB находят применение в различных областях, связанных с пространственными данными:

  • Базы данных: В PostgreSQL/PostGIS, Oracle Spatial, SQLite/SpatiaLite и других реляционных СУБД WKB используется как внутренний формат хранения геометрий. При запросах к базе данных геометрии возвращаются в виде WKB-строк, которые затем декодируются клиентским приложением.
  • Веб-сервисы: Протоколы OGC, такие как Web Feature Service (WFS), могут передавать геометрии в формате WKB для уменьшения объёма передаваемых данных по сравнению с текстовым GML (Geography Markup Language).
  • ГИС-приложения: Программы, такие как QGIS (свободная кроссплатформенная ГИС), ArcGIS (проприетарная ГИС, разрабатываемая Esri, США) и MapInfo, поддерживают импорт и экспорт WKB для обмена данными.
  • Библиотеки и инструменты: Библиотеки GDAL/OGR (Geospatial Data Abstraction Library), GEOS (Geometry Engine, Open Source) и Shapely (Python) используют WKB для внутреннего представления и преобразования геометрий.
  • Мобильные приложения: В навигационных и картографических приложениях WKB применяется для компактного хранения маршрутов и зон интереса на устройствах с ограниченной памятью.

Преимущества и недостатки

Преимущества

  • Компактность: WKB занимает меньше места, чем текстовые форматы (WKT, GML), что важно для хранения больших объёмов данных и передачи по сети.
  • Скорость обработки: Двоичный формат не требует парсинга текста, что ускоряет чтение и запись.
  • Машинная независимость: Включение порядка байтов позволяет обрабатывать WKB на разных платформах.
  • Стандартизация: Широкая поддержка в ГИС-сообществе и международный стандарт ISO гарантируют совместимость.

Недостатки

  • Нечитаемость для человека: WKB невозможно интерпретировать без специального программного обеспечения.
  • Ограниченная точность: Использование чисел с плавающей запятой двойной точности может приводить к ошибкам округления при работе с очень большими или очень малыми координатами.
  • Отсутствие метаданных: Базовый WKB не содержит информации о системе координат, что может вызвать ошибки при интерпретации данных.

Интересные факты

  • Формат WKB был разработан в рамках проекта OpenGIS консорциума OGC, который также создал стандарты WMS (Web Map Service) и WFS.
  • В 2019 году OGC выпустила обновление стандарта Simple Features Access — Part 1: Common architecture (версия 2.0), которое уточнило спецификации WKB и добавило поддержку новых типов геометрий, таких как PolyhedralSurface и TIN (Triangulated Irregular Network).
  • В России WKB используется в государственных информационных системах, таких как Единая электронная картографическая основа (ЕЭКО) и Федеральная государственная информационная система территориального планирования (ФГИС ТП), для хранения пространственных данных.
  • Библиотека GEOS, написанная на C++, является основой для многих ГИС-приложений и реализует полную поддержку WKB и EWKB.

Источники

  • Open Geospatial Consortium. «OpenGIS® Implementation Standard for Geographic information — Simple feature access — Part 1: Common architecture». OGC 06-103r4, 2011.
  • ISO 19125-1:2004 «Geographic information — Simple feature access — Part 1: Common architecture».
  • PostGIS Manual. «Chapter 4. Using PostGIS: Geometry Format». PostGIS Project, 2023.
  • GDAL/OGR Documentation. «OGR Geometry: Well-Known Binary». OSGeo, 2022.
  • Shekhar, S., Chawla, S. «Spatial Databases: A Tour». Pearson, 2003.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →