ICoordSystem

Интерфейс координатной системы карты. Этот интерфейс необходимо реализовать в случае использования нестандартных (например, цилиндрических) координат. Для решения задач поиска траектории движения по земной поверхности, используйте coordSystem.geo , по декартовой плоскости — coordSystem.cartesian .

См.: coordSystem.geo coordSystem.cartesian

Конструктор | Методы

Конструктор

ICoordSystem()

Методы

Имя Возвращает Описание
getDistance (point1, point2)

Number

Возвращает кратчайшее (вдоль геодезической линии) расстояние между двумя заданными точками (в метрах).

solveDirectProblem (startPoint, direction, distance)

Object

Решает так называемую первую (прямую) геодезическую задачу: где мы окажемся, если выйдем из указанной точки в указанном направлении и пройдём, не сворачивая, указанное расстояние. Решением прямой геодезической задачи являются следующие данные:
  • конечная точка,
  • конечное направление,
  • функция пути,
  • функция, позволяющая для произвольного момента времени указать, в какой точке мы будем находиться и в каком направлении двигаться.
solveInverseProblem (startPoint, endPoint[, reverseDirection])

Object

Решает так называемую вторую (обратную) геодезическую задачу: построить кратчайший маршрут между двумя точками на картографируемой поверхности и определелить расстояние и направление движения. Обратите внимание: на карте земной поверхности кратчайшие маршруты изображаются кривыми линиями. Для геообъектов в API можно включить режим отображения кратчайших расстояний между точками с помощью опции geodesic.

Описание методов

getDistance

{Number} getDistance(point1, point2)

Возвращает кратчайшее (вдоль геодезической линии) расстояние между двумя заданными точками (в метрах).

Параметры:

Параметр Значение по умолчанию Описание
point1 *

Тип: Number[]

Первая точка.

point2 *

Тип: Number[]

Вторая точка.

* Обязательный параметр/опция.

Пример:

// Рассчитаем расстояние между Москвой и Нью-Йорком
// Координаты Москвы
ymaps.geocode('Москва').then(function (res) {
    var moscowCoords = res.geoObjects.get(0).geometry.getCoordinates();
    // Координаты Нью-Йорка
    ymaps.geocode('Нью-Йорк').then(function (res) {
        var newYorkCoords = res.geoObjects.get(0).geometry.getCoordinates();
        // Расстояние
        alert(ymaps.formatter.distance(
            ymaps.coordSystem.geo.getDistance(moscowCoords, newYorkCoords)
        ));
    });
});

solveDirectProblem

{Object} solveDirectProblem(startPoint, direction, distance)
Решает так называемую первую (прямую) геодезическую задачу: где мы окажемся, если выйдем из указанной точки в указанном направлении и пройдём, не сворачивая, указанное расстояние. Решением прямой геодезической задачи являются следующие данные:
  • конечная точка,
  • конечное направление,
  • функция пути,
  • функция, позволяющая для произвольного момента времени указать, в какой точке мы будем находиться и в каком направлении двигаться.
Возвращает объект со следующими полями:
  • startPoint - начальная точка в геокоординатах,
  • startDirection - начальное направление движения,
  • endPoint - конечная точка в геокоординатах,
  • endDirection - конечное направление движения,
  • distance - расстояние в метрах,
  • pathFunction — функция, принимающая число от 0 до 1 (доля пройденного пути) и возвращающая структуру с полями point и direction.
.

Параметры:

Параметр Значение по умолчанию Описание
startPoint *

Тип: Number[]

Точка отправления.

direction *

Тип: Number[]

Направление. Задаётся в виде вектора (приращение координат) [dlat, dlon] либо [dlon, dlat], в завивимости от параметра coordorder. Для того чтобы получить из заданного таким образом направления азимут (угол между направлением движения и направлением на север), необходимо вычислить арктангенс величины dlon/dlat (в JavaScript — стандартная функция Math.atan2(dlon, dlat)). Для того чтобы по известному азимуту "a" вычислить направление движения, нужно положить dlat = cos(a), dlon = sin(a).

distance *

Тип: Number

Пройденное расстояние в метрах.

* Обязательный параметр/опция.

Пример:

// Допустим, мы вылетели из аэропорта Домодедово на северо-восток и
// пролетели 200 километров по прямой. // Изобразим наш путь с помощью меток
// на карте.

// Найдём с помощью геокодирования координаты начальной точки.
ymaps.geocode('аэропорт Домодедово').then(function (res) {
    var startPoint = res.geoObjects.get(0).geometry.getCoordinates(),
    // Движемся на северо-восток, азимут 45 градусов
    // или pi/4 радиан.
        azimuth = Math.PI / 4,
    // Направление движения.
        direction = [Math.cos(azimuth), Math.sin(azimuth)],
    // Путевая функция
        path = ymaps.coordSystem.geo
            .solveDirectProblem(startPoint, direction, 2e5).pathFunction;

    // Изобразим путь на карте с помощью меток,
    // проставленных через каждые 10 км.
    for (var i = 0; i <= 20; i++) {
        map.geoObjects.add(new ymaps.Placemark(path(i/20).point));
    }
});

solveInverseProblem

{Object} solveInverseProblem(startPoint, endPoint[, reverseDirection])

Решает так называемую вторую (обратную) геодезическую задачу: построить кратчайший маршрут между двумя точками на картографируемой поверхности и определелить расстояние и направление движения. Обратите внимание: на карте земной поверхности кратчайшие маршруты изображаются кривыми линиями. Для геообъектов в API можно включить режим отображения кратчайших расстояний между точками с помощью опции geodesic.

Возвращает объект со следующими полями:
  • startPoint - начальная точка в геокоординатах,
  • startDirection - начальное направление движения,
  • endPoint - конечная точка в геокоординатах,
  • endDirection - конечное направление движения,
  • distance - расстояние в метрах,
  • pathFunction - функция пути, принимающая число от 0 до 1 (доля пройденного пути) и возвращающая структуру с полями point и direction.
.

Параметры:

Параметр Значение по умолчанию Описание
startPoint *

Тип: Number[]

Точка отправления.

endPoint *

Тип: Number[]

Точка прибытия.

reverseDirection false

Тип: Boolean

Направление движения. false - выбрать кратчайшую дугу, true - выбрать обратную кратчайшей.

* Обязательный параметр/опция.

Пример:

// Построим кратчайший маршрут от Калининграда до Владивостока
// Найдём координаты Калининграда
ymaps.geocode('Калининград').then(function (res) {
    var startPoint = res.geoObjects.get(0).geometry.getCoordinates();
    // Найдём координаты Владивостока
    ymaps.geocode('Владивосток').then(function (res) {
        var endPoint = res.geoObjects.get(0).geometry.getCoordinates(),
        // Найдём функцию пути между двумя точками
        path = ymaps.coordSystem.geo
            .solveInverseProblem(startPoint, endPoint).pathFunction;
        // Изобразим путь 20-ю точками
        for (var i = 0; i <= 20; i++) {
            // Находим промежуточную точку
            var position = path(i/20).point;
            // Добавим в промежуточную точку метку
            map.geoObjects.add(new ymaps.Placemark(
                position, {
                    // Покажем в контенте метки пройденное расстояние
                    iconContent: ymaps.formatter.distance(
                        ymaps.coordSystem.geo.getDistance(startPoint, position)
                    )
                }, {
                    preset: 'islands#redStretchyIcon'
                }
            ));
        }
    });
});