Клуб API Карт

Середина пути между точками

dns-omsk
29 мая 2013, 14:02

Доброго дня.
Помогите пожалуйста в решении задачки:

Прокладываю с помощью «ymaps.route(..)» путь.
Возможно ли найти приблизительную середину пути для того, что-ты вставить туда метку с величиной расстояния между пунктами. Вот так вот:

 

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

8 комментариев
Подписаться на комментарии к посту

Точный центр конечно тяжело найти, но приблизительную центральную точку можно - 

var paths = route.getPaths(),

     pointsNumber = 0,

     iterator = paths.getIterator(),

     obj;

while (obj = iterator.getNext()) {

    // Посчитаем количество точек во всех полилиниях, входящих в маршрут.

    pointsNumber += obj.geometry.getCoordinates().length;

}

var middleNumber = Math.floor(pointsNumber / 2);

iterator = paths.getIterator();

while (obj.getNext() && middleNumber > obj.getCoordinates().length) {

   middleNumber -= obj.getCoordinates().length;

}

// Возьмем центральную точку и нарисуем в ней хинт...

middlePoint = obj.getCoordinates()[middleNumber];

Спасибо вам огромное. Поковырял ваш код и чуток модернизировал сократил


var paths = route.getPaths(),
    iterator = paths.getIterator();
while (obj = iterator.getNext()) {
    data = obj.geometry.getCoordinates();
}
middleCoordinates = data[Math.floor(data.length / 2)];

Вроде работает.

Этот код будет работать только в случае, когда маршрут состоит из 1 длинной полилинии. Я в примере просто рассмотрела более общий случай, когда маршрут может состоять из нескольких участков.

vadim.zhiltsov
29 мая 2013, 23:46

Чуть-чуть набыдлокодил вам, строго не судить.

http://jsfiddle.net/CostaConquesta/38Krj/

Теоретически считает точную середину.

Но не забывайте про погрешность JS при работе с float

Вам тоже огромное спасибо, ( и не лень же было)

Попробую разобраться с вашим примером.
vadim.zhiltsov
30 мая 2013, 13:05

В реальности не стоит это использовать т.к. коэфицент погрешности выходит большой из-за float'a и дэфакто выходит тоже, что вам предложили. На коротких маршрутах часто выдает одну из вершин(

Вечерком,после работы, хочу поискать библиотеку для работы без погрешности с плавающей точкой и тогда будет намного точнее.

Собственно точность то мне не нужна, как я писал выше. И вообще все это мне нужно для единовременной распечатки карты на несколько листов с отмеченными точками, экспортированными из навигатора. Для водителей грузового автомобиля, в качестве справки.

Но если поделитесь библиотекой. против не буду, она должна быть.
p.s. необязательно было реализовывать методы вычисления расстояния. В АПИ они уже реализованы в двух вариантах: с учетом геодезии и без. 
- http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/coordSystem.cartesian.xml
- http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/coordSystem.geo.xml