Работа со статическими изображениями в OpenLayers строится вокруг отображения растрового файла как геопривязанного слоя без обращения к тайловым серверам или динамическим источникам данных. Такой подход используется для оверлеев исторических карт, схем помещений, планов территорий, результатов моделирования, ортофотопланов фиксированного масштаба.
Статическое изображение в OpenLayers представляется как слой
(ImageLayer), использующий источник
ImageStatic. В отличие от тайловых слоёв, здесь вся
картинка загружается целиком и привязывается к заданному географическому
экстенту.
Ключевая идея заключается в том, что изображение рассматривается как плоская геометрическая поверхность, растянутая на координатную систему карты.
Основные параметры:
url — путь к изображениюimageExtent — географический прямоугольник
привязкиprojection — система координатimageSize — физический размер изображения
(опционально)Статическое изображение подключается через
ol/source/ImageStatic.
import Map from 'ol/Map.js';
import View from 'ol/View.js';
import ImageLayer from 'ol/layer/Image.js';
import ImageStatic from 'ol/source/ImageStatic.js';
const extent = [0, 0, 1024, 768];
const layer = new ImageLayer({
source: new ImageStatic({
url: 'map.png',
imageExtent: extent
})
});
const map = new Map({
target: 'map',
layers: [layer],
view: new View({
projection: 'EPSG:3857',
center: [512, 384],
zoom: 2,
extent: extent
})
});
В этом примере изображение интерпретируется как плоская карта, где координаты изображения напрямую соответствуют координатам карты.
Ключевым этапом является определение imageExtent. Этот
параметр задаёт границы, в которых изображение будет растянуто.
Экстент представляет собой массив:
[minX, minY, maxX, maxY]
Он определяет:
При использовании проекции EPSG:3857 значения должны
соответствовать метрам в Web Mercator.
Статические изображения часто используют условные координаты. В таких случаях применяется пользовательская проекция.
import { get as getProjection } from 'ol/proj.js';
const projection = getProjection('EPSG:3857');
const extent = [0, 0, 2000, 1000];
const source = new ImageStatic({
url: 'floorplan.png',
imageExtent: extent,
projection: projection
});
Использование условных координат позволяет интерпретировать изображение как произвольную плоскость без привязки к реальной географии.
Статические изображения не обладают тайловой структурой, поэтому масштабирование осуществляется целиком. Это приводит к прямой зависимости качества от исходного разрешения изображения.
При увеличении масштаба:
При уменьшении масштаба:
Как и любой слой OpenLayers, ImageLayer поддерживает
управление отображением:
layer.setOpacity(0.6);
layer.setVisible(true);
layer.setZIndex(10);
Эти параметры позволяют накладывать изображение поверх векторных или тайловых слоёв.
Статическое изображение часто используется как подложка для векторных данных. В этом случае важно обеспечить совпадение систем координат.
import VectorLayer from 'ol/layer/Vector.js';
import VectorSource from 'ol/source/Vector.js';
import Feature from 'ol/Feature.js';
import Point from 'ol/geom/Point.js';
const point = new Feature({
geometry: new Point([500, 400])
});
const vectorLayer = new VectorLayer({
source: new VectorSource({
features: [point]
})
});
Если координатные системы совпадают, векторные объекты точно накладываются на изображение.
При использовании геопривязанных изображений (например, ортофото) экстент задаётся в реальных координатах:
const extent = [
418000, 5630000,
420000, 5632000
];
const source = new ImageStatic({
url: 'orthophoto.tif.png',
imageExtent: extent,
projection: 'EPSG:3857'
});
В таких случаях изображение становится частью геопространственной сцены и может совмещаться с другими слоями данных.
ImageStatic загружает изображение один раз при
инициализации слоя. Повторная загрузка происходит только при изменении
параметров источника.
Характерные особенности:
При невозможности загрузки изображения слой может быть скрыт или отображён пустым.
const source = new ImageStatic({
url: 'map.png',
imageExtent: extent,
imageLoadFunction: function(image, src) {
const img = image.getImage();
img.src = src;
img.oner ror = function() {
console.log('Ошибка загрузки изображения');
};
}
});
Источник может быть заменён без пересоздания карты:
layer.setSource(new ImageStatic({
url: 'new-map.png',
imageExtent: extent
}));
Это используется при переключении версий схем или обновлении данных.
OpenLayers рассматривает изображение как прямоугольную геометрию, где каждый пиксель соотносится с координатой.
Преобразование осуществляется линейно:
При построении схем помещений часто применяется условная система:
const extent = [0, 0, 100, 50];
const source = new ImageStatic({
url: 'building-plan.png',
imageExtent: extent
});
В этом случае:
При необходимости совмещения с геоданными используется преобразование:
import { fromLonLat } from 'ol/proj.js';
const center = fromLonLat([74.6, 42.8]);
Хотя статическое изображение само по себе не выполняет проекционные вычисления, оно может быть встроено в карту с общей системой координат.
Типичная конфигурация включает:
ImageLayer — статическое изображениеVectorLayer — интерактивные объектыTileLayer — подложка (при необходимости)Порядок слоёв влияет на визуальную иерархию:
Использование статических изображений связано с рядом ограничений:
Статические изображения применяются в случаях: