Клуб API Карт

Связать все метки из файла ymapsml в маршрут

backhood
18 июля 2012, 23:20

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

Имеется файл ymapsml следующего содержания:

 

 

<?xml version="1.0" encoding="windows-1251"?>
    <ymaps:GeoObjectCollection>
        <gml:name>Объекты карты</gml:name>
        <gml:featureMembers>
            <ymaps:GeoObject>
               <gml:name>1</gml:name>
                <gml:description>Описание 1</gml:description>
                <gml:Point>
                    <gml:pos>37.63 55.75</gml:pos>
                </gml:Point>
            </ymaps:GeoObject>
            <ymaps:GeoObject>
                <gml:name>2</gml:name>
                <gml:description>Описание 2</gml:description>
                <gml:Point>
                    <gml:pos>36.63 56.75</gml:pos>
                </gml:Point>
            </ymaps:GeoObject>
        </gml:featureMembers>
    </ymaps:GeoObjectCollection>
</ymaps:ymaps>

 

Далее подключаю его к карте:

 

 

<html xmlns="http://www.w3.org/1999/xhtml"><head>
    <title>Карта.</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script src="http://api-maps.yandex.ru/2.0/?load=package.full&amp;lang=ru-RU" type="text/javascript"></script>
    <script type="text/javascript">
       window.onload = function () {
             ymaps.ready(function () {
             // Создание экземпляра карты
                 var myMap = new ymaps.Map('map', {
                     center: [55.76, 37.64],
                     zoom: 8
                 });
            // Загрузка YMapsML-файла
                ymaps.geoXml.load("/pointstomap.xml")
                            .then(function (res) {  
                                 myMap.geoObjects.add(res.geoObjects); // Добавление геообъектов на карту
                             }, function (error){   // Вызывается в случае неудачной загрузки YMapsML
                                    alert('Ошибка: ' + error);         
                                });
                             });
         }  
    </script>
</head>
<body>
    <div id="map" style="width:600px;height:400px"></div>
</body></html>

И теперь мне нужно все эти метки связать по router. Подскажите, как лучше это сделать? Заранее спасибо за ответы!

 

 

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

Тут http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/route.xml есть пример.

Нужно перебрать все метки в res.geoObjects и сформировать данные для route.

Перебор с помощью each или getIterator.

Не сочтите за грубость, но я что - то никак не соображу как сформировать данные для route. Массивом? Можно в виде кода показать, пожалуйста? :-(

// здесь хранятся точки для маршрута

var routePoints = [];

// перебираем точки из geoXml файла и записываем их в массив с точками маршрута

res.geoObjects.each(function (point) {

    routePoints.push(point.geometry.getCoordinates());

});

// строим маршрут

ymaps.route(routePoints).then(function (route) {

    map.geoObjects.add(route);

})

Спасибо всем огромное! Теперь, с вашей помощью, разобрался! ;-)