将变量从.js文件传递到google maps api v3 html

时间:2014-02-10 14:44:24

标签: javascript node.js google-maps-api-3 google-maps-markers

我正在尝试在谷歌地图中显示标记,但它还没有工作。我正在使用node.js和express。 所以这是我的代码

首先是javascript函数,它从文件中读取一组位置,并转换整个脚本

var readMonActual = function(){
  var coordsArray=fs.readFileSync("grd2google.txt", "utf8");
  var coordsArray=coordsArray.substring(1,coordsArray.length-1);
  var myCoords=[];
  data=coordsArray.split(',');
  for (var i=0;i<data.length;i+=3){
    myCoords.push([
                    Number(String(data[i]).replace(/\'/g, "")),
                    Number(String(data[i+1]).replace(/\'/g, "")),
                    Number(String(data[i+2]).replace(/\'/g, ""))
                  ]);
  }
  //return {myCoords:myCoords};
  return myCoords;
}

然后是html文件中的函数

function initialize() {
    var mapOptions = {
        center: new google.maps.LatLng(10.191, -68.192),
        zoom: 7,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map-canvas"),mapOptions);
    var markers=readMonActual(); //<- this returns as undefined
    var marker = new Array(); 

    for(i=0; i< markers.length; i++ ) {
        var position = new google.maps.LatLng(parseFloat(markers[i][1]), parseFloat(markers[i][2]));
                new google.maps.Marker({
                position: position,
                map: map,
                title: String(markers[i][0])
                });
    }
}
google.maps.event.addDomListener(window, 'load', initialize);

地图加载,.js脚本加载,但它仍然没有显示标记,因为包含数组的变量返回空白(即使readMonActual函数的console.log()显示我的数组位置)

1 个答案:

答案 0 :(得分:0)

这是由同步文件进程引起的。 initialize尝试使用尚未返回的数据。我已经将函数简化了一点以节省一些空间。简而言之,将回调函数传递给readMonActual,这将在文件处理完成后返回标记。

function initialize() {
  // rest of codecode
  // pass in a callback to readMonActual
  readMonActual(function (markers) {
    for(i=0; i< markers.length; i++ ) {
      // do loop
    }
  });
}

var readMonActual = function (callback) {
  var coordsArray=fs.readFileSync("grd2google.txt", "utf8");
  var coordsArray=coordsArray.substring(1,coordsArray.length-1);
  var myCoords=[];
  // the rest of the code
  // return the markers via the callback
  callback(myCoords);
}