Google maps 获取信息窗口以显示在群集标记集中单击普通标记的时间
我有一个谷歌地图实现,它使用谷歌地图实用程序库v3(http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html)用于聚类标记。它工作得很好 现在,我想在标记中添加信息窗口。集群标记可以正常工作,因此我希望保持这些标记上的行为(即,单击它们时它们会放大),但当单击一个普通的单个标记时,我希望显示一个信息窗口 完整代码如下:Google maps 获取信息窗口以显示在群集标记集中单击普通标记的时间,google-maps,google-maps-api-3,google-maps-markers,Google Maps,Google Maps Api 3,Google Maps Markers,我有一个谷歌地图实现,它使用谷歌地图实用程序库v3(http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html)用于聚类标记。它工作得很好 现在,我想在标记中添加信息窗口。集群标记可以正常工作,因此我希望保持这些标记上的行为(即,单击它们时它们会放大),但当单击一个普通的单个标记时,我希望显示一个信息窗口 完整代码如下: var _iconCenter = n
var _iconCenter = new google.maps.MarkerImage('/css/img/map-marker.png',
new google.maps.Size(38, 48),
new google.maps.Point(0,0),
new google.maps.Point(19, 44));
var shadow = new google.maps.MarkerImage('/css/img/map-marker-shadow.png',
new google.maps.Size(57, 49),
new google.maps.Point(0,0),
new google.maps.Point(7, 44));
var _icon = '/css/img/map-marker-purple.png';
var infowindow;
var markersArray = [];
var map;
var currentPosition = 0;
var currentmarker;
var firstload = true;
var maploaded = false;
var interval = 5000;
var geocoder;
var stylez = [];
function initialize(items,loop,zoom) {
geocoder = new google.maps.Geocoder();
if (items.length > 0) {
var latlng = new google.maps.LatLng(items[0].Lat, items[0].Lng);
var myOptions = {
zoom: zoom,
center: latlng,
//mapTypeControl: false,
streetViewControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"), myOptions);
map.setOptions({styles: stylez});
for (var i = 0; i < items.length; i++) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(items[i].Lat, items[i].Lng),
title: items[i].Title,
icon: _icon,
shadow: shadow,
infocontent: items[i].Description
});
marker.setMap(map);
markersArray.push(marker);
}
//set style options for marker clusters (these are the default styles)
mcOptions = {
gridSize: 44
}
var markerCluster = new MarkerClusterer(map, markersArray, mcOptions);
google.maps.event.addListener(map, "tilesloaded", function () {
if(loop == true){
SetLoop();
}
});
google.maps.event.addListener(marker, "click", function () {
alert('test');
//infowindow.setContent('test');
//infowindow.open(map,this);
});
}
}
function SetLoop() {
//This will fire everytime map loads or recenteres
maploaded = true;
if (firstload) {
firstload = false;
Recenter();
}
}
function Recenter() {
//If previous iteration is not loaded completely, wait to avoid errors
//It could happen for slow internet connection
if (maploaded) {
maploaded = false;
} else {
//keep adding 1 second to interval for slow connection till page loads
interval = interval + 1;
setTimeout("Recenter()", interval);
return;
}
if (infowindow != null && currentmarker != null) {
//currentmarker.icon = _icon;
currentmarker.icon = _iconCenter;
currentmarker.setMap(map);
infowindow.close(map, currentmarker);
}
markersArray[currentPosition].icon = _iconCenter;
markersArray[currentPosition].setMap(map);
map.setCenter(new google.maps.LatLng(markersArray[currentPosition].getPosition().lat(), markersArray[currentPosition].getPosition().lng()));
infowindow = new google.maps.InfoWindow({
content: markersArray[currentPosition].infocontent,
size: new google.maps.Size(50, 50)
});
infowindow.open(map, markersArray[currentPosition]);
currentmarker = markersArray[currentPosition];
if (currentPosition >= markersArray.length - 1) {
currentPosition = 0;
} else {
currentPosition++;
}
if (markersArray.length > 1) {
setTimeout("Recenter()", interval);
}
}
var\u iconCenter=new google.maps.MarkerImage('/css/img/map marker.png',
新谷歌地图尺寸(38,48),
新google.maps.Point(0,0),
新的google.maps.Point(19,44));
var shadow=new google.maps.MarkerImage('/css/img/map marker shadow.png',
新谷歌地图大小(57,49),
新google.maps.Point(0,0),
新google.maps.Point(7,44));
var_icon='/css/img/map marker purple.png';
var信息窗口;
var-markersArray=[];
var映射;
var currentPosition=0;
var电流标记;
var firstload=true;
var-mapload=false;
var区间=5000;
var地理编码器;
var stylez=[];
函数初始化(项目、循环、缩放){
geocoder=新的google.maps.geocoder();
如果(items.length>0){
var latlng=new google.maps.latlng(项目[0].Lat,项目[0].Lng);
变量myOptions={
缩放:缩放,
中心:拉特林,
//mapTypeControl:false,
街景控制:错误,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=新的google.maps.map(document.getElementById(“map”),myOptions);
setOptions({styles:stylez});
对于(变量i=0;i=markersArray.length-1){
currentPosition=0;
}否则{
currentPosition++;
}
如果(markersArray.length>1){
setTimeout(“Recenter()”,间隔);
}
}
如您所见,仅出于演示目的,我在marker click listener上调用了一个粗略的警报事件,但它根本没有触发。当我单击一个普通标记时,什么也没有发生,浏览器的开发者工具控制台中也没有错误。我想知道这是否与让另一个事件监听映射加载有关,但我对这一点的理解还处于边缘,没有任何错误,我正在努力了解如何调试它
有人能给我指个正确的方向让它工作吗
谢谢大家 我认为问题在于,在添加事件侦听器之前,您需要将标记交给clusterer。一旦创建了标记,就尝试添加侦听器,这样当您将markersArray传递给clusterer时,事件ListTener已经附加。 因此,请尝试:
我认为问题在于,在添加事件侦听器之前,您需要将标记交给clusterer。一旦创建了标记,就尝试添加侦听器,这样当您将markersArray传递给clusterer时,事件ListTener已经附加。 因此,请尝试:
聚类(来自xml文件),标记上有信息窗口。聚类(来自xml文件),标记上有信息窗口。谢谢-这就是诀窍。我唯一需要添加的是
var infowindow=new google.maps.infowindow()对函数进行编码>以使其识别“infowindow”。如果全局声明该infowindow,则您将只有一个infowindow(默认的v2行为),如果将其放入函数中,则每个标记都会有一个infowindow,并且必须手动关闭它们。谢谢-这就是诀窍。我唯一需要添加的是var infowindow=new google.maps.infowindow()将>编码到函数中,使其识别“infowindow”。如果全局声明该infowindow,则您将只有一个infowindow(默认v2行为),如果将其放入函数中,则每个标记都有一个infowindow,并且必须手动关闭它们。
for (var i = 0; i < items.length; i++) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(items[i].Lat, items[i].Lng),
title: items[i].Title,
icon: _icon,
shadow: shadow,
infocontent: items[i].Description
});
marker.setMap(map);
//attach the listener now, before pushing into the array
attachListener(marker,'marker:'+i);
markersArray.push(marker);
}
function attachListener(marker,content){
google.maps.event.addListener(marker, "click", function () {
// alert('test');
infowindow.setContent(content);
infowindow.open(map,this);
});
}