Работа с локальными системами координат

В веб-картографии базовое представление пространства строится вокруг понятия координатной системы. В OpenLayers работа с координатами организована через модуль проекций (ol/proj), который обеспечивает преобразование данных между различными системами координат, включая глобальные (EPSG:4326, EPSG:3857) и локальные пользовательские системы.

Локальная система координат применяется тогда, когда требуется ограничить область работы карты конкретным объектом: зданием, кампусом, промышленной площадкой, игровым уровнем или инженерной схемой. В таких случаях географическая привязка к Земле становится вторичной, а основой выступает условная метрическая или пиксельная система.


Базовая модель проекций в OpenLayers

В OpenLayers каждая система координат описывается объектом Projection. Он содержит:

  • код CRS (например, EPSG:3857)
  • диапазон допустимых координат (extent)
  • единицы измерения (метры, градусы, пиксели)
  • трансформационные функции (через proj4 или встроенные алгоритмы)

Основной набор функций находится в ol/proj:

  • fromLonLat([lon, lat])
  • toLonLat(coord)
  • transform(coord, source, destination)
  • addProjection(projection)
  • addCoordinateTransforms(source, destination, forward, inverse)

Глобальные и локальные координатные системы

Географические системы

Наиболее распространённые глобальные системы:

  • EPSG:4326 — широта/долгота в градусах
  • EPSG:3857 — Web Mercator в метрах

EPSG:3857 является стандартом для большинства веб-карт, поскольку обеспечивает удобную работу с тайловыми слоями.


Локальные системы координат

Локальная система координат в OpenLayers не привязана к географии напрямую. Она может быть:

  • метрической (условные метры)
  • пиксельной (экранные координаты)
  • инженерной (CAD-подобной)
  • игрового мира

Основная идея — определить собственную проекцию и зарегистрировать её в системе 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]
  })
});

Особенности локального View

В локальных системах координат:

  • центр карты задаётся в условных единицах
  • масштабирование часто определяется вручную через resolutions
  • отсутствует автоматическая зависимость от широты

Работа с разрешениями (resolutions)

В отличие от глобальных проекций, локальные системы требуют явного определения масштабов.

const resolutions = [];
for (let i = 0; i < 10; i++) {
  resolutions.push(Math.pow(2, 8 - i));
}

Эта схема используется для:

  • CAD-подобной детализации
  • многоуровневых схем помещений
  • игровых карт

Преобразование координат в локальной системе

Даже в локальной проекции может потребоваться трансформация координат между слоями или внешними данными.

import { transform } from 'ol/proj.js';

const sourceCoord = [30, 40];
const transformed = transform(
  sourceCoord,
  'EPSG:4326',
  localProjection
);

Такой подход используется при:

  • импорте GPS-данных в локальную систему
  • совмещении глобальных и локальных слоёв
  • калибровке инженерных данных

Интеграция proj4 для сложных локальных систем

Для нестандартных локальных или национальных систем координат используется 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
});

Это позволяет:

  • использовать собственные тайловые схемы
  • работать с офлайн-данными
  • интегрировать CAD-рендеринг

Слой изображения в локальной системе координат

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
  })
});

Особенности:

  • изображение полностью подчиняется локальной системе
  • отсутствует географическая привязка
  • координаты соответствуют пиксельной логике или метрам модели

Совмещение локальной и глобальной систем

Часто требуется комбинировать локальные и глобальные данные:

  • GPS-треки поверх локального плана
  • инженерные модели поверх спутниковых снимков
  • игровые сцены с географической привязкой
const gpsCoord = fromLonLat([76.945, 50.283]); // глобальная система

const localCoord = transform(
  gpsCoord,
  'EPSG:3857',
  localProjection
);

Такой подход требует строгого контроля единиц измерения и масштаба.


Область допустимых координат (extent) в локальных системах

Extent играет ключевую роль в ограничении пространства:

extent: [0, 0, 2000, 1500]

Применение:

  • предотвращение выхода камеры за границы модели
  • оптимизация рендеринга
  • фиксация рабочей области

Ограничения локальных систем координат

При проектировании локальной системы важно учитывать:

  • отсутствие автоматической географической привязки
  • необходимость ручного управления масштабами
  • зависимость тайловой структуры от конфигурации
  • сложность интеграции внешних геоданных без трансформации

Практические сценарии использования

Локальные системы координат применяются в задачах:

  • BIM и CAD-визуализация
  • внутренние карты зданий
  • игровые движки на базе веб-картографии
  • промышленные схемы и мониторинг оборудования
  • интерактивные планы складов и логистических центров