Клуб API Карт

Geocoder + YMaps. Настройка отображения.

Пост в архиве.

Прошу помощи, товарищи.

На одном из проектов было решено воспользоваться сервисом для указания расположения квартир в городе.

Поиск происходит через Geocoder - работает, настроено.

Установка и отображение тоже есть, да только так, что довольно-таки некрасиво.

Никак не могу найти как принужденно указать авто выбор ZOOMа == "дом" (если у div ширина >600px) - все нормально, если <400px, то мастабируемость "улица".

Не нашел дополнительных кн. "Добавить метку" и "Информация"

Не понял как настроить бабл такого же вида, как здесь - мой же получается плоским и очень длинным (в 2 раза длиннее текста, содержащегося в нем).


Мои поделки лежат здесь ;( - помогите!

11 комментариев
Александр Новиков
28 января 2016, 08:10
указать уровень zoom можно например при оздании карты. В конструкторе YMaps это второй параметр. map = new YMaps.Map(document.getElementById("YMapsID"), 15); с число поэксперементируйте Но тогда не нужно использовать setBounds а нужно будет установить центр карты по координатам объекта. Про дополнительные кнопки вопроса не понял :) А с баблом у вас видимо проблема в том что стили сайта влияют на элементы внутри бабла. Такое впечатление что бабл принимает ширину равную ширине слоя с картой. Надо смотреть и проверять что может мешать. Для начала попробуйте на сайте отключить файл CSS и посмотреть что получится
 
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);

"10" - это и есть параметр zoom, верно? я его использовал, но видно
map.setBounds(geoResult.getBounds());
 его потом перебивает?

Ширина бабла была в 2 раза больше нужной действительно изза стилей самого сайта, однако firebug этого не показывал (почему то). Ошибка возникла из-за того, что в стилях стояло
table{width:100%}

 Спасибо,
Александр Новиков
28 января 2016, 08:10
Да, все верно. setBounds устанавливает центр карты и уровень zoom исходя из результатов поиска.
Ширину и высоту балуна можно настроить с помощью параметров.
 
После получения первого результата геокодирования, ему можно присвоить необходимые параметры с помощью метода setOptions():
geoResult = this.get(0);
geoResult.setOptions({
    balloonOptions : {
        maxWidth: 300
    }
});
На панели инструментов по умолчанию доступны 3 кнопки: перетаскивание, лупа и линейка.

Если необходимы другие кнопки, то их необходимо создать самому. Например, про создание аналога инструмента "Информация" рассказано в статье.

Немного не понял про автозум. Не могли бы Вы подробнее рассказать о том, что имеете ввиду?
Для разработки использовал этот пример работы геокодера.
На сколько я теперь понимаю, у меня (как писал выше) параметр
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
 перебивается параметром
map.setBounds(geoResult.getBounds());
Таким образом, как бы я не изменял "10" zoom у меня всегда был на "улица", а не "дом", как хотелось бы :(

Спасибо за помощь с
geoResult.setOptions({
на метод setOptions() смотрел и читал, но не могг правильно применить ввиду отсутствия необходимых знаний (скорее всего именно из-за этого).

Статью про "Информация" уже изучаю.
Спасибо большое:                   
                    geoResult = this.get(0);
                    geoResult.setOptions({
                      balloonOptions : {
                          maxWidth: 300
                      }
                    });
                    geoResult.setBalloonContent(value);
                   
                    var coord = geoResult.getGeoPoint();
                    map.setCenter(coord, 16);
                   
                    map.addOverlay(geoResult);
                    geoResult.openBalloon();

Работает именно так, как мне и надо было.
Упорство и труд - все перетрут :)
Еще пару вопросов, в которых не смог разобраться:
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});
            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
                if (this.length()) {
                    geoResult = this.get(0);
 Имея в переменной geoResult результат геокодирования, при помощи некоторой функции можно вытащить нужные данные.
var coord = geoResult.getGeoPoint();
                    map.setCenter(coord, 16);
Через geoResult.getGeoPoint() вытаскиваю координаты найденной точки.

А какой функцией вытащить подпись к этой точке?
Т.е. если входные данные "Горо, улица, дом, квартира", выходными могут быть только "Город" или "Город, улица" - как узнать, что нашел геокодер по исходному запросу.

Спасибо заранее.
Адрес одной строкой можно получить через поле text. А также обратите внимания на параметры precision и kind.

Обо всех методах, доступных для результата геокодирования, можно узнать в Справочнике по программному интерфейсу.
rodlex,
на странице http://imperor.ru/detail.php?id=828 мистика происходит. Дело в том, что карта переодически отказывает, если пройтись по вкладкам пару раз.

Это возникает из-за использования дополнительного js кода на странице или же по другим причинам?

Есть ли возможность проверить? Спасибо за помощь.
Проблема не воспроизвелась в браузерах IE6, FF 3.5.5, Opera 10.10. В каком браузере Вы наблюдаете проблему? Что значит "отказывает"?
Александр, прошу прокомментировать данную проблему
Очень жду.