Клуб API Карт

Народные карты и построение маршрута между точками

evil0790
11 июля 2011, 08:34

Возникла проблема с народными картами, нужно нарисовать маршрут между двумя точками, сделал всё как в примере, а маршрут не строится, в чём может быть проблема? Вот привожу пример кода ниже:

YMaps.jQuery(function () {
            var map = new YMaps.Map( document.getElementById("YPeoplesMapScheme")
            map.setCenter(new YMaps.GeoPoint(127.547207,50.255), 17, YMaps.MapType.PMAP);

            // Начальная точка маршрута.
            var office = createPlacemark(new YMaps.GeoPoint(127.54655,50.2545), 'Пункт А', 'Кузнечная, 1');
            office.setStyle("default#greenPoint");
            map.addOverlay(office);

            // Конечные точки маршрута.
            var destinations = new YMaps.GeoObjectCollection(
            destinations.add(createPlacemark(new YMaps.GeoPoint(127.545907,50.279504), 'Пункт Б', '123')
            map.addOverlay(destinations);


            map.addControl(new RoutesNavigator(office, destinations)
            map.addControl(new YMaps.Zoom()
        }

        // Функия создания метки
        function createPlacemark (geoPoint, name, description) {
            var placemark = new YMaps.Placemark(geoPoint);
            placemark.name = name;
            placemark.description = description;

            return placemark;
        }
        function RoutesNavigator (office, destinations) {
            // Создание экземпляра модели.
            this.routerModel = new YMaps.RouterEditor.RouterModel(
            // Создание экземпляра редактора.
            this.editor = new YMaps.RouterEditor.DragAndDropEditor(this.routerModel, {
                    viaPointHintContent: 'Перетащите точку или удалите ёё двойным щелчком',
                    cursorHintContent: 'Перетащите метку, чтобы создать промежуточную точку',
                    maxPoints: 3
                }
           
            this.cacheRoutes = [];

            this.onAddToMap = function (map, position) {
                this.container = YMaps.jQuery("<ul>Едем в:</ul>");
                this.map = map;
                this.position = position || new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEF, new YMaps.Point(40, 77)

                this.container.css({
                    position: "absolute",
                    zIndex: YMaps.ZIndex.CONTROL,
                    background: '#fff',
                    listStyle: 'none',
                    padding: '10px',
                    margin: 5,
                }

                // Формирование списка маршрутов.
                this._generateList(

                // Позиционирование элемента управления.
                this.position.apply(this.container);

                // Размещение на карте.
                this.container.appendTo(this.map.getContainer()

                map.addControl(this.editor);
            }

            // Удаление с карты.
            this.onRemoveFromMap = function () {
                this.container.remove(
                this.container = this.map = null;
            };

            // Формирование списка маршрутов.
            this._generateList = function () {
                var _this = this;

                // Для каждого объекта вызываем функцию-обработчик.
                destinations.forEach(function (obj, index) {
                    // Создание ссылки на объект
                    var li = YMaps.jQuery("<li><a href=\"#\">" + obj.name + "</a></li>"),
                        a = li.find("a"); 

                    // Создание обработчика щелчка по ссылке.

                    li.bind("click", function () {
                        _this.showRoute(index);
                        obj.openBalloon(
                        return false;
                    }

                // Слушатели событий на открытие и закрытие балуна у объекта.
                YMaps.Events.observe(obj, obj.Events.BalloonOpen, function () {
                    a.addClass("active");
                }

                YMaps.Events.observe(obj, obj.Events.BalloonClose, function () {
                    a.removeClass("active");
                }

                // Добавление ссылки на объект в общий список.
                li.appendTo(_this.container);
            }

            // Отображает маршрут до места назначения с индексом = index.
            this.showRoute = function (index) {

                if (!this.cacheRoutes[index]) {
                    this.routerModel.getRouteProvider().route({ 
                        wayPoints : [office.getGeoPoint(), destinations.get(index).getGeoPoint()] 
                    }, successCallback, failureCallback, this);
                } else {
                    this.routerModel.setRouterResult(this.cacheRoutes[index]
                }

                function successCallback (rr) {
                    this.cacheRoutes[index] = rr;
                    this.routerModel.setRouterResult(this.cacheRoutes[index]
                }

                function failureCallback (rr) {
                    alert("Во время построения маршрута произошла ошибка:" + rr.error);
                }
            };
        };
    }

 

 

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

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