2012-03-20 13 views
1

Songkick.comのAPIのデータを使用して、Googleマップ上のコンサートの場所をマッピングしています。私はjQueryを使ってデータを呼び出しています。コンサートをマッピングするとき、1つの会場に複数のコンサートがスケジュールされていると、すべてのマーカーがまったく同じ場所に配置されます。つまり、最新のコンサートのマーカーだけが表示され、GoogleマップのinfoWindowはその最新のコンサートのデータのみを表示します。Google Maps API - 同じ緯度/経度のすべてのマーカーの情報を表示

私は、まったく同じ緯度/経度で行われるすべてのコンサートが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コード、ネストループ、パフォーマンスヒットのビットですが、そのトリックを行う必要があります。

関連する問題