Javascript 添加ID';谷歌地图标记

Javascript 添加ID';谷歌地图标记,javascript,google-maps,Javascript,Google Maps,我有一个脚本,一次循环并添加一个标记 我试图让当前标记有一个信息窗口,并且一次在地图上只有5个标记(4个没有信息窗口,1个有) 如何向每个标记添加id,以便根据需要删除和关闭信息窗口 这是我用来设置标记的函数: function codeAddress(address, contentString) { var infowindow = new google.maps.InfoWindow({ content: contentString }); if (geocoder) { g

我有一个脚本,一次循环并添加一个标记

我试图让当前标记有一个信息窗口,并且一次在地图上只有5个标记(4个没有信息窗口,1个有)

如何向每个标记添加id,以便根据需要删除和关闭信息窗口

这是我用来设置标记的函数:

function codeAddress(address, contentString) {

var infowindow = new google.maps.InfoWindow({
  content: contentString
});

if (geocoder) {

  geocoder.geocode( { 'address': address}, function(results, status) {

    if (status == google.maps.GeocoderStatus.OK) {

        map.setCenter(results[0].geometry.location);

       var marker = new google.maps.Marker({
          map: map, 
          position: results[0].geometry.location
       });

       infowindow.open(map,marker);

      } else {
       alert("Geocode was not successful for the following reason: " + status);
      }
    });
  }

}

为什么不使用一个缓存来存储每个标记对象并引用一个ID

var markerCache= {};
var idGen= 0;

function codeAddress(addr, contentStr){
    // create marker
    // store
    markerCache[idGen++]= marker;
}

编辑:当然,这依赖于数字索引系统,它不提供像数组那样的长度属性。当然,您可以对对象进行原型化,并为此类对象创建长度等。OTOH,为每个地址生成一个唯一的ID值(MD5等)可能是一种方法。

我有一个简单的
Location
类,用于处理所有与标记相关的事情。我会把我的代码贴在下面,让你看看

最后一行是实际创建标记对象的行。它循环遍历我所在位置的一些JSON,如下所示:

{"locationID":"98","name":"Bergqvist Järn","note":null,"type":"retail","address":"Smidesvägen 3","zipcode":"69633","city":"Askersund","country":"Sverige","phone":"0583-120 35","fax":null,"email":null,"url":"www.bergqvist-jb.com","lat":"58.891079","lng":"14.917371","contact":null,"rating":"0","distance":"45.666885421019"}
代码如下:

如果您查看我的Location类中的
target()
方法,您会发现我保留了对infowindow的引用,并且由于引用,可以简单地
open()
close()
它们

观看现场演示:(输入瑞典城市,如斯德哥尔摩,然后按enter键)

var Location=function(){
var self=这个,
args=参数;
self.init.apply(self,args);
};
Location.prototype={
init:函数(位置、地图){
var self=这个;
对于(f在位置上){self[f]=位置[f];}
self.map=map;
self.id=self.locationID;
风险值评级=[‘青铜’、‘银’、‘金’],
random=Math.floor(3*Math.random());
自评_类=‘蓝色’;
//这是标记点
self.point=new google.maps.LatLng(parseFloat(self.lat)、parseFloat(self.lng));
locator.bounds.extend(self.point);
//创建用于在地图上放置的标记
self.marker=new google.maps.marker({
位置:self.point,
标题:self.name,
图标:新的google.maps.MarkerImage('/wp content/themes/arbesko/img/locator/'+self.rating_class+'SmallMarker.png'),
阴影:新的google.maps.MarkerImage(
“/wp content/themes/arbesko/img/locator/smallMarkerShadow.png”,
新谷歌地图大小(52,18),
新的google.maps.Point(0,0),
新谷歌地图点(19,14)
)
});
google.maps.event.addListener(self.marker,'click',function(){
self.target('map');
});
google.maps.event.addListener(self.marker'mouseover',function(){
self.sidebarItem().mouseover();
});
google.maps.event.addListener(self.marker,'mouseout',function()){
self.sidebarItem().mouseout();
});
var infocontent=Array(
'',
''+self.name+'',
'',
self.address+'
'+self.zipcode+''+self.city+''+self.country, '', '' ); if(self.phone){ infocontent.push(“”+self.phone+“”); } if(self.url){ infocontent.push(“”); } 如果(self.email){ infocontent.push(“”); } //加上横向/纵向 infocontent.push(“”); infocontent.push(“Lat:”+self.Lat+”
Lng:“+self.Lng+”); //单击标记时,创建用于在地图上放置的信息窗口 self.infowindow=new google.maps.infowindow({ 内容:infocontent.join(“”), 位置:self.point, pixelOffset:new google.maps.Size(0,-15)//将信息窗口向顶部偏移15px }); }, //将标记附加到地图上 addToMap:function(){ var self=这个; self.marker.setMap(self.map); }, //为项目创建一个侧栏模块,连接到标记等。。 sidebarItem:函数(){ var self=这个; if(self.sidebar){ 返回self.sidebar; } var li=$('
  • ').attr({'class':'location','id':'location-'+self.id}), name=$('').attr('class','locationName').html(self.name).appendTo(li), 地址=$('').attr('class','locationAddress').html(self.address+'
    '+self.zipcode+''+self.city+''+self.country)。附录(li); li.addClass(自评等级); li.bind('click',函数(事件){ self.target(); }); self.sidebar=li; 返回李; }, //这将“瞄准”商店。将地图居中并在其上缩放,以及 目标:功能(类型){ var self=这个; if(定位器目标){ locator.targeted.infowindow.close(); } locator.targeted=这个; 如果(类型!=“映射”){ self.map.panTo(self.point); self.map.setZoom(14); }; //打开infowinfow self.infowindow.open(self.map); } }; 对于(变量i=0;i
  • JavaScript是一种动态语言。您可以将其添加到对象本身

    var marker = new google.maps.Marker(markerOptions);
    marker.metadata = {type: "point", id: 1};
    
    另外,因为所有v3对象都扩展了。您可以使用:

    marker.setValues({type: "point", id: 1});
    // or
    marker.set("type", "point");
    marker.set("id", 1);
    var val = marker.get("id");
    

    标记已具有唯一id

    marker.__gm_id
    

    只是添加了另一个适合我的解决方案。。您只需将其附加到标记选项中:

    var marker = new google.maps.Marker({
        map: map, 
        position: position,
    
        // Custom Attributes / Data / Key-Values
        store_id: id,
        store_address: address,
        store_type: type
    });
    
    然后使用以下命令检索它们:

    marker.get('store_id');
    marker.get('store_address');
    marker.get('store_type');
    

    我很好奇,一旦你给了我
    marker.get('store_id');
    marker.get('store_address');
    marker.get('store_type');