2010-03-30 82 views
0

我想制作“WiFi地图”,我有这样做的问题,我想有3个图标OPEN/WEP/WPA,以及很多标记,每个标记与自己的infowindow,只有1 infowindow顶部,所以当我点击#1然后#2然后#1将隐藏。 如果我将有XXXX标记在地图上缩放时会出现问题,有可能使它变得像是在一个地方有多少标记全部不会缩小显示,而是放大缩小。谷歌地图api v3 - 多个标记,多个infowindows,3个图标

我有关于MySQL数据库网络的所有信息,所以在PHP中将很容易显示它像在官方谷歌地图文档/ v3/overlays.html#ComplexIcons <教程 - 所以按照这个可以我有例如

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

回答

1

我想你是询问如何有大量地图上的标记,其获得更高的隐藏的动物园米级别。这被称为标记聚类。

有实现在客户端集群,并且非常容易集成到现有的混搭一些JavaScript库:

  • MarkerClusterer - 我used这对混搭,发现它易于集成,与一组不错的默认图标。
  • ClusterMarker - 我没有使用过这个,但它看起来很实用。

你也可以阅读blog post其越过各种替代方案或本blog post,其中讨论了在服务器端集群细节。

+0

THX,但“集群”是我的问题只有一点:对 我仍然不知道如何使多个标记,多个信息窗口,3个图标 我尝试做代码http://wklej.org/hash/ea86da22681 /关注“documentation/v3/overlays.html#ComplexIcons”并且不起作用;( – Adam 2010-03-30 21:14:41

1

我最近经历了完全相同的问题,并在Sean Vieira的帮助下设法排除了大部分问题。

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

为您的方案的变化是,你只添加其他字段到你的数组中你指定的URL路径到你想标记使用。

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

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

我的解决方案并不干净地处理infowindows。一旦他们被打开,他们将保持开放,除非用户手动关闭。我已经看到了解决方案,因为新的解决方案已经打开,但还没有实施。

0

我知道这是一个老问题,但我有一个答案吧,我会写它为后人看:)

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