Клуб API Карт

Перенести на 2.0

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

Ребят, помогите, пожалуйста перенести сей пример на 2.0 http://ymlib.narod.ru/1.1/demos/animate.html

Уже по - всякому испробовал, никак не хочет работать =(

  

 

<script type="text/javascript">

 

        // Как только будет загружен API и готов DOM, выполняем инициализацию

        ymaps.ready(init);

 

        function init () {

            var myMap = new ymaps.Map("map", {

                    center: [57.131311, 34.576128],

                    zoom: 5

                });

 

            // Прокладывание маршрута от станции метро "Смоленская"

            // до станции Третьяковская (маршрут должен проходить через метро "Арбатская").

            // Точки маршрута можно задавать 3 способами:  как строка, как объект или как массив геокоординат.

            ymaps.route([

                'Москва, метро Смоленская',

                {

                    type: 'viaPoint', // метро арбатская - транзитная точка (проезжать через эту точку, но не останавливаться в ней)

                    point: 'Москва, метро Арбатская'

                },

                [55.74062, 37.62561] // метро "Третьяковская"

            ], {

                // Опции маршрутизатора

                mapStateAutoApply: true // автоматически позиционировать карту

            }).then(function (route) {

                myMap.geoObjects.add(route);

                  // Получаем первый маршрут (от метро "Крылатское" до "Молодежная").

                  var way = route.getPaths().get(0),

                      // Маршрут состоит из сегментов. Сегмент - участок маршрута, который нужно проехать

                      // до следующего изменения направления движения.

                      segments = way.getSegments(),

                      // открываю массив с точками

                      moveList = [];

                      // выполняю операцию для всех сегментов

                  for (var i = 0; i < segments.length; i++) {

                      // беру координаты начала и конца сегмента

                      var street = segments[i].getCoordinates();

                      // и добавляю их в массив

                      moveList += (street);

                  }

                     // пробую вывести - все отлично, выводится то, что нужно

                    alert(moveList); 

                  // а вот дальше затуп =(

                  // вместо класса машинки использовал метку

                // Создаем машинку

                myGeoObject = new ymaps.GeoObject({

                    // Геометрия.

                    geometry: {

                        // Тип геометрии - точка

                        type: "Point",

                        // Координаты точки.

                        coordinates: [55.8, 37.8]

                    }

                });

             // вывел на карту

            myMap.geoObjects

                .add(myGeoObject);

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

               // Запуск анимации

                myGeoObject.moveTo(moveList, function () {

                    alert("Приехали!"); 

                });

            // тут сообщение в случае ошибки (опять все понятно) =|

            }, function (error) {

                alert("Возникла ошибка: " + error.message);

            });

        }

    </script>

 

7 комментариев
Алексей Yarrr!
28 января 2016, 03:54

У вас ошибка geoObject не имеет метода moveTo.

Он и правда его не имеет.

http://jsfiddle.net/GMsG4/2/ - пока не нашел в 2.0 похожего функционала ;-(

upd: в коде на ymlib есть new ymlib.animate.Car(); и он, думаю, имеет интерфейс геообъекта 1.1 и инкапсулирует логику с анимацией.

оно у вас никогда не заработает ;-)

можно повторить тоже самое с помощью jquery: берем все пути, получаем длины каждого сегмента (с помощью них получим время анимации) и запускаем их последовательно одну за другой. плавное перемещение сделает jquery, а вам надо будет только перевести гео координаты в пиксельные и отдать их туда вместе с таймингом.

как-то так.

Да, насчет инкапсуляции уже и сам догадался ... ;-( Ну чтож, ладно, пока реализую на 1.1, а в перспективе проработаю вариант с жучкой.

P.S. А возможно, разработчики еще добавять эту замечательную функцию в движок  :-)

В любом случае, спасибо за ответ!

Алексей Yarrr!
28 января 2016, 03:54

http://jsfiddle.net/qfox/X8ngL/

вот вам вариант реализации на 2.0

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

но в целом вы можете описать свой шаблон и вставлять направление, например, в класс, а в css порулить отображение картинки. например, вывести спрайт, в котором класс sse будет сдвигать его до картинки, где машинка едет вверх-вправо, и аналогично для остальных ;-)

Вот это спасибо! Каждая строчка на своем месте, все понятно, вообще класс! Спасибо еще раз! :-)

Алексей Yarrr!
28 января 2016, 03:54

Обращайтесь ;-)

Я вас ищу :-) 

Алексей Yarrr!
28 января 2016, 03:54

Исправился, ответил ;)