2011-08-18 54 views
3

我一直在用这一个撞到墙上的头撞墙。我创建了一个多边形数组,并且想要关联每个将显示在infoWindow中的一些数据。我可以看到地图上的所有多边形。我添加了监听器,它会触发(发生颜色变化),但我没有得到infoWindow。任何帮助将大大appreaciated!谷歌地图 - 将信息窗口附加到数组中的多边形

干杯!

ç...

tmppoly = new google.maps.Polygon({ 
    map: map, 
    paths: polypath, 
    strokeColor: scolor, 
    strokeOpacity: 0.5, 
    strokeWeight: 2, 
    fillColor: fcolor, 
    fillOpacity: 0.5 
}); 

addPolygonClick(tmppoly,mdata); 
plot_polygons.push(tmppoly); 

... 

function addPolygonClick(poly,html) { 

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

    google.maps.event.addListener(poly,'click', function(event) { 
     this.setOptions({fillColor: "#000000"}); 
     infowindow.open(map); 
    }); 

} 
+0

我相信infowindow需要位置选项或标记参数,除非他们改变了它。 – roselan

回答

2

有可能被防止这种工作的几个问题:

1: 你需要一个变种的信息窗口的前面,使之成为局部变量:

var infowindow = new google.maps.InfoWindow(... 

因为您每次添加新的点击列表时都会替换infowindow变量ENER。

2: 你需要指定信息窗口(见:http://code.google.com/apis/maps/documentation/javascript/reference.html#InfoWindowOptions)的位置或锚。

唯一有效的锚标记,所以你可能会想指定“位置”属性。 'position'必须是有效的google.maps.LatLng对象。我怀疑你会想要计算你的多边形的中心作为位置。

您还需要确保地图是一个全局变量,虽然有可能是看你的代码的其余部分。

8

我可以提供一些有关您的问题的建议。

首先,你应该知道 'infowindow.open(地图,锚?:MVCObject)' 的方法表达。正如google api v3所说:在核心API中,唯一的锚是Marker类。多边形类不符合条件,但是,我们可以通过其他方式实现。

var polygon = new google.maps.Polygon({ 
    paths: PGpoints, //The PGpoints is the collection of points around this polygon. 
    map: map, 
    strokeColor: colory, 
    strokeOpacity: 0.6, 
    strokeWeight: 1, 
    fillColor: colory, 
    fillOpacity: 0.35  
}); 

polygon.set("Info", idy); // Set some attributes for adding extra information into this polygon. 

google.maps.event.addListener(polygon, 'click', function() { 
    var infoWindow = new google.maps.InfoWindow(); 
    infoWindow.setContent("Information : " + polygon.get("Info")); 

    // 'laty,lngy' is the location of one point in PGpoints, which can be chosen as you wish 
    infoWindow.setPosition(new google.maps.LatLng(laty,lngy));  
    infoWindow.open(map); 
}); 

上面的代码已通过测试,您可以直接使用它。然后,如果您单击一个多边形,infoWindow会出现在地图上方。

+0

谢谢!这个解决方案真的很有用。 – Andrea

0

请看一看这个https://developers.google.com/maps/documentation/javascript/examples/event-closure,并与上述反应结合起来分配一个唯一的消息为您的多边形阵列中的每个多边形。

我还在一个层用为每个多边形的唯一消息具有多个多边形工作。我还没有成功。通过上面的响应,我得到了信息窗口,但是我得到了所有多边形的相同信息。 一旦我解决了我的问题,我会发布解决方案。

+0

如果你可以包含你如何组合他们的例子,这可能是一个更好的答案。 – icedwater