Клуб API Карт

Содержимое полученного адреса и полученного растояния

unifot2020
6 августа 2014, 05:29

Здравствуйте! Делаю по примеру вот этой карты для расчета стоимости доставки http://www.drova47.ru/calculator.html свою похожую карту. . В нее я добавил функцию для получения дистанции в переменную. Мне нужно передать значения полученного адреса(var address) и расстояния (var distance) далее в файл PHP. Однако в перемнной var address адрес завернут еще и в html код, а в перемнной var distance помимо полученного расстояния есть еще и  км (например 14 км). Как получить чистые значения? И еще как заменить функцию отрисовки маршрута на функцию отрисовки простой прямой линии до точки доставки?

 

var DELIVERY_TARIF = 30,
    MINIMUM_COST = 1000;
ymaps.ready(function() {
    var center = [56.030691, 92.932553],
        map = new ymaps.Map('YMapsID', {
            center: center,
            zoom: 11.8,
            type: 'yandex#map',
            behaviors: ['scrollZoom']
        });
    calculator = new DeliveryCalculator(map, center);
    var search = new ymaps.control.SearchControl({
        useMapBounds: true,
        noCentering: true,
        noPlacemark: true
    });
    map.controls.add('mapTools');
    map.controls.add('zoomControl');
    map.controls.add('typeSelector');
    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 = new ymaps.Placemark([56.018217, 93.03714], {
        hintContent: 'Водолей',
        balloonContent: 'ул. Глинки, 37 "г"'
    }, {
        iconImageHref: 'http://pion24.ru/favicon.ico',
        iconImageSize: [20, 20],
        iconImageOffset: [0, -0]
    });
    this._start.balloon.open();
    this._route = null;
    map.events.add('click', this._onStartChanged, this);
    map.geoObjects.add(this._finish);
}
var ptp = DeliveryCalculator.prototype;
ptp._onStartChanged = function(e) {
    var position = e.get('coordPosition');
    if (this._start) {
        position && this._start.geometry.setCoordinates(position);
    } else {
        this._start = new ymaps.Placemark(position, {
            draggable: true
        });
        this._start.events.add('dragend', this._onStartChanged, this);
        this._map.geoObjects.add(this._start);
    }
    this.getDirections();
};
ptp.getDirections = function() {
    var self = this,
        start = this._start.geometry.getCoordinates(),
        finish = this._finish.geometry.getCoordinates();
    var distance = (ymaps.formatter.distance(ymaps.coordSystem.geo.getDistance(start, finish)));
    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");
        $('form_address').value = address;
        $('form_distance').value = distance;
        ymaps.route([start, finish]).then(function(router) {
            var distance = Math.round(router.getLength() / 1000);
            message = 'Расстояние доставки дров: ' + distance + 'км.
' + 'Стоимость доставки "Камазом"';
            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(self.calculate(distance)));
            self._start.balloon.open();
        });
    });
};
ptp.calculate = function(len) {
    var cost = len * DELIVERY_TARIF;
    return cost < MINIMUM_COST && MINIMUM_COST || cost;
};

 

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

Можно распарсить html, или посмотреть в консоли что еще возвращает геокодер (там должны быть компоненты адреса без html)

console.log(geocode.geoObjects.get(0).properties.getAll());

 

Нарисовать прямую можно с помощью ломаной

http://api.yandex.ru/maps/jsbox/2.1/polyline

Спасибо за советы. Но никак не могу вместо функции построения маршрута приспособить функцию ломаной. В js совсем еще зелен, был бы рад еще какой-нибудь помощи)