Google地图中的JavaScript全局变量

时间:2014-09-12 19:22:27

标签: javascript google-maps google-maps-api-3 global-variables

我正在制作一个网络应用程序,允许人们在Google地图上查看公交车的位置。我在JavaScript中遇到了全局变量的问题。 window.variable对我不起作用。在所有函数之外定义变量也不起作用。这是我完整的客户端代码:

<!DOCTYPE html>
<html>
  <head>
    <title>Geolocation</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
      html, body, #map-canvas {
        height: 100%;
        margin: 0px;
        padding: 0px
      }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script>
// Note: This example requires that you consent to location sharing when
// prompted by your browser. If you see a blank space instead of the map, this
// is probably because you have denied permission for location sharing.

var old = [];

function getLocation()
{
  $.get( "http://54.86.161.214/EC_bus_app/get_location.php", function( data ) {
    old=[];
    var buses = data;
    var number_of_buses = buses.slice(0,1);
    buses = buses.slice(2);
    buses = buses.slice(0,-1);

    var bus_coordinates_and_numbers = buses.split(/[ ]+/);
    var length_of_array = bus_coordinates_and_numbers.length;

  // Turn a single dimensional array into a multi-dimensional array

    for (var index = 0; index < bus_coordinates_and_numbers.length; index+= 3)
        old.push( bus_coordinates_and_numbers.slice(index, index + 3) );
    console.log(old);
    //initialize(old);

  });
}

setInterval(getLocation, 10000);

var map;

function initialize() {
  var mapOptions = {
    zoom: 18
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

var image = "icon_97.png";

  for (i=0;i<old.length; i = i + 1){
    var x = old[i][0];
    var y = old[i][1];
    var myLatlng = new google.maps.LatLng(x,y);
    var busMarker = new google.maps.Marker({
        position: myLatlng,
        map: map,
        icon: image,
        title: old[i][2]
    });
  }

  // Try HTML5 geolocation
  if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      var pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);

      var infowindow = new google.maps.InfoWindow({
        map: map,
        position: pos,
        content: 'Your location'
      });

      map.setCenter(pos);
    }, function() {
      handleNoGeolocation(true);
    });
  } else {
    // Browser doesn't support Geolocation
    handleNoGeolocation(false);
  }
}

function handleNoGeolocation(errorFlag) {
  if (errorFlag) {
    var content = 'Error: The Geolocation service failed.';
  } else {
    var content = 'Error: Your browser doesn\'t support geolocation.';
  }

  var options = {
    map: map,
    position: new google.maps.LatLng(60, 105),
    content: content
  };

  var infowindow = new google.maps.InfoWindow(options);
  map.setCenter(options.position);
}

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

    </script>
  </head>
  <body>
    <div id="map-canvas"></div>
  </body>
</html>

有问题的变量是old。我可以使用get locationinitialize(old);函数中将其传递给初始化函数。但是,正如您所看到的,我正在使用计时器,而initialize(old);会导致整个地图一次又一次地重新加载,而我只希望一次又一次地加载位置标记。

2 个答案:

答案 0 :(得分:0)

getLocation()内移动initialize()解决了问题。但@geocodezip在评论中所说的也完全回答了我的问题。

答案 1 :(得分:0)

您的问题不在于全局变量。它具有异步功能。您需要初始化地图,然后请求数据(异步请求),在地图上制作标记,然后定期更新它们。