Web Map Service (WMS) — стандарт распространения растровых карт по HTTP, разработанный Open Geospatial Consortium. Основная идея заключается в том, что сервер формирует изображение карты на основе запроса клиента и возвращает его в виде PNG, JPEG или другого растрового формата.
В контексте CesiumJS WMS используется как источник изображений (Imagery Provider), который накладывается на 3D-глобус или 2D-карту. В отличие от тайловых сервисов (XYZ, WMTS), WMS генерирует изображение динамически, что обеспечивает гибкость, но требует внимательного подхода к производительности.
WMS основан на модели «запрос — изображение». Клиент формирует HTTP-запрос к серверу с параметрами:
Сервер возвращает готовое растровое изображение, которое не содержит векторной структуры.
Ключевые операции WMS:
В CesiumJS для работы с WMS используется класс
WebMapServiceImageryProvider.
const viewer = new Cesium.Viewer("cesiumContainer");
const wmsProvider = new Cesium.WebMapServiceImageryProvider({
url: "https://your-wms-server.com/geoserver/wms",
layers: "workspace:layer_name",
parameters: {
service: "WMS",
version: "1.1.1",
request: "GetMap",
styles: "",
format: "image/png",
transparent: true
}
});
viewer.imageryLayers.addImageryProvider(wmsProvider);
Адрес WMS-сервера. Часто это GeoServer, MapServer или QGIS Server.
Список слоёв, разделённых запятыми.
Примеры:
roadsworkspace:buildingshydrography,landuseОбъект параметров WMS-запроса:
service — всегда WMSversion — 1.1.1 или 1.3.0request — GetMapstyles — стиль слоя (может быть пустым)format — формат изображения (image/png,
image/jpeg)transparent — прозрачность фонаПозволяет задать формат ответа GetFeatureInfo:
getFeatureInfoFormat: new Cesium.GetFeatureInfoFormat("application/json", parseFunction)
WMS поддерживает разные CRS:
CesiumJS по умолчанию работает в 3D-глобальной системе координат WGS84, поэтому наиболее совместимым вариантом является EPSG:4326.
При несовпадении проекций сервер выполняет репроекцию «на лету», что увеличивает нагрузку.
WMS часто используется как дополнительный слой поверх базовой карты:
Для корректного наложения важно:
transparent: trueviewer.imageryLayers.addImageryProvider(wmsProvider);
wmsProvider.alpha = 0.7;
WMS позволяет комбинировать слои на сервере:
layers: "roads,buildings,landuse"
Особенности:
Многие WMS-сервера поддерживают расширения:
parameters: {
time: "2025-01-01T00:00:00Z"
}
Используется для:
Некоторые серверы поддерживают CQL или FILTER:
parameters: {
CQL_FILTER: "population > 10000"
}
WMS может возвращать информацию о точке запроса.
В CesiumJS это реализуется через picking:
const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
handler.setInputAction(function (movement) {
const cartesian = viewer.camera.pickEllipsoid(movement.position);
if (!cartesian) return;
const pickedLayer = viewer.imageryLayers.pickImageryLayerFeatures(movement.position);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
Сервер возвращает:
WMS — один из самых «тяжёлых» источников данных.
GeoServer + GeoWebCache значительно ускоряют WMS.
Уменьшение width и height запросов снижает
нагрузку.
Если доступен WMTS, он предпочтительнее.
| Параметр | WMS | WMTS | XYZ |
|---|---|---|---|
| Генерация | динамическая | тайлы | тайлы |
| Производительность | низкая | высокая | высокая |
| Гибкость | высокая | средняя | низкая |
| Настройка слоёв | серверная | ограниченная | нет |
Из-за CORS многие WMS-серверы требуют прокси:
url: new Cesium.Resource({
url: "/proxy?url=https://server.com/wms"
})
Причины:
GeoServer является наиболее распространённой реализацией WMS.
Типичная структура:
Пример слоя:
workspace:urban_zones
CesiumJS напрямую работает с опубликованным WMS endpoint.
Частые проблемы:
Сервер не поддерживает запрошенную проекцию.
Решение:
Причины:
Причины:
const provider = new Cesium.WebMapServiceImageryProvider({
url: "https://example.com/wms",
layers: "cities",
rectangle: Cesium.Rectangle.fromDegrees(-180, -90, 180, 90),
minimumLevel: 0,
maximumLevel: 18,
tileWidth: 256,
tileHeight: 256,
tilingScheme: new Cesium.GeographicTilingScheme()
});
WMS часто комбинируется с:
Пример гибридной сцены:
WMS-слой в Cesium:
При увеличении масштаба Cesium пересчитывает bounding box и запрашивает новые изображения у WMS.
При проектировании серверной части важно:
Типовые применения:
CesiumJS позволяет визуализировать эти данные в глобальном 3D-контексте, сохраняя совместимость с классическими GIS-серверами.