Клуб API Карт

Как получить все координаты точек маршрута?

Владислав Умрихин
8 июля 2016, 18:28

Вот между городов например 5000 точек, которые соединяются линиями, как получить все координыты этих точек и вывести анпример через console.log?

14 комментариев
Подписаться на комментарии к посту
terrabud.com.ua
8 июля 2016, 19:37
У каждого маршрута в каждом пути есть массив точек. Примерно так:

var coords = path.properties.get('coordinates');

где path - любой путь из маршрута.
Владислав Умрихин
8 июля 2016, 19:46
terrabud.com.ua,
добавил к самой записи скриншот, не могу понять теперь, как их изх такой структуры выдернуть(
Владислав Умрихин
8 июля 2016, 19:47
terrabud.com.ua,


Сама реализация


for (var i = 0; i < route.getPaths().getLength(); i++) {
way = route.getPaths().get(i);
segments = way.getSegments();
for (var j = 0; j < segments.length; j++) {
var street = segments[j].getCoordinates();
console.log(street);

}
}
terrabud.com.ua
8 июля 2016, 20:01
Владислав Умрихин,


А что вы понимаете под словом "выдернуть"? )
Вот же они у вас, в консоли)

А прикрепите, пожалуйста, весь код, начиная с построения маршрута, если не секрет. Быть может, решит мою проблему - у меня segment.getCoordinates() не работает :(
Владислав Умрихин
8 июля 2016, 20:07
terrabud.com.ua,
function init() {
var myMap = new ymaps.Map("map", {
center: [55.745508, 37.435225],
zoom: 13
});
// Добавим на карту схему проезда
// от улицы Крылатские холмы до станции метро "Кунцевская"
// через станцию "Молодежная" и затем до станции "Пионерская".
// Точки маршрута можно задавать 3 способами:
// как строка, как объект или как массив геокоординат.
ymaps.route([
'Москва, улица Крылатские холмы',
{
point: [43.10071147066598,131.96696871536],
// метро "Молодежная" - транзитная точка
// (проезжать через эту точку, но не останавливаться в ней).
type: 'viaPoint'
}
]).then(function (route) {
myMap.geoObjects.add(route);
// Зададим содержание иконок начальной и конечной точкам маршрута.
// С помощью метода getWayPoints() получаем массив точек маршрута.
// Массив транзитных точек маршрута можно получить с помощью метода getViaPoints.
var points = route.getWayPoints(),
lastPoint = points.getLength() - 1;
// Задаем стиль метки - иконки будут красного цвета, и
// их изображения будут растягиваться под контент.
points.options.set('preset', 'twirl#redStretchyIcon');
// Задаем контент меток в начальной и конечной точках.
points.get(0).properties.set('iconContent', 'Точка отправления');
points.get(lastPoint).properties.set('iconContent', 'Точка прибытия');
// Сегмент - участок маршрута, который нужно проехать до следующего
// изменения направления движения.
// Для того, чтобы получить сегменты маршрута, сначала необходимо получить
// отдельно каждый путь маршрута.
// Весь маршрут делится на два пути:
// 1) от улицы Крылатские холмы до станции "Кунцевская";
// 2) от станции "Кунцевская" до "Пионерская".
var moveList = 'Трогаемся,</br>',
way,
segments;
// Получаем массив путей.
for (var i = 0; i < route.getPaths().getLength(); i++) {
way = route.getPaths().get(i);
segments = way.getSegments();
for (var j = 0; j < segments.length; j++) {
var street = segments[j].getCoordinates();
console.log(street[1]);

}
}
moveList += 'Останавливаемся.';
// Выводим маршрутный лист.
$('#list').append(moveList);
}, function (error) {
alert('Возникла ошибка: ' + error.message);
});

}
Владислав Умрихин
8 июля 2016, 20:09
terrabud.com.ua,
тут много лишнего конечно, так как работаю с готовым примером...уже понял, что для вывод нужно использовать console.log(street[1]); либо console.log(street[0]); Вот только точки ходят вокруг да около. Хотя для моей задачи это не проблема.  
terrabud.com.ua
8 июля 2016, 20:12
Владислав Умрихин,
Спасибо. Ну да, это массивы с двумя числами-координатами.
Владислав Умрихин
8 июля 2016, 20:15
terrabud.com.ua,
скинете вашу реализацию? можно если нетрудно не рабочую, а потом рабочую
Владислав Умрихин
8 июля 2016, 20:15
terrabud.com.ua,
координатами чего вот только? Я думал точек стыковок дорог но ошибся
terrabud.com.ua
8 июля 2016, 20:34
Владислав Умрихин,
моя реализация в соседней теме - https://yandex.ru/blog/mapsapi/ne-rabotaet-segment-getcoordinates
Только у меня multiRoute, думаю в этом и проблема.

Точки эти - точки для построения ломаной линии, которая и отображается на карте. Как часто проставляются точки и по какому принципу - не известно)
Владислав Умрихин
8 июля 2016, 22:14
terrabud.com.ua,
ради интереса, задача случайно не поиск городов лежащих на маршруте или в его округе?)
Владислав Умрихин
8 июля 2016, 22:20
terrabud.com.ua,
 мультироут-это мультимаршрут, то есть когда находятся несколько вариаций маршрутов между двумя точками? В таком случае может попробуете принудительно указывать к какому маршруту обращаетесь, без сложных цыклов в цикле, а когда получится с одним маршрутом, можно подвесить уже перебор по всем. 
terrabud.com.ua
8 июля 2016, 22:42
Владислав Умрихин,
Нет, мультимаршрут это когда куча точек последовательно. Возвращает пути в порядке указания точек. (это не промежуточные точки маршрута, а именно последовательные точки).
Владислав Умрихин
9 июля 2016, 10:05
terrabud.com.ua,
и все же нет, вот как получить через мультироутер 2 маршрута https://tech.yandex.ru/maps/jsbox/2.1/multiroute_driving