Клуб API Карт

Автомасштаб карты.

Lestat-riw
22 октября 2010, 17:32

Помогите пожалуйста, кто может..

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


Адрес карты: http://seminar.acetp.ru/seminar.aspx?id=144

соответственно код для карты

/////////////////////////////////////////////////////////////////////////////
<h2>Схема проезда</h2>
<!-- Этот блок кода нужно вставить в ту часть страницы, где вы хотите разместить карту  (начало) -->
<script

src="http://api-maps.yandex.ru/1.1/?modules=traffic&amp;key=AMrTOkwBAAAAjWFqCgMAEBQuyYYvGVvAN4TvxbClzdjpnJ8AAAAAAAAAAAA1GyyUhTCjVVoSO3pk5B09uduWDQ==&wizard=constructor"
type="text/javascript"></script>
<script type="text/javascript">
    YMaps.jQuery(window).load(function () {
        var map = new YMaps.Map(YMaps.jQuery("#YMapsID-1656")[0]);
        map.setCenter(new YMaps.GeoPoint(#Coordinates1), 15, YMaps.MapType.MAP);
        map.addControl(new YMaps.Zoom());
        map.addControl(new YMaps.ToolBar());
        map.addControl(new YMaps.Traffic.Control({ showInfoSwitcher: true }, { infoLayerShown: true }));
        map.addControl(new YMaps.TypeControl());
        map.enableScrollZoom();

        YMaps.Styles.add("constructor#pmgnmPlacemark", {
            iconStyle : {
                href : "http://api-maps.yandex.ru/i/0.3/placemarks/pmgnm.png",
                size : new YMaps.Point(28,29),
                offset: new YMaps.Point(-8,-27)
            }
        });

        YMaps.Styles.add("constructor#pmlbmPlacemark", {
            iconStyle : {
                href : "http://seminar.acetp.ru/Maps/pmrds.png",
                size : new YMaps.Point(28,29),
                offset: new YMaps.Point(-8,-27)
            }
        });

map.addOverlay(createObject("Placemark",
new YMaps.GeoPoint(#Coordinates1), "constructor#pmlbmPlacemark",
"<h1 style=color:#91B200; font-size:24px;margin:8px 0px;
font-weight:400;>Обучающий семинар</h1><p
style=margin:3px;><span style=font-weight:bold>Дата проведения:
</span>#Date1</p><p style=margin:3px;><span
style=font-weight:bold>Место проведения:
</span>#Address1</p><p style=margin:3px;><span
style=font-weight:bold>Телефон: </span>#Phone</p>"));

//#BeginSecondPlacemark

map.addOverlay(createObject("Placemark",
new YMaps.GeoPoint(#Coordinates2), "constructor#pmlbmPlacemark",
"<h1 style=color:#91B200; font-size:24px;margin:8px 0px;
font-weight:400;>Обучающий семинар</h1><p
style=margin:3px;><span style=font-weight:bold>Дата проведения:
</span>#Date2</p><p style=margin:3px;><span
style=font-weight:bold>Место проведения:
</span>#Address2</p><p style=margin:3px;><span
style=font-weight:bold>Телефон: </span>#Phone</p>"));

//#EndSecondPlacemark
       
        function createObject (type, point, style, description) {
            var allowObjects = ["Placemark", "Polyline", "Polygon"],
                index = YMaps.jQuery.inArray( type, allowObjects),
                constructor = allowObjects[(index == -1) ? 0 : index];
                description = description || "";
           
            var object = new YMaps[constructor](point, {style: style, hasBalloon : !!description});
            object.description = description;
           
            return object;
        }
    });
</script>

<div id="YMapsID-1656" style="width:100%;height:500px"></div>
<!-- Этот блок кода нужно вставить в ту часть страницы, где вы хотите разместить карту (конец) -->

////////////////////////////////////////////////////////

Я совсем в скриптах не шарю.. Кто может, покажите прям на моем коде.. Мне будет проще разобраться так..

3 комментария
Подписаться на комментарии к посту
Почитайте документацию. У объекта map  есть необходимый вам метод.
Вам необходимо высчитать bounds, который занимают все объекты. Это можно сделать с помощью класса YMaps.GeoCollectionBounds.

Примерно так (я выделил полужирным шрифтом строчки, которые необходимо вставить):

var bounds = new YMaps.GeoCollectionBounds();

//// Добавление объектов с помощью функции createObject//                                                                                                                                                                                

map.setBounds(bounds);

function createObject (type, point, style, description) {
    var allowObjects = ["Placemark", "Polyline", "Polygon"],       
        index = YMaps.jQuery.inArray( type, allowObjects),
        constructor = allowObjects[(index == -1) ? 0 : index];
        description = description || "";
  
    var object = new YMaps[constructor](point, {style: style, hasBalloon : !!description});
    object.description = description;

    bounds.add((object.getGeoPoint || object.getPoints).call(object));
  
    return object;
}

Ну и я бы посоветовал писать код вручную. Код, полученный из конструктора, не является универсальным, поэтому его далеко не всегда можно безболезненно адаптировать.
Александр, спасибо большое за совет..
Вот только одна небольшая  проблемка,.. я вообще в скриптах не разбираюсь... можете ли вы показать  прямо на моем коде что куда вставить?
Макчимум до чего я дошел- это скопитьвать весь этот код(предложенный тобой) в конец скрипта, после чего у меня карта настроилась на океан.....