Клуб API Карт

Расчет стоимости доставки по районам в городе

pj-promo
20 ноября 2013, 02:27

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

Для Интернет-магазина требуется создать расчет доставки.

Есть карта на которой будут разбиты на полигоны все районы города.

У каждого района есть своя цена доставки.

Мне нужно в отдельном input ввести адрес доставки (в корзине перед оформлением), где я в результате получу стоимость доставки по введеному адресу.

Эту сумму я хочу отправлять вместе с заказом.

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

Ни одного ИМ я не смог найти в сети, где есть аналог. Либо километраж, либо просто балуном стоимость подсвечивается при наведении что ни как не влияет на код который нахиодится выше карты.

 

С документацией разбирался, но побоялся что либо будет сделать очень проблемно (касательно меня), либо пока нет технической возможности.

Есть уже наброски кода, но столкнулся с трудностью которую не могу победить.

 

<!doctype html>

<html lang="en">

<head>

  <meta charset="utf-8">

  <title>click demo</title>

        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>

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

        

    </head>

    <body>

<p>Yet one more Paragraph</p>

<div id="YMapsID" class="MapInner" style="width:600px;height:400px"></div>

<script type="text/javascript">

            /* При успешной загрузке API выполняется

               соответствующая функция */

            ymaps.ready(function () { 

                var myMap = new ymaps.Map("YMapsID", {

// Центр карты

center: [56.83689036159881,60.60710966194426],//56.83689036159881,60.60710966194426

// Коэффициент масштабирования

zoom: 12

});

 

// Добавление стандартного набора кнопок

myMap.controls.add("mapTools")

// Добавление кнопки изменения масштаба 

.add("zoomControl")

// Добавление списка типов карты

.add("typeSelector");

 

var pol = {};

 

ymaps.geoXml.load('http://maps.yandex.ru/export/usermaps/50coN7kfCSldAIIOIMgUngD8PsUr4-_r/').then(function (res) {

 

pol = res.geoObjects;

//balloonopen

pol.events.add('balloonopen', function (obj) {

alert(obj.originalEvent.target.properties.get('description'));

});

 

myMap.geoObjects.add(res.geoObjects);

 

});

 

//Найти адрес

var myGeocoder = ymaps.geocode('Екатеринбург Ленина 1');

myGeocoder.then(

function (res) {

var nearest = res.geoObjects.get(0);

var name = nearest.properties.get('name');

nearest.properties.set('iconContent', name);

nearest.options.set('preset', 'twirl#redStretchyIcon');

//Поставить балун

myMap.geoObjects.add(res.geoObjects);

 

});

 

//Определить деск у зоны куда попад балун и тем самым получить сумму доставки

var m = {};

 

$( "p" ).click(function() 

{

// Создание метки 

var myPlacemark = new ymaps.Placemark(

// Координаты метки

[56.80613185317287,60.54687833870205], {

/* Свойства метки:

- контент значка метки */

iconContent: "Метка",

// - контент балуна метки

balloonContent: "Контент"

}, {

/* Опции метки:

- флаг перетаскивания метки */

draggable: true,

/* - показывать значок метки 

при открытии балуна */

hideIconOnBalloonOpen: false

}

);

// Добавление метки на карту

m = myPlacemark;

myMap.geoObjects.add(myPlacemark);

});

});

        </script>

    </body>

</html>

 

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

Ссылка на карту: http://maps.yandex.ru/?um=50coN7kfCSldAIIOIMgUngD8PsUr4-_r&l=map

 

Такую задачу реально реализовать?

Или возможно есть другие варианты реализации моей задачи?

Заранее благодарен.

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

Привет.

Недавно мы делились примером подобной реализации в Блоге АПИ.

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

Весь код доступен на моем гитхаб

Спасибо!

Посмотрел пример, понял что быстро мне не сделать ))

JS у меня не основной язык.

Может сделаю, дам знать, вдруг оцените )

На самом деле все должно работать без каких-либо особых переделок.

Нужны только данные ввиде, аналогичном том что лежит в *.json файлах