Документация
Справочник JavaScript API
2.1.62 (текущая версия)
collection
interactivityModel
Интерфейсы
2.1.64 (релиз-кандидат)
collection
interactivityModel
Интерфейсы

Координаты и проекции

Координаты

Положение точки на карте описывается с помощью некоторых координат. Если речь идет о карте земной поверхности, то обычно используют сферические координаты – широту и долготу.

Чтобы сопоставить точкам на поверхности сферы координаты, необходимо задать начало отсчета — фундаментальную плоскость для отсчета широт и нулевой меридиан для отсчета долгот. Для Земли обычно используются плоскость экватора и гринвичский меридиан соответственно.

Широтой (обычно обозначается φ) называют угол между направлением на точку из центра сферы и фундаментальной плоскостью (плоскостью экватора). Долготой (обычно обозначается θ или λ) называют угол между плоскостью проходящего через точку меридиана и плоскостью нулевого меридиана.

Долготы могут принимать значения от -180 до 180 градусов, широты — от -90 до 90 градусов.

Геодезические системы

Так как Земля не является шаром, то требуются дополнительные правила, позволяющие сопоставить каждой точке земной поверхности пару координат. Эти правила определяются геодезической системой.

В настоящий момент абсолютное большинство географических сервисов (включая Яндекс.Карты) используют систему WGS 84, в которой Земля считается эллипсоидом с экваториальным радиусом 6378.137 км и полярным радиусом 6356.752 км.

Проекции

Для того, чтобы карту мира можно было отобразить на плоскость, необходимо каким-то образом построить проекцию изображения. Яндекс.Карты, как и большинство других геоинформационных сервисов, используют проекцию Меркатора.

Обратите внимание: проекция Меркатора искажает форму и размеры объектов; чем ближе объект к полюсу, тем большую площадь на карте он занимает. Например, Гренландия кажется большей, чем Австралия, хотя в реальности Австралия в 3.5 раза больше Гренландии.

В отличие от некоторых других картографических сервисов, Яндекс.Карты используют эллиптическую (согласно WGS 84), а не сферическую проекцию Меркатора. Поэтому карта от Яндекса при наложении не будет совпадать с картами в сферической проекции Меркатора.

Работа с Яндекс.Картами с помощью API возможна в обеих проекциях (см. ymaps.projection.wgs84Mercator и ymaps.projection.sphericalMercator).

Декартовы координаты

Использовать географические координаты не всегда целесообразно. Трудно представить, например, что удобно будет использовать долготу и широту для задания координат точек на схеме офиса. Для этой цели логичнее использовать широко распространенную и привычную декартову (прямоугольную) систему координат. API Яндекс.Карт поддерживает работу в декартовых координатах (см. ymaps.projection.Cartesian).

Пользовательские координаты

API Яндекс.Карт может отображать карты, выполненные в любой проекции, и оперировать любыми координатами. Для этого достаточно задать для карты правила пересчета координат точки в пиксельную систему координат (см. следующий раздел) и обратно. Пользовательская карта может быть склеена по любой из осей и даже по двум осям сразу.

Карта в браузере

В результате проецирования мы получаем отображение географической карты на бесконечную пиксельную плоскость. Карта в браузере показывает небольшую часть этой плоскости (т. н. область картографирования).

Для того, чтобы с картой было удобно работать, вводится понятие коэффициента (уровня) масштабирования. На нулевом уровне весь «мир» отображается на область размером 256х256 пикселей. При увеличении коэффициента масштабирования на единицу размеры «мира» увеличиваются ровно в 2 раза и, следовательно, для уровня масштабирования z составляют 2z+8x2z+8 пикселей.

Таким образом, каждая точка на карте описывается своими пиксельными координатами и уровнем масштабирования. Точка отсчета пиксельных координат находится в левом верхнем углу карты. Зная проекцию карты, можно легко преобразовать географические координаты в пиксельные и обратно.

Тайлы

Для удобного и эффективного показа карты, ее изображение разрезается на квадраты размером 256x256 пикселей — тайлы. При формировании изображения в браузере, API загружает только те тайлы, которые видны в данный момент, что позволяет экономить трафик и эффективно использовать кэширование.

На наименьшем масштабе (коэффициент масштабирования 0) вся территория покрывается одним тайлом.

На следующем масштабе (коэффициент масштабирования 1) вся территория умещается на четырех тайлах.

На еще более подробном масштабе (коэффициент масштабирования 2) всю земную поверхность покрывает сетка из 16 (4х4) тайлов, и так далее.

Таким образом, каждый шаг масштаба разбивает карту на 4N тайлов, где N — коэффициент масштабирования.

Обычно тайлы адресуются так же, как и пиксельные координаты — от левого верхнего угла "мира". Чтобы получить номер тайла, нужно глобальные пиксельные координаты его верхнего левого угла разделить на 256 и округлить в меньшую сторону.

Разбиение карты на участки может пригодиться не только для отображения собственно подложки, но и сервисам, предоставляющим значительные объемы информации. Тайловый подход используется, например, в технологиях кластеризации и слоев активных областей. При этом API Яндекс.Карт поддерживает любые механизмы разбиения плоскости на участки, не обязательно в виде равных квадратов — достаточно задать правила пересчета номеров тайлов в глобальные пиксели и обратно.