0

我正在设计一个带有 deCarta 地图的网站。我需要为一定数量的点添加一些叠加层。我的代码如下所示,

for(var i = 0; i<NumberofPoints; i++){
    var lat1, lon1, lat2, lon2, lat3, lon3;

    //some calculations  for coordinates go here

    //create a line object
    var polyline = new deCarta.Core.Polyline({
    lineGeometry: [
        new deCarta.Core.Position(lat2, lon2),
        new deCarta.Core.Position(lat1, lon1),
        new deCarta.Core.Position(lat3, lon3)
    ],
    strokeColor: '#000088',
    strokeWidth: 2
    });

    //add to map
    shapeOverlay.addObject(polyline);   

}

如果我在循环中的某处添加手动延迟(使用alert('plotting point number'+i);),我会得到地图上的所有点。否则,我什么都得不到!我猜想创建线对象并将其添加到地图的调用在迭代循环之前还没有完成。

所以我的问题是,如何确保在转到循环中的下一个点之前完成创建线对象并添加到地图的调用?

对不起,如果问题措辞不好。这是我第一次在这里发帖(或者我第一次使用 JavaScript!)任何帮助将不胜感激。

4

2 回答 2

1
function makePoints() {
      var lat1, lon1, lat2, lon2, lat3, lon3;

      //some calculations  for coordinates go here

      //create a line object
      var polyline = new deCarta.Core.Polyline({
      lineGeometry: [
          new deCarta.Core.Position(lat2, lon2),
          new deCarta.Core.Position(lat1, lon1),
          new deCarta.Core.Position(lat3, lon3)
      ],
      strokeColor: '#000088',
      strokeWidth: 2
      });

      //add to map
      shapeOverlay.addObject(polyline); 
}

for (var i = 0; i < NumberofPoints; i++) {
    // Try to increase this number if lines can't keep up.
    setTimeout(makePoints, 500 * i);
}
于 2013-08-07T23:32:33.233 回答
-1

如果您要触发的函数将返回一个值,则使用它来中断 while 循环。

于 2013-08-07T23:25:56.080 回答