Javascript 添加ID';谷歌地图标记
我有一个脚本,一次循环并添加一个标记 我试图让当前标记有一个信息窗口,并且一次在地图上只有5个标记(4个没有信息窗口,1个有) 如何向每个标记添加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
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');