Клуб API Карт

Найдено на тему «route»:
Кратчайший маршрут
djidi1
25 января 2017, 10:24

прокладываю маршрут с помощью route, со следующими настройками:

 ymaps.route(route_addresses, {
        mapStateAutoApply: true,
        avoidTrafficJams: false
    }).then(function (route) {

API всегда возвращает самый быстрый маршрут:

Как сделать чтобы выбирался самый короткий маршрут по километражу?

1 комментарий
route,multiRoute
Получение значений от функции route на сервере
Aleksey Ivanov
11 декабря 2016, 18:13

Здравствуйте. Меня интересует, как можно огранизовать доступ к API. 

Есть граф города, координаты вершин которого хранятся в базе данных, а весом ребра является время проезда по нему. Также есть сервер на Node.js, который по запросу пользователя возвращает время проезда по всем ребрам.

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

7 комментариев
nodejs,route,getHumanJamsTime
Расстояние между точками в переменную.
Жуковский Павел
24 ноября 2016, 16:19

Добрый день.

Создал карту с помощью такого кода

function init () {
    var multiRoute = new ymaps.multiRouter.MultiRoute({
        // Описание опорных точек мультимаршрута.
        referencePoints: [
            'Россия, Москва, Профсоюзная улица, 1/24 ',
            'Москва, проспект мира 1'
        ],
        // Параметры маршрутизации.
        params: {
            // Ограничение на максимальное количество маршрутов, возвращаемое маршрутизатором.
            results: 1
        }
    }, {
        // Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком.
        boundsAutoApply: true
    });

    // Создаем карту с добавленными на нее кнопками.
    var myMap = new ymaps.Map('mapv', {
        center: [55.750625, 37.626],
        zoom: 10
    }, {
        buttonMaxWidth: 300
    });

    // Добавляем мультимаршрут на карту.
    myMap.geoObjects.add(multiRoute);

}

ymaps.ready(init);

Вопросы:

1. Мне нужен только один вариант маршрута, можно ли как-то не использовать MultiRoute ? Если да, то как перевести на что-то вроде SingleRoute

2. Как получить длин маршрута (не важно, в метрах или километрах).

Спасибо

1 комментарий
API yandex,multiRoute,route
Не получается изменить цвет маршрута и иконки маркеров
СЗ
9 ноября 2016, 07:53

Привет.

Использую этот пример http://dimik.github.io/ymaps/examples/routes-menu/, само решение подходит полностью, но реализация сложноватая, примеры в песочнице, документация не помогли. Куда там влезть в код, чтобы изменить цвет маршрута и иконки маркеров, и цвет дополнительного маршрута. 

Я добавил в код multiRoute: true

    _getRoute: function (coords, callback) {
        ymaps.route(coords, {
          mapStateAutoApply: true,
          multiRoute: true
        }).then(callback);
    }

Все способы предпринимал в этом отрезке кода

//route-selector-map-view.js

function RouteSelectorMapView(map) {
    this._map = map;
    this._routes = new ListCollection();
    this._activeItem = null;
}

RouteSelectorMapView.prototype = {
    constructor: RouteSelectorMapView,
    render: function (data) {
        this._routes.properties.set('items', data);
        this._map.geoObjects.add(this._routes);		

        return this;
    },
    clear: function () {
        this._routes.removeAll();
        this._map.geoObjects.remove(this._routes);
        this._routes.properties.unset('items');

        return this;
    },
    setActiveItem: function (index) {
        var route = this._routes.get(index);

        if(route) {
            (this._activeItem = route)
               .options.set('visible', true);				       
               this._map.setBounds(route.properties.get('boundedBy'));
        }
        else {
            var self = this,
                coords = this._routes.properties.get('items')[index].path;

            this._getRoute(coords, function (route) {
                self._routes.add(
                    self._activeItem = route,
                    index
                );
            });
        }

        return this;
    },
    unsetActiveItem: function () {
        if(this._activeItem) {
            this._activeItem.options.set('visible', false);
            this._activeItem = null;
        }

        return this;
    },
    _getRoute: function (coords, callback) {
        ymaps.route(coords, {
            mapStateAutoApply: true,
			multiRoute: true
        }).then(callback);
    }	
	
};

Надеюсь на помощь. Спасибо.

3 комментария
route,multiRoute,menu,routes
getHumanJamsTime возвращает неверное значение
Константин Завражнев
27 октября 2016, 11:41

Столкнулся с проблемой.

Метод объекта route, getHumanJamsTime в некоторых случаях ( закономерность пока не понял ), возращает значения вот такого плана :

5.700447535712569e+300 лет 241 д 14 ч 26 мин

При этом если получить у этого маршрута время через getTime() будет  :

1597.99

что фактически равно приблизительно  26 минутам.

Где то закралась ошибка.

Маршрут расчитывал между вот этими точками

[59.90607379999999, 30.314403299999995]
[60.000713, 30.199033]

1 комментарий
bug,getHumanJamsTime ,route
Mapbox и Яндекс.карты
Удалённый пользователь
25 октября 2016, 16:47

Добрый день! 

Существует задача интегрировать на сайт карту mapbox, но для построения маршрута использовать апи Яндекс.карт ( а именно route)

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

Собственно, код. 

<script src='https://api.mapbox.com/mapbox-gl-js/v0.26.0/mapbox-gl.js'></script>
<link href='https://api.mapbox.com/mapbox-gl-js/v0.26.0/mapbox-gl.css' rel='stylesheet' />

<div id='map' style='width: 700px; height: 400px;'></div>

<script>

ymaps.ready(function () {

mapboxgl.accessToken = 'pk.eyJ1Ijoic2VyZ2V5MTk5MiIsImEiOiJjaXVrNGY4MGIwMDBkMnl1bW44YnMxMnpxIn0.Tyh-oxTXc1sa8GggiWdKIA';
var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/light-v9',
    center: [30.523541, 50.450418],
    zoom: 7
});

//построение маршрута. 
ymaps.route([
            [50.450418, 30.523541],
            [49.992167, 36.231202]
        ], {
            multiRoute: false,
            routingMode: 'auto',
            mapStateAutoApply: true
        }).done(function (route) {

                var coords = [];
            var way, segments;

            for (var i = 0; i < route.getPaths().getLength(); i++) {
                way = route.getPaths().get(i);
                segments = way.getSegments();
                for (var j = 0; j < segments.length; j++) {
                     coords = segments[j].getCoordinates().reverse();
					//console.log('coords', coords);
                    console.log('rev', coords);
                }

            }



    map.on('load', function () {
//добавляем путь на карту
    map.addSource("route", {
        "type": "geojson",
        "data": {
            "type": "Feature",
            "properties": {},
            "geometry": {
                "type": "LineString",
                "coordinates": [
                   // вот сюда нужно передать массив координат
                    ]
            }
        }
    });

    map.addLayer({
        "id": "route",
        "type": "line",
        "source": "route",
        "layout": {
            "line-join": "round",
            "line-cap": "round"
        },
        "paint": {
            "line-color": "#FF0000",
            "line-width": 3
        }
    });
}); //map.on
        }); 
				}); //ymaps.ready

