Клуб API Карт

Расчёт длины маршрута по примеру из песочницы

Пост в архиве.

Здравствуйте!

 

Никак не пойму, как можно имея объект типа GeoQueryResult , получить длину маршрута в метрах. В примере из песочницы https://tech.yandex.ru/maps/jsbox/2.1/route_inside_polygon есть три "области" пути - красная, зелёная и синяя. Требуется найти длины маршрутов каждой.

 

Заранее благодарен.

7 комментариев

var distance = 0;

objectsInMoscow.search('geometry.type = "LineString"').each(function (s) {

  distance += s.geometry.getDistance();

});

console.log(distance, ymaps.formatter.distance(distance));

Отлично, спасибо большое, всё работает. А если учесть, что objectsInMoscow разбит точками на "подмаршруты"? (Подсчитать длину каждого)

А как вы пробовали сделать?

Конкретнее, я имею ввиду, например, если есть маршрут из начальной, промежуточной и конечной точек, первая и последняя из которых НЕ лежат в области МКАД, а промежуточная лежит. Если мы объединим множество точек, полученных из route() и уберём из него те, что попадают в область мкад, то получим две несвязанные между собой ломанные линии (реализовал вот тут, область мкад выделил прозрачно-голубым, а маршрут на мкад - скрыл), лежащие в одном множестве. У меня возникла проблема в отделении этих двух несвязанных между собой ломаных из одного множества на разные. Точнее, никак не получается найти эти крайние точки, которые входят на границу МКАД. Есть множество координат точек, а как из него выделить две несвязанные ломаные - загадка =(

Я простите не могу понять в чем загадка и что тут может никак не получаться. У вас на входе один объект геоквери в котором в последовательности их следования в маршруте лежат точки и сегменты. Вы перебираете его через each, аггрегируя сегменты в отдельный массив и игнорируя точки. Потом для каждого набора сегментов в массиве определяете расстояние

Я так и делаю =) Проблема в том, что затрудняюсь из коллекции последовательно соединённых LineString выделить отдельные сегменты. Каков критерий?

Разделение точкой?

Как вам приходит точка – вы закрываете сегмент и считаете его длину, если не точка – аггрегируете вершины до следующей точки