GML (Geography Markup Language) представляет собой XML-основанный стандарт OGC, предназначенный для описания географических объектов, их геометрии, свойств и пространственных отношений. Основная задача формата заключается в унификации представления векторных данных, что позволяет использовать его как универсальный транспортный слой в веб-ГИС и серверных системах.
Ключевая особенность GML заключается в строгой структуре XML-документа, где каждый географический объект описывается как элемент с набором атрибутов и вложенных геометрических конструкций. Это обеспечивает совместимость между различными ГИС-платформами и сервисами, включая WFS (Web Feature Service).
Базовая модель GML опирается на три уровня:
Географический объект обычно представлен через элемент
<gml:Feature> или производные типы, определённые в
схемах приложений (application schemas).
Типичная структура включает:
Пример упрощённой структуры:
<gml:featureMember>
<app:Road>
<app:name>Main Street</app:name>
<app:geometry>
<gml:LineString srsName="EPSG:4326">
<gml:coordinates>
30.5,50.5 30.6,50.6
</gml:coordinates>
</gml:LineString>
</app:geometry>
</app:Road>
</gml:featureMember>
В более современных версиях GML вместо gml:coordinates
используется конструкция gml:posList, обеспечивающая более
строгую и расширяемую модель координат.
Формат поддерживает набор базовых геометрий OGC Simple Features:
Каждая геометрия описывается через XML-элементы, соответствующие структуре узлов и координат.
Polygon, например, включает внешнюю границу и внутренние кольца (holes), что позволяет описывать сложные области с вырезами.
Одной из ключевых характеристик GML является явное указание системы
координат через атрибут srsName.
Пример:
<gml:Point srsName="EPSG:3857">
<gml:pos>4183421 7512345</gml:pos>
</gml:Point>
Использование EPSG-кодов обеспечивает совместимость с проекциями, применяемыми в веб-картографии и серверных ГИС.
Важная особенность заключается в том, что координаты интерпретируются строго в соответствии с указанной системой, без автоматической трансформации.
Существует несколько версий стандарта:
Основные различия:
gml:coordinates на gml:pos и
gml:posListGML тесно связан с сервисом WFS, где используется как основной формат передачи объектов между сервером и клиентом.
Типичный сценарий:
WFS может возвращать данные в различных версиях GML, что требует поддержки нескольких парсеров на стороне клиента.
В библиотеке OpenLayers для обработки GML используется модуль
ol/format/GML.
Он обеспечивает:
Основной класс:
import GML from 'ol/format/GML';
Парсинг входящего XML выполняется через метод
readFeatures:
import GML from 'ol/format/GML';
const format = new GML({
featureNS: 'http://example.com/ns',
featureType: 'Road'
});
const features = format.readFeatures(gmlString, {
dataProjection: 'EPSG:4326',
featureProjection: 'EPSG:3857'
});
Ключевые параметры:
dataProjection — система координат входных данныхfeatureProjection — целевая проекция картыПреобразование координат выполняется автоматически через встроенные трансформации OpenLayers.
Экспорт в GML осуществляется методом writeFeatures:
const gml = format.writeFeatures(features, {
featureProjection: 'EPSG:3857',
dataProjection: 'EPSG:4326'
});
Результатом является XML-строка, соответствующая выбранной версии GML.
Класс ol/format/GML поддерживает параметры
конфигурации:
srsName — определение системы координатfeatureNS — XML namespacefeatureType — тип объектаsurface — поддержка поверхностейcurve — поддержка кривыхПример настройки:
const format = new GML({
srsName: 'EPSG:3857',
featureNS: 'http://example.com/roads',
featureType: 'road',
surface: true
});
OpenLayers поддерживает несколько реализаций:
ol/format/GML2ol/format/GML3Различия проявляются в структуре XML и поддерживаемых геометриях.
GML2 использует более простую модель координат, тогда как GML3
опирается на gml:posList и расширенные схемы OGC.
Пример GML3:
<gml:Point srsName="EPSG:4326">
<gml:pos>30.5 50.5</gml:pos>
</gml:Point>
GML основан на XML, что накладывает ряд технических особенностей:
OpenLayers использует оптимизированные парсеры, однако при больших наборах данных производительность может снижаться.
Координаты в GML хранятся в текстовом виде, что влияет на точность и объём данных:
Это делает GML менее эффективным для высоконагруженных веб-карт, но удобным для межсистемного обмена.
GML часто используется совместно с векторными слоями:
import VectorSource from 'ol/source/Vector';
import VectorLayer from 'ol/layer/Vector';
const vectorSource = new VectorSource({
format: new GML(),
url: 'https://example.com/wfs?service=WFS&request=GetFeature'
});
const vectorLayer = new VectorLayer({
source: vectorSource
});
В этом сценарии OpenLayers автоматически выполняет запрос, получает GML, парсит его и добавляет объекты на карту.
При работе с GML критически важна корректная обработка проекций:
OpenLayers выполняет преобразования через модуль
ol/proj, обеспечивая согласованность отображения.
GML обладает рядом ограничений:
Несмотря на это, формат остаётся стандартом в OGC-инфраструктурах, особенно в корпоративных ГИС и государственных системах.
GML активно используется в:
OpenLayers выступает клиентским компонентом, обеспечивающим интерпретацию и визуализацию данных без необходимости ручной обработки XML.