Почему-то метод addSource не хочет "получить" массив координат. 

Буду рад хоть каким-то мыслям.

Спасибо

2 комментария
route
yandex api route
Удалённый пользователь
11 сентября 2016, 16:59

В общем вопрос такого плана: есть инпуты из них с помощью жса вытаскиваются из знаячения и по идее помещаются в наверное в функцию ymaps.route

  <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
   <script type="text/javascript">
       ymaps.ready(init);
       var myMap, route, start, end;
    

       function init(){     
           myMap = new ymaps.Map ("map", {
            center: [47.0105, 28.8638],
            zoom: 12,
            controls: ['zoomControl', 'typeSelector',
                       'geolocationControl', 'trafficControl',
                       'fullscreenControl'] 
        });

      order_adress_from.onblur = function() {
      	start = this.value; 
    	}; 

 		 	order_adress_to.onblur = function() {
      	end = this.value; 
    	}; 
      ymaps.route([start, end,
      ]).then(
          function (route) {
            route && myMap.geoObjects.remove(route);
            myMap.geoObjects.add(route);

          },
          function (error) {
              alert("Возникла ошибка: " + error.message);
          });
    }
  
 </script>

Выдает такую ошибку: Uncaught TypeError: Cannot read property 'type' of undefined

Если же пишу переменные с квадратными скобками, пишет что не может построить пути

      ymaps.route([ [start], [end],
      ]).then(
          function (route) {
            route && myMap.geoObjects.remove(route);
            myMap.geoObjects.add(route);

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

1 комментарий
yandex api,route
Изменить координаты начальной точки маршрута
Константин Филенко
20 июля 2016, 14:38

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

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

1 комментарий
route
Ошибка can't construct a route
vsevolod.ivshin
17 июля 2016, 08:26

Столкнулся сегодня с проблемой: добавился новый город в системе сайта Петропавловск-камчатский. Но каждый раз когда пытаюсь проложить маршрут до него из другого города  вылетает эта ошибка.

Проверил непосредственно на Яндекс картах, результат: невозможно построить маршрут, отккуда не пытаюсь. Я не силен в географии, может его расположение в принципе не подразумевает возможность добраться до него на сухопутном транспорте?=)

Пример
3 комментария
route
Изменение цвета сегмента в маршруте
Константин Филенко
14 июля 2016, 21:44

Подскажите пожалуйста, возможно ли в маршруте изменить цвет сегмента? Если да, объясните пожалуйста как, нигде в документации этого не нашел.

2 комментария
route,router.Segment
Минимальный путь на карте
Ryder78
27 октября 2015, 14:38

Здравствуйте!

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

Сначала я пробовал через ymaps.route([...]), но эта функция, к сожалению, не сортирует, а выводит пути к точкам в той последовательности, в какой получает.

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

Какое может быть ещё решение такой задачи?

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

2 комментария
маршрутизация,API 2.0,route
Грамотное использование функции route() в цикле
andrew.dorohoff
15 сентября 2015, 05:14

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

Есть координаты нескольких точек, и нужно узнать расстояние до каждой из них.

 var point = {
  name: "Some place",
  coordinates: [55.75399400, 37.62209300],
  distance: -1
};

 

И есть массив таких точек (points).

for (var pointIndex in points) {
  ymaps.route([myCoordinates, points[pointIndex].coordinates]).then(function(route) {
    var distance = route.getLength()   
    /* points[pointIndex].distance = distance; */
  });
}

 

Но воспользоваться конструкцией "points[pointIndex].distance = distance;" из-за асинхронности мы не можем.

Как же тогда занести информацию о расстоянии в каждый из объектов точки?

4 комментария
маршрутизация,расстояние,события,API 2.1,route