谷歌地图api v3 - 多个标记,多个infowindows,3个图标

时间:2010-03-30 09:06:08

标签: java javascript google-maps google-maps-api-3

我想制作“WiFi地图”,我有这样做的问题,我想要3个图标OPEN / WEP / WPA,以及许多标记,每个标记都有自己的信息窗口,只有1个infowindow在上面,所以当我点击#1然后#2然后#1将隐藏。 如果我有XXXX标记会在缩小时在地图上出现问题,有可能让它像在一个地方有很多标记一样都不会在缩小时显示但是放大是吗?

我拥有关于MySQL数据库中网络的所有信息,所以在PHP中很容易就像官方谷歌地图文档/ v3 / overlays.html#ComplexIcons&lt;中的教程一样显示它 - 所以请遵循这个我可以举例如< / p>

  var nodes = [
['WKKOZ',50.192843,18.967801,nodewep,1],
['airlive',50.193056,18.967974,nodeopen,2],
['Zurawia-3',50.198398,18.974723,nodeopen,3],
['siec dol',50.19303,18.96796,nodewep,4],
['KP_8_1',50.193092,18.96801,nodewep,5],
['Natalia',50.19286,18.967812,nodewpa,6],
['Z104',50.192591,18.967588,nodewep,7],
['D2',50.192499,18.96876,nodewep,8],
['Niesia',50.192474,18.968239,nodewpa,9],
['boolean',50.192539,18.967545,nodewpa,10],
['neostrada_0d65',50.192179,18.96758,nodewep,11],
['neostrada_2d38',50.192216,18.96761,nodewep,12],
['Belkin_G_Wireless_9B7BF7',50.192191,18.969261,nodeopen,13],
['Trans_FijPn',50.1939,18.979565,nodeopen,14],
['dlinklis',50.193113,18.968024,nodewpa,15]

请帮助我!:)

BTW:我的MySQL数据库格式为http://wklej.to/7Puw/html

3 个答案:

答案 0 :(得分:1)

我想你问的是如何在地图上有大量标记,这些标记会在更高的缩放级别隐藏。这称为标记聚类。

有一些Javascript库在客户端实现了Clustering,并且很容易集成到现有的mashup中:

  • MarkerClusterer - 我used这是一个mashup,发现很容易集成,有一组很好的默认图标。
  • ClusterMarker - 我没有使用过这个,但看起来非常实用。

您还可以阅读本blog post,其中介绍了各种替代方案或blog post,其中讨论了有关服务器端群集的详细信息。

答案 1 :(得分:1)

我最近遇到了同样的问题,并在Sean Vieira的帮助下成功解决了大部分问题。

这个问题的答案在这里: Display multiple markers on a map with their own info windows

您的方案的变体是您只需在阵列中添加一个额外的字段,您可以在其中指定要使用的标记的URL路径。

然后,在循环创建标记时(从var marker = new google.maps.Marker开始),您将从数组中调用icon变量的值。

由于您只有三种图标类型,并且我假设您将从数据库填充您的记录,您将测试访问点的类型,然后在该位置写入标记类型的相关URL路径(I这是一个ASP,而不是一个PHP人,所以借口使用术语写不正确。

我的解决方案并没有干净地处理信息窗口。一旦打开它们,除非用户手动关闭,否则它们将保持打开状态。我已经看到了解决其他人的解决方案,因为新的解决方案已经打开,但还没有实现它们。

答案 2 :(得分:0)

我知道这是一个古老的问题,但是当我得到答案时,我会为后代写下来看看:)

可以很容易地解决infowindow问题的解决方案。创建一个名为currentWindow的全局变量。每当用户按下标记时,eventlistener都会检查currentWindow = infoWindow。如果没有,则关闭currentWindow并将其设置为新的infowindow。纯粹而简单,只记得打开新的infowindow。