как отложить загрузку маркеров на карту openlayers с mapstraction - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть страница с 10 маркерами на карте открытых слоев, используемой с помощью mapstraction.

Я хочу сначала загрузить карту, а затем маркер один за другим, скажем, каждую секунду, я попытался использовать window.setTimeout () itзагружает карту и загружает только первый маркер, после чего он останавливается.

  var map;
  var lat = new Array() ;
  lat=${latitude};
  var lon= new Array();
  lon=${longitude};
  var oneByOneCounter=0;
  var count=10;
  function initMap(){  
       map = new Mapstraction('mymap','openlayers');
       map.setCenter(new LatLonPoint(0.0,0.0));
       map.addControls({pan: true, zoom:'small', map_type:true});
       renderMarkerOneByOne();
       map.autoCenterAndZoom();
     };


   function renderMarkerOneByOne() {
   if (oneByOneCounter < count) {
       latitude= lat[oneByOneCounter];
       longitude= lon[oneByOneCounter];
       var point = new LatLonPoint(latitude,longitude);
       var marker = new Marker(point);
       var info = "("+(oneByOneCounter+1)+")";
       marker.setInfoBubble(info);
       marker.setHover(true);
       marker.setIcon('icon_green.png', [27,31]);
       map.addMarker(marker);    
       oneByOneCounter++;
       window.setTimeout("renderMarkerOneByOne()", 1000);
     } else {
       oneByOneCounter = 0;
    }
   }

Я не могу выяснить, где я делаю ошибку. Функция renderMarkerOneByOne () выполняется правильно, и при выставлении alert () я вижумаркерный объект создается постоянно, но по какой-то причине после нанесения первого маркера другие маркеры не отображаются на карте.

Любая помощь или предложение приветствуются

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

Должно быть что-то вроде этого

var map;
var lat = new Array() ;
lat=${latitude};
var lon= new Array();
lon=${longitude};
var oneByOneCounter=0;
var count=10;
var centerPoint;
function initMap(){  
   map = new Mapstraction('mymap','openlayers');    
   map.addControls({pan: true, zoom:'small', map_type:true});
  centerPoint= new LatLonPoint(lat[0],lon[0]);// or any point anyone wants to put center
   renderMarkerOneByOne();
   map.setCenterAndZoom(centerPoint,"desired zoom level");
 };

Я нашел решение, потратив слишком много времени на отладку кода.Многие функции mapstraction не работают должным образом с openlayers api

0 голосов
/ 08 сентября 2011

Вместо setTimeout () попробуйте setInterval ().

...