Параметры WMS запросов

В библиотеке OpenLayers работа с WMS (Web Map Service) строится вокруг формирования HTTP-запросов к картографическому серверу, который возвращает растровые изображения карт на основе заданных параметров. Каждый запрос представляет собой набор ключевых параметров, определяющих слой, проекцию, охватываемую область и формат изображения.

Базовая структура WMS-запроса (GetMap):

.../wms?SERVICE=WMS&REQUEST=GetMap&VERSION=1.3.0
&LAYERS=layer_name
&STYLES=
&CRS=EPSG:3857
&BBOX=minx,miny,maxx,maxy
&WIDTH=256
&HEIGHT=256
&FORMAT=image/png
&TRANSPARENT=true

Каждый параметр влияет на то, как сервер формирует изображение, а OpenLayers управляет их генерацией динамически в зависимости от масштаба и области просмотра.


Основные параметры WMS и их роль

LAYERS

Определяет список слоёв, которые должны быть отрисованы сервером.

  • Несколько слоёв перечисляются через запятую
  • Порядок влияет на наложение
LAYERS=roads,buildings,water

STYLES

Определяет стили отображения слоёв.

  • Пустое значение означает стиль по умолчанию
  • Можно задавать серверные SLD-стили
STYLES=default

CRS / SRS

Определяет систему координат запроса.

  • В WMS 1.3.0 используется CRS
  • В WMS 1.1.1 используется SRS
CRS=EPSG:3857

Критически важно соответствие CRS между клиентом OpenLayers и сервером WMS, иначе происходит смещение изображения.


BBOX

Географический bounding box — ключевой параметр запроса.

BBOX=minX,minY,maxX,maxY

Особенности:

  • порядок координат зависит от CRS (особенно EPSG:4326 в WMS 1.3.0)
  • пересчитывается при каждом перемещении карты
  • определяет область запроса тайла или экрана

WIDTH и HEIGHT

Размер изображения, запрашиваемого у сервера.

  • Обычно равен размеру viewport или tile size
  • В tile-системах часто 256×256
WIDTH=256
HEIGHT=256

FORMAT

Формат возвращаемого изображения.

Наиболее распространённые значения:

  • image/png — поддержка прозрачности
  • image/jpeg — быстрее, но без альфа-канала
  • image/webp — реже, но оптимизировано
FORMAT=image/png

TRANSPARENT

Управляет прозрачностью фона.

TRANSPARENT=true

Используется при наложении нескольких слоёв.


VERSION

Версия WMS протокола.

  • 1.1.1 — устаревшая, но широко поддерживаемая
  • 1.3.0 — актуальная версия
VERSION=1.3.0

Версия влияет на:

  • порядок координат BBOX
  • использование CRS вместо SRS

Использование WMS в OpenLayers

В OpenLayers WMS подключается через источник ImageWMS или TileWMS.

ImageWMS

Используется для единичного изображения карты.

import TileLayer from 'ol/layer/Tile.js';
import ImageWMS from 'ol/source/ImageWMS.js';
import ImageLayer from 'ol/layer/Image.js';

const wmsSource = new ImageWMS({
  url: 'https://example.com/geoserver/wms',
  params: {
    LAYERS: 'workspace:layer_name',
    VERSION: '1.3.0',
    TRANSPARENT: true
  },
  ratio: 1,
  serverType: 'geoserver'
});

const wmsLayer = new ImageLayer({
  source: wmsSource
});

Особенности:

  • один запрос на всю область видимости
  • подходит для статических или редко обновляемых данных
  • меньшая нагрузка на сервер при небольших масштабах

TileWMS

Используется тайловая схема загрузки.

import TileWMS from 'ol/source/TileWMS.js';
import TileLayer from 'ol/layer/Tile.js';

const wmsTileSource = new TileWMS({
  url: 'https://example.com/geoserver/wms',
  params: {
    LAYERS: 'workspace:layer_name',
    TILED: true,
    VERSION: '1.3.0'
  },
  serverType: 'geoserver'
});

