В библиотеке 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 управляет их генерацией динамически в зависимости от масштаба и области просмотра.
Определяет список слоёв, которые должны быть отрисованы сервером.
LAYERS=roads,buildings,water
Определяет стили отображения слоёв.
STYLES=default
Определяет систему координат запроса.
CRSSRSCRS=EPSG:3857
Критически важно соответствие CRS между клиентом OpenLayers и сервером WMS, иначе происходит смещение изображения.
Географический bounding box — ключевой параметр запроса.
BBOX=minX,minY,maxX,maxY
Особенности:
Размер изображения, запрашиваемого у сервера.
WIDTH=256
HEIGHT=256
Формат возвращаемого изображения.
Наиболее распространённые значения:
image/png — поддержка прозрачностиimage/jpeg — быстрее, но без альфа-каналаimage/webp — реже, но оптимизированоFORMAT=image/png
Управляет прозрачностью фона.
TRANSPARENT=true
Используется при наложении нескольких слоёв.
Версия WMS протокола.
1.1.1 — устаревшая, но широко поддерживаемая1.3.0 — актуальная версияVERSION=1.3.0
Версия влияет на:
В OpenLayers WMS подключается через источник ImageWMS
или TileWMS.
Используется для единичного изображения карты.
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
});
Особенности:
Используется тайловая схема загрузки.
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=true сообщает серверу, что запросы будут
разбиваться на тайлы.
TILED=true
Особенности:
OpenLayers позволяет изменять параметры WMS без пересоздания слоя.
wmsSource.updateParams({
LAYERS: 'workspace:new_layer',
TIME: '2025-01-01'
});
Механизм:
WMS позволяет передавать нестандартные параметры, которые обрабатываются сервером.
Используется в GeoServer для фильтрации данных.
CQL_FILTER=population > 100000
Пример в OpenLayers:
wmsSource.updateParams({
CQL_FILTER: 'population > 100000'
});
Поддержка временных слоёв.
TIME=2024-01-01/2024-12-31
Пример:
wmsSource.updateParams({
TIME: '2025-06-01'
});
Используется для:
Передача параметров в SQL-запросы сервера.
VIEWPARAMS=year:2025;type:urban
В OpenLayers BBOX вычисляется автоматически на основе текущего viewport.
Ключевые моменты:
Для EPSG:4326 в WMS 1.3.0:
BBOX=lat,minLon,lat,maxLon (оси меняются местами)
Ошибки в CRS приводят к:
TileWMS активно использует кэширование:
Параметры, влияющие на кэш:
Изменение любого из них инвалидирует кэш.
Некоторые WMS серверы поддерживают параметры ошибок:
EXCEPTIONS=application/vnd.ogc.se_xml
или
EXCEPTIONS=INIMAGE
В OpenLayers это редко настраивается вручную, но может быть передано
через params.
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: