В веб-картографии базовое представление пространства строится вокруг
понятия координатной системы. В OpenLayers работа с координатами
организована через модуль проекций (ol/proj), который
обеспечивает преобразование данных между различными системами координат,
включая глобальные (EPSG:4326, EPSG:3857) и локальные пользовательские
системы.
Локальная система координат применяется тогда, когда требуется ограничить область работы карты конкретным объектом: зданием, кампусом, промышленной площадкой, игровым уровнем или инженерной схемой. В таких случаях географическая привязка к Земле становится вторичной, а основой выступает условная метрическая или пиксельная система.
В OpenLayers каждая система координат описывается объектом
Projection. Он содержит:
EPSG:3857)Основной набор функций находится в ol/proj:
fromLonLat([lon, lat])toLonLat(coord)transform(coord, source, destination)addProjection(projection)addCoordinateTransforms(source, destination, forward, inverse)Наиболее распространённые глобальные системы:
EPSG:3857 является стандартом для большинства веб-карт, поскольку обеспечивает удобную работу с тайловыми слоями.
Локальная система координат в OpenLayers не привязана к географии напрямую. Она может быть:
Основная идея — определить собственную проекцию и зарегистрировать её в системе OpenLayers.
Локальная проекция задаётся через объект Projection:
import Projection from 'ol/proj/Projection.js';
import { addProjection } from 'ol/proj.js';
const localProjection = new Projection({
code: 'LOCAL:1000',
units: 'm',
extent: [0, 0, 10000, 10000]
});
addProjection(localProjection);
Ключевые параметры:
code — уникальный идентификатор системы координатunits — единицы измерения (m,
pixels, degrees)extent — допустимая область координатЧтобы карта работала в локальной системе координат, необходимо задать
view с соответствующей проекцией:
import Map from 'ol/Map.js';
import View from 'ol/View.js';
const map = new Map({
target: 'map',
view: new View({
projection: localProjection,
center: [5000, 5000],
zoom: 2,
resolutions: [8, 4, 2, 1]
})
});
В локальных системах координат:
resolutionsВ отличие от глобальных проекций, локальные системы требуют явного определения масштабов.
const resolutions = [];
for (let i = 0; i < 10; i++) {
resolutions.push(Math.pow(2, 8 - i));
}
Эта схема используется для:
Даже в локальной проекции может потребоваться трансформация координат между слоями или внешними данными.
import { transform } from 'ol/proj.js';
const sourceCoord = [30, 40];
const transformed = transform(
sourceCoord,
'EPSG:4326',
localProjection
);
Такой подход используется при:
Для нестандартных локальных или национальных систем координат используется Proj4js.
import proj4 from 'proj4';
import { register } from 'ol/proj/proj4.js';
proj4.defs('LOCAL:2000', '+proj=aeqd +lat_0=0 +lon_0=0 +units=m');
register(proj4);
После регистрации система становится доступной в OpenLayers как обычная проекция.
Часто локальные системы координат строятся вокруг изображения или плана.
const imageSize = [4096, 4096];
const pixelProjection = new Projection({
code: 'PIXEL:0',
units: 'pixels',
extent: [0, 0, imageSize[0], imageSize[1]]
});
Используется в случаях:
При использовании тайлов в локальной системе необходимо вручную
определить tileGrid.
import TileGrid from 'ol/tilegrid/TileGrid.js';
const tileGrid = new TileGrid({
extent: [0, 0, 10000, 10000],
resolutions: [32, 16, 8, 4, 2, 1],
tileSize: 256
});
Это позволяет:
import ImageLayer from 'ol/layer/Image.js';
import Static from 'ol/source/ImageStatic.js';
const imageLayer = new ImageLayer({
source: new Static({
url: 'plan.png',
imageExtent: [0, 0, 10000, 10000],
projection: localProjection
})
});
Особенности:
Часто требуется комбинировать локальные и глобальные данные:
const gpsCoord = fromLonLat([76.945, 50.283]); // глобальная система
const localCoord = transform(
gpsCoord,
'EPSG:3857',
localProjection
);
Такой подход требует строгого контроля единиц измерения и масштаба.
Extent играет ключевую роль в ограничении пространства:
extent: [0, 0, 2000, 1500]
Применение:
При проектировании локальной системы важно учитывать:
Локальные системы координат применяются в задачах: