Клуб API Карт

Помогите люди.

o-ava-auto
24 сентября 2012, 19:17

Всем привет есть программа которая работает с картами посредством апи. Там есть 1 момент. Я сделал так чтобы отображалисьь пробки но никак не могу сделать чтобы они автоматически обновлялись. Помгите пожалуйста все перерыл не могу понять что не так.

  

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">

<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>YANDEX.</TITLE>

<META http-equiv=Content-Type content="text/html; charset=utf-8">

 

    <div id="embed_cars" style="width:1px;height:1px">

<embed width="1" height="1"></embed> 

     </div>

 

 

<STYLE>HTML {

WIDTH: 100%; HEIGHT: 100%

}

BODY {

PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; WIDTH: 100%; PADDING-TOP: 0px; HEIGHT: 100%

}

 

#YMapsID {

WIDTH: 100%; HEIGHT: 100%

}

.YMaps-b-balloon-content UL {

PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 5px; PADDING-TOP: 0px

}

.YMaps-b-balloon-content P IMG {

PADDING-RIGHT: 5px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: 5px; PADDING-TOP: 0px

}

.YMaps-b-balloon-content P IMG {

PADDING-RIGHT: 5px; PADDING-LEFT: 0px; FLOAT: left; PADDING-BOTTOM: 5px; PADDING-TOP: 0px

}

.YMaps-b-balloon-content P {

PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px

}

.clear {

CLEAR: both

}

</STYLE>

<script src="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ==&modules=traffic" type="text/javascript"></script>

<SCRIPT type=text/javascript>

var map;

var WidthMap=0;

var HeightMap=0;

var traffic = new YMaps.Traffic.Control();

    //----------------------------------------------------------------------------------------------------- 

    window.onload = function () {

        map=new YMaps.Map(document.getElementById("YMapsID"));

        map.addControl(new YMaps.TypeControl());

        map.addControl(new YMaps.ToolBar([new YMaps.ToolBar.RulerButton(),new YMaps.ToolBar.MoveButton()]));

        map.addControl(traffic, new YMaps.ControlPosition(YMaps.ControlPosition.BOTTOM_LEFT, new YMaps.Point(5, 5),traffic.update()));

        //-------------------------------------------------------------------------------------------------

        if (WidthMap!=0) {

            ResizeMap(WidthMap,HeightMap);

        }

        //-------------------------------------------------------------------------------------------------

        map.setCenter(new YMaps.GeoPoint(37,55),1);

        window.external.Overview(0);

    };

    //----------------------------------------------------------------------------------------------------- 

    //Установить текущий маштаб

    //----------------------------------------------------------------------------------------------------- 

    function SetCurrentZoom(NewZoom) {

        if(map!=null) {

            map.setZoom(NewZoom);

        }   

    }

    //----------------------------------------------------------------------------------------------------- 

    //Установить маштаб по координатам

    //----------------------------------------------------------------------------------------------------- 

    function SetCurrentBounds(MinLat,MinLon,MaxLat,MaxLon) {

        if(map!=null) {

            map.setBounds(new YMaps.GeoBounds(new YMaps.GeoPoint(MinLon,MinLat),new YMaps.GeoPoint(MaxLon,MaxLat)));

        }   

    }

    //----------------------------------------------------------------------------------------------------- 

    //Центрировать карту

    //----------------------------------------------------------------------------------------------------- 

    function SetGeoCenter( Lat, Lon) {

        if(map!=null) {

        var zoom=map.getZoom();

            map.setCenter(new YMaps.GeoPoint(Lon,Lat),zoom);

        }

    }

    //----------------------------------------------------------------------------------------------------- 

    //Получить текущий маштаб

    //----------------------------------------------------------------------------------------------------- 

    function GetCurrentZoom(Temp) {

        if(map!=null) {

            var zoom=map.getZoom();

            window.external.CurrentZoom_Return(zoom)

        }

    }

    //----------------------------------------------------------------------------------------------------- 

    //Географические в экранные координаты

    //----------------------------------------------------------------------------------------------------- 

    function GeoToDev(Lat,Lon) {

        if(map!=null) {

            var currLatLng=map.converter.coordinatesToLocalPixels(new YMaps.GeoPoint(Lon,Lat));

            window.external.GeoToDev_Convert(currLatLng.getX(),currLatLng.getY())

        }           

    }

    //----------------------------------------------------------------------------------------------------- 

    //Экранные в географические координаты

    //----------------------------------------------------------------------------------------------------- 

    function DevToGeo(X,Y) {

        if(map!=null) {

            var currLatLng=map.converter.localPixelsToCoordinates(new YMaps.Point(X,Y));

            window.external.DevToGeo_Convert(currLatLng.getY(),currLatLng.getX())

        }

    }

    //----------------------------------------------------------------------------------------------------- 

    //Изменение размеров

    //----------------------------------------------------------------------------------------------------- 

    function ResizeMap(x,y){

 

}

    //----------------------------------------------------------------------------------------------------- 

    </SCRIPT>

<META content="MSHTML 6.00.6000.16762" name=GENERATOR>

</HEAD>

<BODY>

<DIV id=YMapsID></DIV>

</BODY>

</HTML>

 

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

Уберите, пожалуйста, код под кат.

В скрипте в onload надо дописать setTimeout( function(){ traffic.update() }, 600000); - тогда каждые 10 минут трафик будет обновляться, наверное.

может setInterval? setTimeout отработает один раз

Да, конечно setInterval.

setInterval( function(){ traffic.update() }, 600000);  

Не грузиться карта.(

ссылка есть на исходники?

должно быть:

window.onload = function () {

        map=new YMaps.Map(document.getElementById("YMapsID"));

        map.addControl(new YMaps.TypeControl());

        map.addControl(new YMaps.ToolBar([new YMaps.ToolBar.RulerButton(),new YMaps.ToolBar.MoveButton()]));

        map.addControl(traffic, new YMaps.ControlPosition(YMaps.ControlPosition.BOTTOM_LEFT, new YMaps.Point(5, 5),traffic.update()));

        //-------------------------------------------------------------------------------------------------

        if (WidthMap!=0) {

            ResizeMap(WidthMap,HeightMap);

        }

        window.setInterval(function(){ traffic.update(); }, 600000);

}

...

исходник такой же просто без модуля трафик апдейт. Сейчас попробую так

В каком смысле без модуля трафик?

Код исполняется последовательно. пятью строками выше window.onload объявляется перменная traffic, в которую помещается объект, включающий в себя функционал работы с траффиком и пробками. у него есть метод update, который, по всей видимости, обновляет информацию о пробках. Вот вам и надо её обновлять, вызывая traffic.update(), с каким-то небольшим периодом. Но желательно, чтобы этот setInterval устанавливался после создания переменной и в том же scope. Т.е. где-то непосредственно после объявления traffic = ...; Кроме того, лучше, чтобы карта была создана. Поэтому, лучшее место у вас - это внутри onload после добавления traffic на карту, или в конце onload.

Есть программа в окне которой открывается карта яндекса. Раньше она была без модуля пробки я его добовил но автообновление никак работать не хочет. А если в коде что-то не так она попросту не открывает карту.

перед тем как открывать код в программе, отладьте его сначала в броузере

желательно куда-нибудь его выложить и опубликовать тут ссылку

Если отработает код setTimeout(function(){alert(1);}, 1000);, значит у вас где-то синтаксическая или логическая ошибка. Если не отработает, то попробуйте вставить код setTimeout('alert(1);', 1000);.

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

p.s. И последуйте совету Бабушки Бэтмена. Я вам уже не раз на это намекал)

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/traffic.provider.Actual.xml может поможет Вам понять. Надежда умирает последней.

Не поможет, конечно.

У вас версия 1.1: http://api.yandex.ru/maps/doc/jsapi/1.x/mod/concepts/traffic.xml

API Яндекс.Карт нельзя использовать в десктопных приложениях. Только на сайтах.

Опять неудача. Не открывается окно с картой(((

Не получается(

а вы уверены что они не обновляются сами?

в доке сказано

 

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


Не обновляется пока мышкой не поводишь. к сожалению на компьютере котором установленно днное ПО и он работает исключительно как телевизор поэтому возможности создавать активности на нем нету. Этот метод update куда только не вставлял не получается поэтому и обратился сюда.

выложи код своего приложения на народе, посмотрим

Там огромная программа для такси. И на 1 компьютере запущена клиентская часть которая показывает карту и все машины на ней и я очу чтобы она еще показывала пробки. В папке программы есть файлик с модулем карты яндекса вот я и пытаюсь его изменить чтобы получить автообновление пробок. Может есть еще идеи?

Вот при этом коде все прекрасно работает кроме обновления

 

http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">

http://www.w3.org/1999/xhtml">YANDEX.

 

   

 

     

 

 

 

 

замени

var map;

var WidthMap=0;

var HeightMap=0;

    //----------------------------------------------------------------------------------------------------- 

    window.onload = function () {

        map=new YMaps.Map(document.getElementById("YMapsID"));

        map.addControl(new YMaps.TypeControl());

        map.addControl(new YMaps.ToolBar([new YMaps.ToolBar.RulerButton(),new YMaps.ToolBar.MoveButton()]));

        map.addControl(new YMaps.Traffic.Control());

на

 

var map;

var traffic;

var WidthMap=0;

var HeightMap=0;

    //----------------------------------------------------------------------------------------------------- 

    window.onload = function () {

        map=new YMaps.Map(document.getElementById("YMapsID"));

        map.addControl(new YMaps.TypeControl());

        map.addControl(new YMaps.ToolBar([new YMaps.ToolBar.RulerButton(),new YMaps.ToolBar.MoveButton()]));

traffic = new YMaps.Traffic.Control();

map.addControl(traffic);

window.setInterval(function () {

     traffic.update();

}, 600000);

 

Заменил! Карта загрузилась! не буду дергать посмотрю будет ли работать автообновление.!

наверное ключ не на этот домен зарегистрирован

попробуй этот вариант

Я уже попробывал! 

 

 

Это время на которое актуальны пробки? Не знаете случайно?

картинки не вижу

404 Not Found

сейчас что то она заливаться не хочет

сейчас пробуйте.

Тогда я так понимаю дело сделано!  Спасибо Вам огромное!!!! Я оставлю до утра посмотрим какой статус пробок будет утром! 

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

"спасибо" вполне достаточно )

Спасибо Вам огромное!! А то мучился две недели не мог понять где косяк! Спасибо!!!

При чем у вас ведь в первоначальном коде var traffiс присутствует ;-) А потом куда-то делось.

Да все работает! Всем спасибо за помощь!