Клуб API Карт

Добавить поля откуда/куда к карте расчет стоимости маршрута

anastasia.grecheneva
31 января 2014, 12:18

Добрый день! Очень необходима ваша помощь, буду благодарна если кто-нибудь подскажет решение проблемы. Я начинающий юзер, и очень плохо ориентируюсь в данном вопросе. Добавляю яндекс карту расчет стоимости маршрута на сайт. Функция Расчета там реализована отлично,но необходимо вместо стандартного одного поля ввода адреса сделать два поля (откуда/куда) ,и чтобы введенный текст в эти поля задавал начальню и конечную точку маршрута на карте. 

Вот код калькулятора:

<!-- Если вы используете API локально, то в URL ресурса необходимо указывать протокол в стандартном виде (http://...)-->

<script src="http://api-maps.yandex.ru/2.0/?load=package.full&amp;lang=ru-RU" type="text/javascript"></script>

<script type="text/javascript">// <![CDATA[

 // Константы.

    var DELIVERY_TARIF = 14,

        MINIMUM_COST = 300;

 

ymaps.ready(function () {

        var center = [55.556, 42.021],

            map = new ymaps.Map('map', {

            center: center,

            zoom: 10,

            type: 'yandex#map',

            behaviors: ['scrollZoom', 'drag']

        }),

                

 

             

 

         calculator = new DeliveryCalculator(map, center);

        

         var search = new ymaps.control.SearchControl({

            useMapBounds : true,

            noCentering : true,

            noPlacemark : true

        });

        map.controls.add(search, { right: 5, top: 5 });

        search.events.add("resultselect", function (e) {

            var results = search.getResultsArray(),

                selected = e.get('resultIndex'),

                point = results[selected].geometry.getCoordinates();

 

            map.events.fire('click', new ymaps.Event({ coordPosition : point }));

        });

   }); 

 

 

function DeliveryCalculator(map, finish) {

        this._map = map;

        this._start = null;

        this._finish = null;

        this._route = null;

        map.events.add('click', this._onClick, this);

    }

 

    var ptp = DeliveryCalculator.prototype;

 

    ptp._onClick = function (e) {

        var position = e.get('coordPosition');

 

        if(!this._start) {

            this._start = new ymaps.Placemark(position, { iconContent: "А" }, { draggable : true });

            this._start.events.add('dragend', this._onDragEnd, this);

            this._map.geoObjects.add(this._start);

        } else if (!this._finish) {

            this._finish = new ymaps.Placemark(position, { iconContent: "Б" }, { draggable : true });

            this._finish.events.add('dragend', this._onDragEnd, this);

            this._map.geoObjects.add(this._finish);

        } else {

            /*position && this._start.geometry.setCoordinates(position);*/

            this._map.geoObjects.remove(this._start);

            this._start = null;

            this._map.geoObjects.remove(this._finish);

            this._finish = null;

            this._map.geoObjects.remove(this._route);

            this._route = null;

        }

        this.getDirections();

    };

 

    ptp._onDragEnd = function (e) {

        this.getDirections();

    };

 

    ptp.getDirections = function () {

        var self = this,

            start = this._start.geometry.getCoordinates(),

            finish = this._finish.geometry.getCoordinates();

 

        this._route && this._map.geoObjects.remove(this._route);

        ymaps.geocode(start)

            .then(function (geocode) {

                var address = geocode.geoObjects.get(0) && geocode.geoObjects.get(0).properties.get("balloonContentBody") || "";

 

                ymaps.route([start, finish])

                    .then(function (router) {

                        var distance = Math.round(router.getLength() / 1000);

                            message = '<span>Расстояние: ' + distance + 'км.</span>

' +

                                      '<span style="font-weight: bold; font-style: italic">Стоимость доставки: %sр.</span>';

 

                        self._route = router.getPaths();

                        self._route.options.set({ strokeWidth: 5, strokeColor: '0000ffff', opacity: 0.5 });

                        self._map.geoObjects.add(self._route);

                        self._start.properties.set("balloonContentBody", address + message.replace('%s', self.calculate(distance)));

                        self._start.balloon.open();

                    });

            });

    };

 

    ptp.calculate = function (len) {

        var cost = len * DELIVERY_TARIF;

 

        return cost < MINIMUM_COST && MINIMUM_COST || cost;

};

ymaps.ready(init);

// ]]></script>

<div id="map" style="width: 700px; height: 600px;"><!--карта--></div>

 

Подскажите пожалуйста выход из ситуации. Очень нужна ваша помощь!!!!!!

3 комментария
Подписаться на комментарии к посту
anastasia.grecheneva
31 января 2014, 13:23

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

Анастасия, ничуть не сомневаюсь что таких как Вы мало,

ведь каждый человек по-своему уникален.

 

Думаю, что в команду вашего проекта нужно взять специалиста,

достаточно квалифицированного для решения подобных задач.

 

Я со своей стороны внес свой скромный вклад, написав этот пример,

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

Я не могу все за всех писать, т.к. я могу быстро устать и потерять интерес,

а мне хотелось бы написать еще много хороших, нужных и полезных примеров.

 

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

Следите за анонсами.

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