ICoordSystem
Интерфейс координатной системы карты. Этот интерфейс необходимо реализовать в случае использования нестандартных (например, цилиндрических) координат.
Конструктор
ICoordSystem()
Методы
Имя | Возвращает | Описание |
---|---|---|
getDistance(point1, point2) | Number | Returns кратчайшее (вдоль геодезической линии) расстояние между двумя заданными точками (в метрах). |
solveDirectProblem(startPoint, direction, distance) | Object | Решает так называемую первую (прямую) геодезическую задачу: где мы окажемся, если выйдем из указанной точки в указанном направлении и продём, не сворачивая, указанное расстояние. |
solveInverseProblem(startPoint, endPoint[, reverseDirection]) | Object | Решает так называемую вторую (обратную) геодезическую задачу: построить кратчайший маршрут между двумя точками на картографируемой поверхности и определелить расстояние и направление движения. |
Имя | Возвращает | Описание |
---|---|---|
getDistance(point1, point2) | Number | Returns кратчайшее (вдоль геодезической линии) расстояние между двумя заданными точками (в метрах). |
solveDirectProblem(startPoint, direction, distance) | Object | Решает так называемую первую (прямую) геодезическую задачу: где мы окажемся, если выйдем из указанной точки в указанном направлении и продём, не сворачивая, указанное расстояние. |
solveInverseProblem(startPoint, endPoint[, reverseDirection]) | Object | Решает так называемую вторую (обратную) геодезическую задачу: построить кратчайший маршрут между двумя точками на картографируемой поверхности и определелить расстояние и направление движения. |
Описание методов
getDistance
Returns кратчайшее (вдоль геодезической линии) расстояние между двумя заданными точками (в метрах).
Параметры:
Параметр | Значение по умолчанию | Описание |
---|---|---|
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. Для того, чтобы получить из заданного таким образом направления азимут (угол между направлением движения и направлением на север), необходимо вычислить арктангенс величины dlat/dlon (в JavaScript - стандартная функция Math.atan2(dlat, dlon)); для того, чтобы по известному азимуту a вычислить направление движения, нужно положить dlat = cos(a), dlon = sin(a). |
distance * | — | Тип: Number Пройденное расстояние. |
Параметр | Значение по умолчанию | Описание |
---|---|---|
startPoint * | — | Тип: Number[] Точка отправления. |
direction * | — | Тип: Number[] Направление. Задаётся в виде вектора (приращение координат) [dlat, dlon] либо [dlon, dlat], в завивимости от параметра coordorder. Для того, чтобы получить из заданного таким образом направления азимут (угол между направлением движения и направлением на север), необходимо вычислить арктангенс величины dlat/dlon (в JavaScript - стандартная функция Math.atan2(dlat, dlon)); для того, чтобы по известному азимуту 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.sin(azimuth), Math.cos(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 - выбрать обратную кратчайшей. |
Параметр | Значение по умолчанию | Описание |
---|---|---|
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: 'twirl#redStretchyIcon'
}
));
}
});
});