如何更改在运行时创建的标记位置(Google Maps v3)

时间:2012-05-17 10:25:47

标签: google-maps google-maps-api-3 google-maps-markers

我必须在运行时在Google地图上创建多个标记。

他们的初始位置是随机定义的。

创建它们时,如何更改其中某些位置?新职位也是随机定义的。

我确实尝试了

marker1.setPosition(pt);

......但是,我收到了错误

marker1 is not defined

我猜这个问题是在创建地图的时刻没有定义marker1 ......就是这样。

你能帮我解决这个问题吗?

P.S。创建标记的数量没有限制。

更新标记创建时使用:

function addNewMarker( locationsTotal ) {

if (document.getElementById("lon1").value == '') document.getElementById("lon1").value = '19';
if (document.getElementById("lat1").value == '') document.getElementById("lat1").value = '45';

var parliament = (map.getCenter());

var newMarker = 'marker' + locationsTotal;
newMarker = new google.maps.Marker({
  name:newMarker,
  id:newMarker,
  map:map,
  draggable:true,
  animation: google.maps.Animation.DROP,
  position: parliament, 
  icon: 'img/pin.png'
});

google.maps.event.addListener(newMarker, "dragend", function() {
  var center = newMarker.getPosition();
  var latitude = center.lat();
  var longitude = center.lng();
  var newLon = 'lon' + locationsTotal;
  var newLat = 'lat' + locationsTotal;
  document.getElementById(newLon).value = longitude;
  document.getElementById(newLat).value = latitude;
});

}

1 个答案:

答案 0 :(得分:3)

正如您所看到的,newMarker仅在addNewMarker函数的范围内可见。 您需要的是将标记存储在全局范围内可见的数组中。 例如: 修改你的功能:

var allMarkers = [];
function addNewMarker( locationsTotal ) {
   //.... skip
  allMarkers.push(newMarker);
}

现在所有标记都存储在一个数组中,以便您可以操作它们。

按名称添加功能访问标记:

function getMarker(name) {
  for (k in allMarkers)
     if (allMarkers[k].name == name) return allMarkers[k];
  return null;
}