Векторные данные в веб-картографии часто требуют сериализации в стандартизированные текстовые или бинарные форматы. Среди наиболее распространённых — WKT (Well-Known Text) и WKB (Well-Known Binary). Эти форматы используются для обмена геометриями между GIS-системами, базами данных (PostGIS, Oracle Spatial) и библиотеками клиентской визуализации, включая OpenLayers.
WKT и WKB представляют геометрию независимо от визуального слоя или картографического движка, описывая только пространственную структуру объектов.
WKT — текстовый формат, представляющий геометрию в виде читаемой строки. Он удобен для отладки, логирования и обмена данными в человекочитаемом виде.
Основные типы геометрий WKT:
Примеры:
POINT (30 10)
LINESTRING (30 10, 10 30, 40 40)
POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
Ключевая особенность WKT — строгая последовательность координат и вложенность скобок для сложных объектов.
В OpenLayers для работы с WKT используется класс
ol/format/WKT.
Базовый процесс десериализации:
import WKT from 'ol/format/WKT';
const wktReader = new WKT();
const feature = wktReader.readFeature(
'POINT (30 10)',
{
dataProjection: 'EPSG:4326',
featureProjection: 'EPSG:3857'
}
);
Результатом является объект ol/Feature, который можно
добавлять в векторный слой.
Обратная операция позволяет преобразовать объект карты в строковое представление:
import WKT from 'ol/format/WKT';
const wktWriter = new WKT();
const wktString = wktWriter.writeFeature(feature);
Дополнительно можно контролировать систему координат:
const wktString = wktWriter.writeFeature(feature, {
featureProjection: 'EPSG:3857',
dataProjection: 'EPSG:4326'
});
Это критично при интеграции с серверными GIS-системами, где ожидается географическая система координат.
WKT сам по себе не содержит информации о проекции. Поэтому при чтении и записи важно явно задавать:
dataProjection — исходная система координатfeatureProjection — система картыНа практике чаще всего используется:
Ошибки в этих параметрах приводят к смещению объектов на карте.
WKB (Well-Known Binary) является бинарным аналогом WKT. Он используется там, где важны:
WKB не предназначен для ручного чтения, так как представляет данные в виде байтовой последовательности.
Пример концептуального представления:
0101000000000000000000F03F0000000000000040
В OpenLayers WKB также поддерживается через
ol/format/WKB.
Чтение бинарных данных:
import WKB from 'ol/format/WKB';
const wkbReader = new WKB();
const feature = wkbReader.readFeature(arrayBuffer, {
dataProjection: 'EPSG:4326',
featureProjection: 'EPSG:3857'
});
Где arrayBuffer — бинарный буфер, полученный, например,
из API или базы данных.
import WKB from 'ol/format/WKB';
const wkbWriter = new WKB();
const buffer = wkbWriter.writeFeature(feature, {
featureProjection: 'EPSG:3857',
dataProjection: 'EPSG:4326'
});
Результатом является ArrayBuffer, пригодный для передачи
по сети или сохранения.
WKT
WKB
И WKT, и WKB поддерживают одинаковую модель геометрий OGC:
В OpenLayers эти геометрии преобразуются в классы:
ol/geom/Pointol/geom/LineStringol/geom/Polygonol/geom/MultiPointol/geom/MultiLineStringol/geom/MultiPolygonПри работе с MULTIPOLYGON важно учитывать вложенность:
WKT:
MULTIPOLYGON (
((30 10, 40 40, 20 40, 10 20, 30 10)),
((60 60, 70 80, 50 80, 60 60))
)
При десериализации OpenLayers создаёт единый объект мультиполигона с набором контуров.
WKT и WKB часто применяются при загрузке данных в
VectorSource:
import VectorSource from 'ol/source/Vector';
import VectorLayer from 'ol/layer/Vector';
import WKT from 'ol/format/WKT';
const format = new WKT();
const source = new VectorSource({
features: [
format.readFeature('LINESTRING (0 0, 10 10)')
]
});
const layer = new VectorLayer({
source: source
});
При работе с API часто поступает массив WKT-строк:
const wktList = [
'POINT (10 20)',
'POINT (30 40)',
'POINT (50 60)'
];
const features = wktList.map(wkt =>
wktReader.readFeature(wkt, {
dataProjection: 'EPSG:4326',
featureProjection: 'EPSG:3857'
})
);
Такая схема используется при пакетной загрузке данных.
Наиболее частые проблемы:
OpenLayers обычно выбрасывает исключение при невозможности интерпретировать геометрию.
WKT и WKB широко применяются при интеграции с:
Типичный сценарий:
При проектировании систем важно учитывать:
Корректная работа с WKT/WKB в OpenLayers требует строгого соблюдения CRS-цепочки:
dataProjectionfeatureProjectionПри нарушении этой схемы возможны геометрические искажения, особенно при работе с глобальными данными.
WKT и WKB применяются не только для отображения, но и для:
В связке с OpenLayers они обеспечивают единый слой взаимодействия между клиентом и геопространственной инфраструктурой.