Клуб API Карт

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

meteo.ua
4 ноября 2011, 20:54

Здравствуйте. Есть построенный маршрут. Например: Киев-Одесса. Подскажите, как выбрать и отметить все населенные пункты, встречающиеся по этому маршруту. Например Любашевка, Умань, Белая Церковь.

Стандартный пример http://api.yandex.ru/maps/jsapi/examples/maproutersegments.html не подходит, так как отдает только маршрут по городу и название трассы.

Заранее спасибо

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

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

База координат есть. Но я не нашел в документации, как определить координаты по всему маршруту. Есть ли вариант получить какой то массив координат маршрута с неким интервалом?

из маршрута вы можете получить все узловые точки без каких либо проблем

написал:

window.onload = function () {
            var map = new YMaps.Map(document.getElementById("YMapsID"));
            var toolBar = new YMaps.ToolBar();
            // элементы упрравления
            map.addControl(new YMaps.TypeControl());
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.Zoom());
           
            //установка центра карты по координатам и масштаб
            map.setCenter(new YMaps.GeoPoint(31.68, 48.02), 6);
           
            // Прокладывание маршрута
            var router = new YMaps.Router(['Киев', 'Одесса'],[],
                   { viewAutoApply: true }
            );
            map.addOverlay(router);
           
            YMaps.Events.observe(router, router.Events.Success, function () {
               var route = router.getRoute(0);
               for (var i=0; i < route.getNumRouteSegments(); i++) {
                  var segment = route.getRouteSegment(i);
                  var point = route.getPoint(route.getRouteSegment(i).getPolylineIndex());
                  point = point.toString();
                 
                  point = point.split(',');
                  // Создает метку
                  var placemark = new YMaps.Placemark(new YMaps.GeoPoint(point[0],point[1]));

                  // Устанавливает содержимое балуна
                  placemark.name = "Точка";
                  placemark.description = "№1";

                  // Добавляет метку на карту
                  map.addOverlay(placemark);
               }

            });
        }

Мне выдает набор точек. Как я понимаю узловых. Отметил их на карте, Но это отметки только выезда на трассу и движения по городу. А вот если трасса проходит по городу (например через ту же Умань), то точек вообще нет.

Есть ли еще какое то решение?

У роутера два набора данных.

Это дело не раз описывалось в клубе

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

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

Нужно добиться того, чтобы человек ввел например Киев - Одесса, а на карте ему были видны отметки, на населенных пунктах, которые он будет пересекать.

Киев - Белая Церковь - Жажков - Умань - Ульяновка - ... - Одесса

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

Подскажите, в какую сторону копать?

пример, сделанный правда на google maps, тут

ViaPoints вам отдает именно что Роутер.

Хороший пример про роутер можно найти у Саши - http://clubs.ya.ru/mapsapi/replies.xml?item_no=14934

Доступ к треку там совсем простой - router.getPoints() ( см исходники )

Спасибо большое за помощь.

Получилось так как хотелось))). Вот код.

window.onload = function () {
            var map = new YMaps.Map(document.getElementById("YMapsID"));
            var toolBar = new YMaps.ToolBar();
            // элементы упрравления
            map.addControl(new YMaps.TypeControl());
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.Zoom());
           
            //установка центра карты по координатам и масштаб
            map.setCenter(new YMaps.GeoPoint(31.68, 48.02), 6);
           
            // Прокладывание маршрута
            var router = new YMaps.Router(['Киев','Одесса']);
            // После загрузки маршрута начинается самое интересное
            YMaps.Events.observe(router, router.Events.Success, function (router) {
                // Собираем все точки в будущий маршрут
                var points = [];
                for (var i = 0, route, l = router.getNumRoutes(); i < l; i++) {
                    route = router.getRoute(i);
                    points = YMaps.jQuery.merge(points, route.getPoints());
                    map.addOverlay(route);
                    var pointCoords = route.getPoints();
                    pointCoords = pointCoords.toString();
                    point = pointCoords.split(',');
                    // Создает метку в центре Москвы
                    for(var j = 0; j                        var placemark = new YMaps.Placemark(new YMaps.GeoPoint(point[j*2],point[(j*2)+1]));
                        // Устанавливает содержимое балуна
                        placemark.name = "Координаты";
                        placemark.description = point[j*2]+','+point[(j*2)+1];
                        map.addOverlay(placemark);
                    }
                }
                // Центрируем карту
                map.setBounds(new YMaps.GeoCollectionBounds(points));
            });
        }

Дальше уже только допилить осталось

У меня ничего не получается :( Можете поделиться конечным результатом?