ICoordSystem
Интерфейс координатной системы карты. Этот интерфейс необходимо реализовать в случае использования нестандартных (например, цилиндрических) координат. Для решения задач поиска траектории движения по земной поверхности, используйте coordSystem.geo, по декартовой плоскости — coordSystem.cartesian.
См.: coordSystem.geocoordSystem.cartesian
Конструктор
ICoordSystem()
Методы
Имя |
Возвращает |
Описание |
Number |
Возвращает кратчайшее (вдоль геодезической линии) расстояние между двумя заданными точками (в метрах). |
|
Object |
Решает так называемую первую (прямую) геодезическую задачу: где мы окажемся, если выйдем из указанной точки в указанном направлении и пройдём, не сворачивая, указанное расстояние. Решением прямой геодезической задачи являются следующие данные:
|
|
solveInverseProblem(startPoint, endPoint[, reverseDirection]) |
Object |
Решает так называемую вторую (обратную) геодезическую задачу: построить кратчайший маршрут между двумя точками на картографируемой поверхности и определелить расстояние и направление движения. Обратите внимание: на карте земной поверхности кратчайшие маршруты изображаются кривыми линиями. Для геообъектов в API можно включить режим отображения кратчайших расстояний между точками с помощью опции geodesic. |
Описание методов
getDistance
{Number} getDistance(point1, point2)
Возвращает кратчайшее (вдоль геодезической линии) расстояние между двумя заданными точками (в метрах).
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: Number[] Первая точка. |
|
— |
Тип: 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.
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: Number[] Точка отправления. |
|
— |
Тип: Number[] Направление. Задаётся в виде вектора (приращение координат) [dlat, dlon] либо [dlon, dlat], в завивимости от параметра coordorder. Для того чтобы получить из заданного таким образом направления азимут (угол между направлением движения и направлением на север), необходимо вычислить арктангенс величины dlon/dlat (в JavaScript — стандартная функция Math.atan2(dlon, dlat)). Для того чтобы по известному азимуту "a" вычислить направление движения, нужно положить dlat = cos(a), dlon = sin(a). |
|
— |
Тип: Number Пройденное расстояние в метрах. |
* Обязательный параметр/опция.
Пример:
// Допустим, мы вылетели из аэропорта Домодедово на северо-восток и
// пролетели 200 километров по прямой. // Изобразим наш путь с помощью меток на карте.
// Найдём с помощью геокодирования координаты начальной точки.
ymaps.geocode('Domodedovo airport').then(function (res) {
var startPoint = res.geoObjects.get(0).geometry.getCoordinates();
// Движемся на северо-восток, азимут 45 градусов
// или pi/4 радиан.
var azimuth = Math.PI / 4;
// Направление движения.
var direction = [Math.cos(azimuth), Math.sin(azimuth)],
// Путевая функция.
var 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.
Параметры:
Параметр |
Значение по умолчанию |
Описание |
— |
Тип: Number[] Точка отправления. |
|
— |
Тип: Number[] Точка прибытия. |
|
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'
}
));
}
});
});
Обязательный параметр.