Web Map Service (WMS) используется для получения картографических изображений с сервера в виде готовых растрированных тайлов или одиночных изображений. В контексте веб-картографических приложений WMS остаётся одним из базовых стандартов OGC, позволяя подключать геоданные без необходимости локального хранения или предварительной растеризации.
В OpenLayers поддержка WMS реализована через два основных источника
данных: TileWMS и ImageWMS, каждый из которых
ориентирован на свой способ загрузки данных.
WMS-сервер формирует изображения на основе HTTP-запросов. Каждый запрос содержит параметры:
BBOX)CRS или SRS)WIDTH, HEIGHT)LAYERS)FORMAT)STYLES)OpenLayers инкапсулирует формирование этих запросов, автоматически синхронизируя их с текущим состоянием карты: масштабом, центром и проекцией.
TileWMS используется для тайловой подгрузки. Карта
разбивается на сетку, и каждый тайл запрашивается отдельно. Такой подход
повышает производительность за счёт кэширования и параллельной
загрузки.
import TileLayer from 'ol/layer/Tile';
import TileWMS from 'ol/source/TileWMS';
const wmsLayer = new TileLayer({
source: new TileWMS({
url: 'https://example.com/geoserver/wms',
params: {
'LAYERS': 'workspace:layer_name',
'TILED': true
},
serverType: 'geoserver'
})
});
url — адрес WMS-сервераparams — набор WMS-параметровLAYERS — имя слоя или группы слоёвTILED — оптимизация под тайловую структуруserverType — адаптация под конкретный сервер
(GeoServer, MapServer и др.)ImageWMS запрашивает одно изображение на всю видимую
область карты. Такой подход уменьшает количество HTTP-запросов, но может
снижать производительность при сложных слоях.
import ImageLayer from 'ol/layer/Image';
import ImageWMS from 'ol/source/ImageWMS';
const wmsImageLayer = new ImageLayer({
source: new ImageWMS({
url: 'https://example.com/geoserver/wms',
params: {
'LAYERS': 'workspace:layer_name',
'FORMAT': 'image/png'
},
ratio: 1,
serverType: 'geoserver'
})
});
Динамическое изменение параметров позволяет управлять отображением слоёв без пересоздания источника данных.
const source = wmsLayer.getSource();
source.updateParams({
'STYLES': 'highlight',
'TIME': '2025-01-01'
});
Изменение параметров приводит к автоматическому обновлению запросов.
WMS существует в нескольких версиях (1.1.1, 1.3.0), что влияет на формат параметров:
SRS (в старых версиях)CRS (в новых версиях)BBOX (особенно в EPSG:4326)OpenLayers автоматически адаптирует запросы, но серверная конфигурация может требовать явного согласования версии.
new TileWMS({
url: 'https://example.com/wms',
params: {
'LAYERS': 'layer',
'VERSION': '1.3.0'
}
});
Одной из ключевых задач при работе с WMS является корректная работа с проекциями.
В OpenLayers проекция карты задаётся через view:
import Map from 'ol/Map';
import View from 'ol/View';
const map = new Map({
target: 'map',
view: new View({
projection: 'EPSG:3857',
center: [0, 0],
zoom: 2
})
});
WMS-сервер должен поддерживать ту же проекцию, иначе требуется reprojection или настройка сервера.
WMS-слои часто используются в комбинации с векторными слоями.
new TileLayer({
source: new TileWMS({
url: 'https://example.com/wms',
params: {
'LAYERS': 'workspace:roads',
'TRANSPARENT': true,
'FORMAT': 'image/png'
}
}),
opacity: 0.7
});
Параметр TRANSPARENT=true критичен для корректного
наложения слоёв.
Для принудительного обновления используется изменение временного параметра или вызов refresh через параметры.
source.updateParams({
'TIME': new Date().toISOString()
});
Также применяется cache-busting:
source.updateParams({
'_': Date.now()
});
Перед подключением WMS часто используется запрос:
https://example.com/geoserver/wms?service=WMS&request=GetCapabilities
Он возвращает XML-описание доступных слоёв, форматов и поддерживаемых проекций. OpenLayers может использовать парсеры для автоматической генерации конфигурации слоёв.
WMS может не поддерживать EPSG:3857, что приводит к смещению данных.
Неправильный порядок координат в версии 1.3.0 (особенно для EPSG:4326).
WMS-сервер должен разрешать кросс-доменные запросы, иначе изображения не загрузятся.
При неправильной настройке TILED возможны артефакты и
задержки загрузки.
Несколько источников могут накладываться друг на друга, формируя составные карты:
const layers = [
roadsLayer,
buildingsLayer,
parcelsLayer
];
Порядок слоёв определяет визуальную иерархию и влияет на читаемость карты.
Некоторые WMS-серверы поддерживают SLD (Styled Layer Descriptor):
params: {
'LAYERS': 'workspace:layer',
'SLD_BODY': '<StyledLayerDescriptor>...</StyledLayerDescriptor>'
}
Это позволяет изменять визуализацию без изменения данных слоя.
WMS часто используется как базовый слой в аналитических приложениях:
В OpenLayers такие слои комбинируются с:
VectorSource)Практики повышения производительности:
TILED=true