谷歌地图变量和功能的范围

时间:2016-12-19 17:31:57

标签: javascript google-maps

我正在尝试使用谷歌地图,并试图在运行中添加一些polyLines。基本上,在文档的正文中,我有一个setInterval函数,它会定期将行放置一段时间,然后在经过一段时间后删除它们。访问各种映射变量时会出现问题,但是当我尝试调用测试程序时(下面),我会收到类似“marker1未定义”的错误。是否可以从地图初始化例程外部访问地图变量?

这是Javascript代码 - 这都在头脑中

var commsLine = [];
var marker1, marker2, marker3, map, Comms;

function initMap() {
    latLng = new google.maps.LatLng(50.8917,-1.3989);

    map = new google.maps.Map(document.getElementById('map_canvas'), {
    zoom: 7,
    center: latLng,
    mapTypeId: google.maps.MapTypeId.HYBRID,
    scaleControl: true
    });

    marker1 = new google.maps.Marker({
    position: new google.maps.LatLng(50.8917, 0),
    map: map
    });

    marker2 = new google.maps.Marker({
    position: new google.maps.LatLng(50.8917, -1.5),
    map: map
    });

    marker3 = new google.maps.Marker({
    position: new google.maps.LatLng(51.5, 0),
    map: map
    });

// DrawLine(); works when placed here but I want to call it from the
// setInterval function in the body
}

function DrawLine()
{

   commsLine.push( marker1.getPosition() );
   commsLine.push( marker2.getPosition() );

      Comms = new google.maps.Polyline({
      path: commsLine,
      geodesic: true,
      strokeColor: '#FF0000',
      strokeOpacity: 1.0,
      strokeWeight: 2
     });

     Comms.setMap(map);
   }

google.maps.event.addDomListener(window, 'load', initMap);

1 个答案:

答案 0 :(得分:0)

我认为你遇到了种族问题:

 var marker 1;//var init
 drawLine();//draw line called, marker isnt set yet
 initMap(); //map ready

解决方案1: 锁定drawLine()直到initMap完成

var mapready=false;
function initMap(){
//your code
mapready=true;
}
function drawLine(){
if(!mapready){return false;}
//your code
}

如果drawLine可以由用户引起,这是一个很好的解决方案。

解决方案2a: 在地图出现时调用drawLine:

function initMap(){
 //your code
 drawLine();
 }

解决方案2b: 如果你想动态调用drawLine(有时候,有时候不是),解决方案并不好。 注册回调比这更好:

mapready=[];
function initMap(){
//your init code




//map is ready so call callbacks
for(i=0;i<mapready.length;i++){
 mapready[i]();
}
//if an callback is added now, fire it directly
mapready={};
mapready.push=function(func){func();};
}

添加回调:

mapready.push(drawLine);