В основе любой картографической системы лежит способ описания положения точки на поверхности Земли. Для унификации таких описаний используется система кодов EPSG (European Petroleum Survey Group), представляющая собой каталог геодезических систем координат, проекций и датумов. Каждый код EPSG однозначно определяет набор параметров, необходимых для корректного преобразования географических данных.
В веб-картографии, включая OpenLayers, EPSG-коды определяют, как именно интерпретируются координаты и в какой проекции отображается карта.
Система координат в контексте EPSG делится на два базовых типа:
В географической системе координаты задаются в виде широты и долготы:
Наиболее распространённый стандарт:
EPSG:4326 (WGS 84)
Он используется в GPS и большинстве геоданных API. Координаты здесь выражаются в градусах.
Особенности:
Проекционные системы преобразуют сферическую поверхность Земли в плоскость.
Наиболее известный пример:
EPSG:3857 (Web Mercator)
Используется в большинстве веб-карт (Google Maps, OpenStreetMap, Mapbox).
Особенности:
OpenLayers работает с системой проекций через модуль
ol/proj. По умолчанию библиотека использует Web
Mercator:
При загрузке данных происходит автоматическое или ручное преобразование координат между системами.
Основная операция при работе с EPSG-кодами — трансформация координат.
import { transform } from 'ol/proj';
const wgs84Coord = [30.3141, 59.9386]; // EPSG:4326 (долгота, широта)
const webMercatorCoord = transform(
wgs84Coord,
'EPSG:4326',
'EPSG:3857'
);
Функция transform выполняет преобразование между двумя
системами координат.
import { transform } from 'ol/proj';
const mercatorCoord = [3372660, 8382695];
const geoCoord = transform(
mercatorCoord,
'EPSG:3857',
'EPSG:4326'
);
Обратное преобразование используется при отображении координат пользователя или при работе с внешними API.
OpenLayers позволяет явно задавать систему координат для карты.
import Map from 'ol/Map';
import View from 'ol/View';
const map = new Map({
view: new View({
projection: 'EPSG:3857',
center: [0, 0],
zoom: 2
})
});
Здесь проекция определяет, в каких единицах интерпретируются координаты центра и масштаба.
Не все системы координат встроены в OpenLayers по умолчанию. Для расширенных или локальных систем используется библиотека proj4.
import proj4 from 'proj4';
import { register } from 'ol/proj/proj4';
register(proj4);
import proj4 from 'proj4';
import { register } from 'ol/proj/proj4';
import { get as getProjection } from 'ol/proj';
proj4.defs(
'EPSG:32637',
'+proj=utm +zone=37 +datum=WGS84 +units=m +no_defs'
);
register(proj4);
const projection = getProjection('EPSG:32637');
projection.setExtent([0, 0, 1000000, 10000000]);
EPSG:32637 — пример UTM-зоны, используемой для точных измерений на локальных территориях.
EPSG:3857 получил широкое распространение благодаря сочетанию технических и практических факторов:
Однако у него есть ограничения:
EPSG:4326 остаётся основным форматом обмена геоданными.
В OpenLayers он часто используется для:
Пример GeoJSON:
const feature = {
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [30.3141, 59.9386]
}
};
При отображении на карте требуется преобразование в EPSG:3857.
Каждый слой в OpenLayers может иметь собственную систему координат.
import TileLayer from 'ol/layer/Tile';
import OSM from 'ol/source/OSM';
const layer = new TileLayer({
source: new OSM({
projection: 'EPSG:3857'
})
});
Несовпадение проекций слоя и карты приводит к необходимости трансформации координат.
EPSG-код напрямую влияет на интерпретацию масштаба.
OpenLayers автоматически пересчитывает масштаб в зависимости от текущей проекции.
Стандарт веб-карт, Web Mercator.
Географическая система WGS 84.
World Mercator, альтернативная проекция с иной моделью эллипсоида.
UTM-зоны, применяются для локальной точной картографии.
При попытке отобразить данные без трансформации возникают смещения объектов.
При использовании кастомных EPSG-кодов без proj4
возникает ошибка неизвестной системы координат.
OpenLayers использует цепочку:
Это позволяет ускорять повторные вычисления при отрисовке карты.
Каждая EPSG-система основана на модели Земли:
Несоответствие датумов приводит к смещениям до нескольких десятков метров.
В типичных веб-приложениях:
OpenLayers выступает как слой абстракции, скрывающий сложность этих преобразований и обеспечивающий согласованное отображение пространственных данных.