Клуб API Карт

Маршруты

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

Привет.

Необходимо создать карту, добавив возможность проложить маршрут, машиной или транспортом. как в самих яндекс картах.

1) какие необходимые модули для этого надо подключить, чтобы это реализовать?

2) допустим я это сделал. задача №2 это оставить все метки по направлению маршрута, остальные убрать. как это можно реализовать?

Надеюсь на вашу помощь куда копать.

Спасибо.

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

1. Маршрутизатор

2. Из построенного маршрута получить коллекцию путей,

перебирая ваши метки, у каждого пути (по сути обычная ломаная) у его геометрии искать ближайшую точку к метке, и если расстояние меньше определенного вами порога, что-то делать с этой меткой (например менять цвет иконки)

Сделал так. Возникает ошибка:

geometry.LineString.getClosest: В опциях геометрии не определена проекция.

Почему ???

 

ymaps.route([APoint,BPoint]).then(function (router) {

            mygeoArr=router.getPaths();//получил пути

            mygeoArr.each(function (line) {// по всемпутям из всех меток:

                myMap.geoObjects.each(function (GeoPoint) {

                   obj=line.geometry.getClosest(GeoPoint.geometry.getCoordinates());

                    if (obj.distance

                        GeoPoint.options.set('visible',0);

                    }

                });

 

                });

            });

 

mygeoArr надо добавить на карту перед вызовом getClosest

Спасибо, добавил.

Возникла ошибка - не могу перебрать метки на карте(их около 5 штук, находятся вдоль маршрута), во время вызова getClosest вызывается метод getCoordinates, а я получаю 

Uncaught TypeError: Cannot call method 'getCoordinates' of null

При этом все метки добавлялись с помощью myMap.geoObjects.add(placemark);

 

function marshrutSet(){

        marshrut=0;

        marshrutClear();

        _route = new ymaps.GeoObjectCollection({},  {

            strokeColor: '0000ffff',

            strokeWidth: 8,

            opacity: 0.9

        });

 

        ymaps.route([APoint,BPoint],{

            strokeColor: '0000ffff',

            strokeWidth: 8,

            opacity: 0.9

            }

        ).then(function (router) {

            mygeoArr=router.getPaths();//получил пути

            _route=router;

            myMap.geoObjects.add(router);

            mygeoArr.each(function (line) {// по всемпутям из всех меток:

                myMap.geoObjects.each(function (GeoPoint) {

                    obj=line.geometry.getClosest(GeoPoint.geometry.getCoordinates());

                    if (obj.distance

                        GeoPoint.options.set('visible',0);

                    }

                });

           });

            });

        }

 

Вы же добавили маршрут на карту, теперь при переборе myMap.geoObjects.each

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

Добавьте фильтр:

 

  myMap.geoObjects.each(function (geoObject) {     if(geoObject.geometry && geoObject.geometry.getType() === 'Point') {        ...     } });