const wmsTileLayer = new TileLayer({
  source: wmsTileSource
});

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

  • кэширование тайлов
  • высокая производительность
  • параллельная загрузка

Параметр TILED

Параметр TILED=true сообщает серверу, что запросы будут разбиваться на тайлы.

TILED=true

Особенности:

  • уменьшает нагрузку на сервер
  • улучшает кэширование на CDN
  • часто используется с GeoServer

Динамическое управление параметрами

OpenLayers позволяет изменять параметры WMS без пересоздания слоя.

updateParams

wmsSource.updateParams({
  LAYERS: 'workspace:new_layer',
  TIME: '2025-01-01'
});

Механизм:

  • инициирует перезапрос изображений
  • сбрасывает кэш тайлов
  • применяется ко всем последующим запросам

Пользовательские параметры запроса

WMS позволяет передавать нестандартные параметры, которые обрабатываются сервером.

CQL_FILTER

Используется в GeoServer для фильтрации данных.

CQL_FILTER=population > 100000

Пример в OpenLayers:

wmsSource.updateParams({
  CQL_FILTER: 'population > 100000'
});

TIME

Поддержка временных слоёв.

TIME=2024-01-01/2024-12-31

Пример:

wmsSource.updateParams({
  TIME: '2025-06-01'
});

Используется для:

  • климатических данных
  • спутниковых снимков
  • исторических карт

VIEWPARAMS

Передача параметров в SQL-запросы сервера.

VIEWPARAMS=year:2025;type:urban

Работа с BBOX и проекциями

В OpenLayers BBOX вычисляется автоматически на основе текущего viewport.

Ключевые моменты:

  • при zoom изменяется масштаб BBOX
  • при pan смещаются координаты
  • CRS определяет порядок осей

Для EPSG:4326 в WMS 1.3.0:

BBOX=lat,minLon,lat,maxLon (оси меняются местами)

Ошибки в CRS приводят к:

  • перевёрнутым изображениям
  • смещению слоёв
  • отсутствию тайлов

Кэширование запросов

TileWMS активно использует кэширование:

  • URL включает параметры (hash запроса)
  • одинаковые тайлы переиспользуются
  • CDN ускоряет отдачу

Параметры, влияющие на кэш:

  • LAYERS
  • STYLES
  • TIME
  • CQL_FILTER

Изменение любого из них инвалидирует кэш.


Управление заголовками и исключениями

Некоторые WMS серверы поддерживают параметры ошибок:

EXCEPTIONS=application/vnd.ogc.se_xml

или

EXCEPTIONS=INIMAGE

В OpenLayers это редко настраивается вручную, но может быть передано через params.


Пример комплексной конфигурации WMS слоя

const complexWMS = new TileWMS({
  url: 'https://example.com/geoserver/wms',
  params: {
    LAYERS: 'city:roads',
    STYLES: '',
    VERSION: '1.3.0',
    FORMAT: 'image/png',
    TRANSPARENT: true,
    TILED: true,
    TIME: '2025-01-01',
    CQL_FILTER: 'type = \'highway\''
  },
  serverType: 'geoserver'
});

Параметры производительности

Ключевые факторы производительности WMS в OpenLayers:

  • размер тайлов (256×256 vs 512×512)
  • использование PNG vs JPEG
  • включение TILED
  • минимизация количества слоёв в запросе
  • ограничение сложных CQL фильтров

Частые ошибки при формировании параметров

  • несовпадение CRS между клиентом и сервером
  • неправильный порядок BBOX координат
  • отсутствие STYLES при обязательной конфигурации сервера
  • слишком большой WIDTH/HEIGHT в ImageWMS
  • отсутствие TRANSPARENT=true при наложении слоёв

Особенности поведения OpenLayers при генерации WMS-запросов

  • параметры сериализуются автоматически
  • каждый pan/zoom пересоздаёт BBOX
  • TileWMS дробит область на сетку тайлов
  • ImageWMS всегда запрашивает целую область
  • updateParams принудительно инвалидирует источник данных