我建立了一个for循环来测试一组位置,当true时将纬度/经度值发送到函数以创建标记。我的问题是标记移动,但没有做其他标记。我不清楚为什么会发生这种情况,因为我认为由于每次调用addMarker函数时都会创建一个新的实例变量,因此我会在地图上得到另一个标记。任何帮助表示赞赏。谢谢。

function addMarker(x, y) {
    var myLatLng = {
        lat: parseFloat(x),
        lng: parseFloat(y)
    };
    console.log(myLatLng);
    var map = new google.maps.Map(document.getElementById("map"), {
        zoom: 6,
        center: myLatLng
    });
    var marker = new google.maps.Marker({
        position: myLatLng,
        map: map,
        title: 'hello world'
    });
    markers.push(marker);
    marker.setMap(map);
}

最佳答案

这是因为每个循环都在此行上创建一个新地图:

var map = new google.maps.Map(document.getElementById("map"),{
  zoom: 6,
  center: myLatLng
});


您需要声明一次,而不是每个循环:

var neighborhoods = [
  {lat: 52.511, lng: 13.447},
  {lat: 52.549, lng: 13.422},
  {lat: 52.497, lng: 13.396},
  {lat: 52.517, lng: 13.394}
];

var markers = [];
var map;

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 12,
    center: {lat: 52.520, lng: 13.410}
  });
}

function addMarkers() {
  for (var i = 0; i < neighborhoods.length; i++) {
    markers.push(new google.maps.Marker({
      position: neighborhoods[i]
      map: map,
      animation: google.maps.Animation.DROP
    }));
  }
}

10-07 19:47
查看更多