2012-03-20 71 views
1

我使用Songkick.com的API中的数据来映射Google地图上的一些音乐会地点。我正在使用jQuery调用数据。在绘制音乐会时,如果单个场地安排了多场音乐会,所有标记都放置在完全相同的位置。这意味着只有最近一场音乐会的标记才可见,并且Google地图infoWindow仅显示最近一场音乐会的数据。Google Maps API - 显示同一纬度/长度的所有标记的信息

我想使所有在同一经纬度的音乐会都在infoWindow中显示他们的信息。所以当你点击标记时,所有预定的节目都显示在infoWindow中,而不仅仅是最近的节目。

这里是我的JavaScript的一部分:

function doSearch(locations) { 
deleteOverlays(); 
jQuery.getJSON("http://api.songkick.com/api/3.0/search/locations.json?query=" + locations + "&apikey=XXXXXXXX&jsoncallback=?", function(data){ 
    var id = data.resultsPage.results.location[0].metroArea.id; 

    jQuery.getJSON("http://api.songkick.com/api/3.0/metro_areas/" + id + "/calendar.json?apikey=XXXXXXXX&jsoncallback=?", function(data){ 
     var bounds = new google.maps.LatLngBounds(); 
     var point; 
     $.each(data.resultsPage.results.event, function(i, item) { 
      var event = item; 
      point = new google.maps.LatLng(
       parseFloat(item.location.lat), 
       parseFloat(item.location.lng)); 
      var marker = new google.maps.Marker({ 
       map  : map, 
       animation: google.maps.Animation.DROP, 
       position : point 

      }); 

      markersArray.push(marker); 

      var contentString = '<p><b>' + item.displayName + '</b></p>' + '<p>' + item.location.city + '</p>'; 

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

google.maps.event.addListener(marker, 'click', function() { 

       if (currentInfoWindow != null) { 
        currentInfoWindow.close(); 
       } 
       infowindow.open(map, marker); 
       currentInfoWindow = infowindow; 
      }); 

在行动中看到这个应用程序,我已经建立了一个临时网站。

http://129.219.78.186/~masgis/tward/songkick/Metro.html

要明白我在说什么,在主要城市的名称,类型,然后单击该下降的标志。只有最近的演唱会才会出现。

在此先感谢,任何帮助,非常感谢。

回答

1

它看起来像SongKick API调用返回每个场地的唯一ID。因此,您可以执行以下操作:

  1. 将每个事件对象添加到数组中。
  2. 从数组中的事件中提取唯一的场所ID。
  3. 循环播放每个唯一的场所ID,使用该场所ID拉出每个事件,并通过循环这些事件子集来构建信息窗口字符串。
  4. 使用场地信息构建标记,将信息窗口字符串设置为标记。

这是一段JavaScript代码,嵌套循环和一点性能问题,但它应该有所斩断。

相关问题