Чем больше встраиваю API в сайт, тем больше понимаю что нельзя полностью полагаться на API.
Выявил две проблемы и все с построением маршрута.
1) При указании улицы Бирюлёвская, маршрут строится до станции "Орехово", хотя удобнее и ближе добираться до "Царицыно". Карты не учитывают переезд под Повелецкой линией.
2) Не всегда определяем или строит маршрут до метро. В данный момент встраиваю карту в сайт недвижимости и натыкаюсь чисто случайно на проблему такого характера.
Пользователь добавляет объект(к API не относится) и обращается к карте, нанося точку, на карту, определяя ближайшее метро, но маршрут строить не хочет как и определить растояние до метро.
Например, "Молодогвардейская улица, 18к2" до метро "Кунцевская", метро находит, маршрут не строит. Видимо по тому, что объект не находится рядом с дорогой.
Может я не так что-то делаю:
Скинул свой кривой код
var myMap, routeLength, firtstPathTime, firstPathFirstSegmentJamsTime, name_metro;
// ymaps.ready(inits);
ymaps.ready(init);
function init() {
yandex_set_map('Россия, ' + $('#adress_name').val(), 9);
}
/* Строительство карты */
function yandex_set_map(city, zoom_maps, metro) {
// myMap.panTo(
var newmaps = new ymaps.geocode(city);
newmaps.then(function(res) {
// определяем координаты
var myCoords = res.geoObjects.get(0).geometry.getCoordinates();
// Добавляем координаты в шаблон
$('#yandex_point').val(myCoords);
// создаём карту
myMap = new ymaps.Map("map_add", {
center : myCoords,
zoom : zoom_maps
});
// if(metro == true){
// messeng(myCoords);
// http://api.yandex.ru/maps
var myGeocoder_metro = ymaps.geocode(myCoords, {
kind : 'metro',
results : 1
});
// }
var myGeocoder_home = ymaps.geocode(myCoords, {
kind : 'house',
results : 1
});
myGeocoder_home.then(function(res_house) {
var nearest_house = res_house.geoObjects.get(0);
// var name = nearest.properties.get('name');
nearest_house.properties.set('iconContent', 'Ближайшее метро');
nearest_house.options.set('preset', 'twirl#redStretchyIcon');
myMap.geoObjects.add(res.geoObjects);
}, function(err) {
// alert('Ошибка');
});
// if(metro == true){
myGeocoder_metro.then(function(res) {
var nearest = res.geoObjects.get(0);
var name_metro = nearest.properties.get('name');
nearest.properties.set('iconContent', name_metro);
nearest.options.set('preset', 'twirl#redStretchyIcon');
myMap.geoObjects.add(res.geoObjects);
$('#metro_yandex_name').val(name_metro);
/* Название метро */
/* messeng(name_metro); */
ymaps.route([city, name_metro]).then(function(route) {
messeng(name_metro);
// маршрут
myMap.geoObjects.add(route);
routeLength = route.getLength();
/* длину маршрута в метрах. */
firtstPathTime = route.getTime();
/* Возвращает время проезда маршрута в секундах. */
firstPathFirstSegmentJamsTime = route.getJamsTime();
/* Возвращает время проезда маршрута в секундах с учетом пробок. */
// $('#metro_yandex_name').val(name_metro);/* Название метро */
$('#metro_yandex_distance').val(routeLength);
$('#metro_yandex_routeget
$('#metro_yandex_routeget
// messeng(routeLength +'Длина');
// messeng(firtstPathTime +'Время без учета пробок ');
// messeng(firstPathFirstSegmentJamsTime +'Время с пробками ');
/* Возвращает время проезда маршрута в секундах. */
// 934.59Время с пробками
}, function(error) {
// alert('Возникла ошибка: ' + error.message);
});
}, function(err) {
// alert('Ошибка');
});
// }
myMap.controls.add('zoomControl', {
top : 5,
left : 5
});
/*
Baloon = new ymaps.Placemark(myCoords,
{// Опции
preset : 'twirl#redStretchyIcon' ,
iconContent : 'Ближайшее метро'
});
// Добавляем метку на карту
myMap.geoObjects.add(Baloon);
*/
});
}
function yandex_reload_map(city, zoom_maps, metro) {
/* удаляем карту */
myMap.destroy();
/* обнуляем метро */
routeLength = 0, name_metro = 0, firtstPathTime = 0, firstPathFirstSegmentJamsTime = 0;
yandex_set_map(city, zoom_maps, metro)
}