Google Maps API - отображать информацию для всех маркеров с одинаковым лат / долг - PullRequest
1 голос
/ 21 марта 2012

Я отображаю некоторые места концертов на картах Google, используя данные из API Songkick.com.Я делаю вызов данных с помощью jQuery.При отображении концерта, если в одном месте запланировано несколько концертов, все маркеры размещаются в одном и том же месте.Это означает, что виден только маркер самого последнего концерта, а в информационном окне карт Google отображаются только данные этого самого последнего концерта.

Я бы хотел сделать так, чтобы все концерты проходили именно в это время.тот же самый лат / лонг отображает их информацию в окне информации.Поэтому, когда вы нажимаете на маркер, все запланированные шоу отображаются в информационном окне, а не только в самом последнем шоу.

Вот часть моего 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 Ответ

1 голос
/ 21 марта 2012

Похоже, что вызов API SongKick возвращает уникальный идентификатор для каждого места. Итак, вот что вы можете сделать:

  1. Добавить каждый объект события в массив.
  2. Извлечение уникальных идентификаторов места из событий в массиве.
  3. Перебирайте каждый уникальный идентификатор объекта, извлекая каждое событие с этим идентификатором объекта, и формируйте строку информационного окна, просматривая это подмножество событий.
  4. Построить маркер, используя информацию о месте, установив строку информационного окна в маркер.

Это немного кода JavaScript, вложенных циклов и небольшого снижения производительности, но это должно сработать.

...