Ребята, выручайте.
Задача:
Есть 4 инпута с адресами, которые, выглядят примерно так: «2-я Бауманская, 5», «Тверская, 4», «Большая Никитская, 11», «Киевский вокзал». Необходимо произвести поиск в столице и области на карте этих адресов и вывести маршрут через эти адреса. Кол-во адресов может меняться от 2 до 4 (добавлением/удалением промежуточных точек типа Тверской и Большой Никитской). Метки адресов маршрута должны быть названы, причем не напрямую из инпутов (там может быть и грамматическая ошибка и строчные буквы), а обратным геокодированием точек маршрута (как на примере http://api.yandex.ru/maps
У меня получилась вот такая конструкция:
ymaps.ready(init);
function init() {
$('#map').empty();
var myMap = new ymaps.Map("map", {
center: [55.754178, 37.624678],
zoom: 12,
behaviors: ["default", "scrollZoom"]
}, {
minZoom: 10
}
);
myMap.controls.add("zoomControl")
.add("trafficControl");
var from = document.getElementById("from").value;
var to = document.getElementById("to").value;
var through1 = document.getElementById("through1").value;
var through2 = document.getElementById("through2").value;
var myGeocoder = ymaps.geocode(from, {boundedBy: [[55.296944, 36.89326], [56.223008, 38.631846]], strictBounds: true, results: 1});
myGeocoder.then(
function (res) {
if (res.geoObjects.getLength()) {
var geofrom = res.geoObjects.get(0);
var myGeocoder = ymaps.geocode([55.742904, 37.565767], {boundedBy: [[55.339351, 37.121501], [56.199283, 38.659999]], strictBounds: true, results: 1});
myGeocoder.then(
function (res) {
if (res.geoObjects.getLength()) {
var geoto = res.geoObjects.get(0);
var myRouter = ymaps.route([geofrom.geometry.getCoordinates(), geoto.geometry.getCoordinates()], {mapStateAutoApply: true});
myRouter.then(function(route) {
var points = route.getWayPoints();
points.get(0).options.set('preset', 'twirl#blueStretchyIcon');
points.get(0).properties.set("iconContent", geofrom.geometry.getCoordinates());
points.get(1).options.set('preset', 'twirl#redStretchyIcon');
points.get(1).properties.set("iconContent", geoto.geometry.getCoordinates());
route.getPaths().options.set({
balloonContenBodyLayout: ymaps.templateLayoutFactory.createClass('$[propert ies.humanJamsTime]')
});
myMap.geoObjects.add(route);
},
function (error) {
alert("Возникла ошибка: " + error.message);
}
)
}
},
function (error) {
alert("Возникла ошибка: " + error.message);
}
)
}
},
function (error) {
alert("Возникла ошибка: " + error.message);
}
)
};
Т.е. для того, чтобы произвести геокодирование 2 адресов, приходится засовывать один геокодер в другой. С 4 адресами вообще ужас получится. Может можно как то это дело упростить?
P.S. [55.742904, 37.565767] — координаты, внутри которых производить поиск (прямоугольник содержащий в себе мск и область). Может можно как то задать в геокодере, чтобы искались адреса, наиболее близкие к центру мск?