Как научить Яндекс считать расстояние от МКАД?

Тема в разделе "JavaScript", создана пользователем Waldemaar, 31 янв 2014.

  1. TopicStarter Overlay
    Waldemaar
    Оффлайн

    Waldemaar Новичок

    Вместе с:
    31 янв 2014
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Столкнулись на работе с проблемой: нужно на основе API ЯндексКарт сделать сервис, который бы считал стоимость проезда на автомобиле.

    Наша задача состоит в том, чтобы, напимер, если машина едет из центра Москвы, то тариф один. А если она затем выезжает за пределы МКАД, то тариф другой.

    Проблема: мы не можем сделать так, чтобы проезд собственно по МКАД считался по тарифу А, а с момента съезда с МКАД и весь путь за его пределами - по тарифу Б.

    Яндекс же считает путь по МКАД уже путем за его пределами, и поэтому как только машина выезжает на МКАД - у нее включается тариф Б.

    Посоветуйте решение, пожалуйста!
  2. delitme
    Оффлайн

    delitme Администратор Команда форума

    Вместе с:
    15 окт 2013
    Сообщения:
    390
    Симпатии:
    34
    Баллы:
    28
    Добрый вечер.

    Вопросик: У Вас в автомобилях установлено устройство, которое передает маршрут на Ваш сервер или как? Как я понимаю что это что то типо того...нужно больше информации
  3. TopicStarter Overlay
    Waldemaar
    Оффлайн

    Waldemaar Новичок

    Вместе с:
    31 янв 2014
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Нет, с GPS эта система не связана. Это просто для клиентов, чтобы они могли предварительно посмотреть стоимость. Просто, грубо говоря, калькулятор, где вводишь адреса пункта А и пункта Б, и Яндекс рисует между ними маршрут и говорит, сколько это будет стоить.
  4. delitme
    Оффлайн

    delitme Администратор Команда форума

    Вместе с:
    15 окт 2013
    Сообщения:
    390
    Симпатии:
    34
    Баллы:
    28
    Так т.е. у Вас расчет идет по "расстоянию в метрах" которое прописывает яндекс после прокладки маршрута(см. картинку)? Верно?

    Если нет, то в студию url проекта (в теге CODE)

    Будем смотреть...

    Вложения:

    • router.png
      router.png
      Размер файла:
      268,8 КБ
      Просмотров:
      4
  5. TopicStarter Overlay
    Waldemaar
    Оффлайн

    Waldemaar Новичок

    Вместе с:
    31 янв 2014
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Ну кагбе да.

    Вот ссылка на альфа версию
    Код:
    http://back.gruzoperevozka1.ru/calculate
  6. delitme
    Оффлайн

    delitme Администратор Команда форума

    Вместе с:
    15 окт 2013
    Сообщения:
    390
    Симпатии:
    34
    Баллы:
    28
    Так...смотрите...вот кусок вашего кода формирования самой карты.

    А зачем Вам две библиотеки jquery? o_O

    HTML:
        function init() {
            var myMap = window.map = new ymaps.Map('YMapsID', {
                center: [55.751574, 37.573856],
                zoom: 9,
                behaviors: ['drag', 'scrollZoom']
            }),
            tarifs = [{
                    id: 'moscow',
                    name: 'Москва',
                    label: 'Маршрут по Москве',
                    color: '#0000ff',
                    cost: 0,
                    url: 'http://back.gruzoperevozka1.ru/app/views/js/dc/moscow.json'
                }, {
                    id: 'mo',
                    name: 'Московская область',
                    label: 'Маршрут за МКАД',
                    cost: 15,
                    color: '#ff0000',
                    url: 'http://back.gruzoperevozka1.ru/app/views/js/dc/mo.json'
                }],
            calculator = new DeliveryCalculator(myMap, "Москва, Профсоюзная", tarifs);
            calculator.setDestination("Москва, Бульвар дмитрия донского");
        }
    Я вот что могу предложить:

    Применить что то типа этого:

    HTML:
    route && myMap.geoObjects.remove(route);
                    route = router;
                    myMap.geoObjects.add(route);
                    // Получаем первый маршрут
                      var way = route.getPaths().get(0),
                          // Маршрут состоит из сегментов. Сегмент - участок маршрута, который нужно проехать
                          // до следующего изменения направления движения.
                          segments = way.getSegments(),
                          moveList = 'Трогаемся,</br>';
                      for (var i = 0; i < segments.length; i++) {
                          var street = segments[i].getStreet();
                          moveList += ('Едем ' + segments[i].getHumanAction() + (street ? ' на ' + street : '') + ', проезжаем ' + segments[i].getLength() + ' м.,');
                          moveList += '</br>'
                      }
                      moveList += 'Останавливаемся.';
                      $("#list").empty();
                      // Выводим маршрутный лист
                      $('#list').append(moveList);
    Ну и соответственно, коли нужно скриптом, то переберете moveList (все для примера...понятно что тут нужно чтобы в нем было только "street " и числовое значение "segments.getLength()") и при переборке осуществляете элементарный регистроЗАВИСИМЫЙ поиск на фразу "МКАД"...

    Если найдено то к какой нибудь переменной прибавляете просто значение "segments.getLength()", а потом уже итоговую сумму "по мкаду" перемножаете на ваш тариф движения по городу...

    Что думаете? Самому стало интересно...
  7. TopicStarter Overlay
    Waldemaar
    Оффлайн

    Waldemaar Новичок

    Вместе с:
    31 янв 2014
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Вау, спасибо большое! Пока ничего не думаю, отослал ссылку программисту, он посмотрит и скажет.
  8. TopicStarter Overlay
    Waldemaar
    Оффлайн

    Waldemaar Новичок

    Вместе с:
    31 янв 2014
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Программист говорит насчет двух библиотек вы правы, а насчет кода он пока не уверен. На следующей неделе будем разбирать в подробностях.

Поделиться этой страницей