Javascript 如何使用mapstraction延迟标记加载openlayers地图
我有一个页面,在通过mapstraction使用的openlayers地图中显示了10个标记 我想先加载地图,然后逐个标记,比如说,每隔一秒钟,我就尝试使用window.setTimeout加载地图,然后只加载第一个标记,然后停止Javascript 如何使用mapstraction延迟标记加载openlayers地图,javascript,openlayers,mapstraction,Javascript,Openlayers,Mapstraction,我有一个页面,在通过mapstraction使用的openlayers地图中显示了10个标记 我想先加载地图,然后逐个标记,比如说,每隔一秒钟,我就尝试使用window.setTimeout加载地图,然后只加载第一个标记,然后停止 var map; var lat = new Array() ; lat=${latitude}; var lon= new Array(); lon=${longitude}; var oneByOneCounter=0; var cou
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函数正确执行,在发出警报时,我可以看到标记对象一直在创建,但由于某些原因,在绘制第一个标记后,其他标记没有绘制在地图上
欢迎任何帮助或建议
谢谢你,不用setTimeout,试试setInterval。它必须是这样的
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一起正常工作我实际上发现了问题,这不是循环的问题,而是map.AutoCenter和Zoom函数的问题。函数在迭代时正在失去其值。在我使用setCenterAndZoom功能后,它工作得很好。