В веб-картографии любое географическое положение описывается через систему координат (Coordinate Reference System, CRS). Это формальная модель, которая задаёт, каким образом реальные земные координаты преобразуются в числовые значения, пригодные для вычислений и отображения на плоскости.
В современных веб-приложениях картографии ключевым элементом является библиотека OpenLayers, которая строит всю работу с картой вокруг строгого разделения между:
Такое разделение позволяет одновременно работать с разными источниками данных, каждый из которых может использовать собственную систему координат.
Географическая система координат описывает положение точки на поверхности Земли через:
Наиболее распространённая система — WGS84 (EPSG:4326). Она используется GPS и большинством геоинформационных сервисов.
Особенности EPSG:4326:
В OpenLayers эти координаты считаются «человеческими» и используются для хранения исходных данных, но не для рендеринга карты напрямую.
Для отображения карты на плоском экране требуется переход от сферической модели к плоской проекции. Это преобразование выполняется через проекционные системы координат.
Наиболее важная проекция в веб-картографии:
y = (( + ))
Характеристики:
Причина популярности заключается в простоте тайлинга: вся поверхность Земли проецируется на квадратную сетку, которую легко разбить на уровни масштабирования.
В OpenLayers все преобразования координат централизованы в модуле
ol/proj.
Основные функции:
transform(coord, source, destination)fromLonLat(coord)toLonLat(coord)get() — получение описания проекцииaddProjection() — добавление кастомной CRSПример преобразования координат:
import { transform, fromLonLat, toLonLat } from 'ol/proj';
// Географические координаты (EPSG:4326)
const lonLat = [69.589, 50.283];
// Перевод в Web Mercator (EPSG:3857)
const webMercator = fromLonLat(lonLat);
// Обратное преобразование
const backToLonLat = toLonLat(webMercator);
// Универсальный transform
const custom = transform(lonLat, 'EPSG:4326', 'EPSG:3857');
Внутренняя модель OpenLayers всегда предполагает, что:
Каждая карта в OpenLayers имеет объект View, который
определяет:
Пример:
import Map from 'ol/Map';
import View from 'ol/View';
const view = new View({
projection: 'EPSG:3857',
center: fromLonLat([69.589, 50.283]),
zoom: 10
});
Ключевая идея:
В OpenLayers масштаб карты не хранится напрямую. Вместо него
используется resolution.
Связь между ними:
resolution =
Особенности:
Extent — это прямоугольная область в координатной системе вида:
[minX, minY, maxX, maxY]
В EPSG:3857:
Пример:
import { getView } from 'ol/View';
const extent = view.calculateExtent();
Extent используется для:
Каждый геометрический объект в OpenLayers хранит координаты в собственной структуре:
Пример:
import Feature from 'ol/Feature';
import Point from 'ol/geom/Point';
import { fromLonLat } from 'ol/proj';
const feature = new Feature({
geometry: new Point(fromLonLat([69.589, 50.283]))
});
Важно:
geometry.transform.Типичная архитектура OpenLayers предполагает две независимые системы:
Пример загрузки данных:
import GeoJSON from 'ol/format/GeoJSON';
const format = new GeoJSON({
dataProjection: 'EPSG:4326',
featureProjection: 'EPSG:3857'
});
Это обеспечивает автоматическое преобразование геометрий при загрузке.
OpenLayers позволяет регистрировать собственные CRS:
import { register } from 'ol/proj/proj4';
import proj4 from 'proj4';
proj4.defs('EPSG:3395', '+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs');
register(proj4);
После регистрации система становится доступной для:
Viewtransformol/sourceКастомные проекции используются в:
TileGrid тесно связан с проекцией EPSG:3857.
Каждый уровень zoom:
Это делает систему масштабируемой и предсказуемой:
Неправильная работа с CRS приводит к системным ошибкам:
fromLonLat искажается координаты,featureProjection,OpenLayers выполняет трансформации:
Все события мыши возвращают координаты в системе View:
map.on('click', (evt) => {
const coord = evt.coordinate;
});
При необходимости координаты переводятся в географические:
import { toLonLat } from 'ol/proj';
const lonLat = toLonLat(evt.coordinate);
Архитектура координат в OpenLayers строится вокруг трёх уровней:
Связь между ними обеспечивается единым модулем трансформации, который делает возможной работу с гетерогенными геоданными в единой визуальной системе.