Подтвердить что ты не робот

Добавьте диаграмму google в infowindow, используя карты google api

Я видел много других людей с тем же вопросом, но не смог найти ответа. У меня есть простая карта, которую я построил с помощью Google Maps Javascript api v3. На карте есть несколько маркеров, которые связаны с инфоиндустом, чтобы отображать конкретную информацию для каждого маркера. Я хочу добавить диаграмму google в infowindow, но просто не мог понять, как это сделать. Я просмотрел все сообщения, которые мог найти (здесь и на других форумах), и я заметил, что другие люди пытаются что-то сделать, но, похоже, нет конкретного ответа. Я заметил, что люди успешно делают такую ​​вещь, используя таблицы слияния, но это не мой случай, поскольку я загружаю данные из таблицы MySQL. На данный момент у меня есть простая карта, код которой показан ниже:

  function initialize() {

    var mapOptions = {
      center: new google.maps.LatLng(-33.837342,151.208954),
      zoom: 10,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);

    var data = [
      ['Bondi Beach', -33.891044,151.275537],
      ['Cronulla Beach', -34.046544,151.159601],
    ];

    var myLatLng1 = new google.maps.LatLng(-33.891044,151.275537);
    var myLatLng2 = new google.maps.LatLng(-34.046544,151.159601);

    var marker1 = new google.maps.Marker({
        position: myLatLng1,
        map: map
    });

    var marker2 = new google.maps.Marker({
        position: myLatLng2,
        map: map
    });

    google.maps.event.addListener(marker1, 'click', function() {
      var infowindow1 = new google.maps.InfoWindow();
      infowindow1.setContent('Display the chart here');
      infowindow1.open(map, marker1);
    });

    google.maps.event.addListener(marker2, 'click', function() {
      var infowindow2 = new google.maps.InfoWindow();
      infowindow2.setContent('Display the chart here');
      infowindow2.open(map, marker1);
      infowindow2.setContent('Display the chart here');
      infowindow2.open(map, marker2);
    });          
  }    

и вот код для простой диаграммы, например:

https://google-developers.appspot.com/chart/interactive/docs/quick_start

Я пробовал много разных подходов, и мне кажется более очевидным добавить контейнер() в свойство setContent InfoWindow, а затем вызвать внешнюю функцию, которая создает диаграмму. Кажется, что это не работает, поскольку функция не может видеть контейнер. Я также попытался встроить весь код для диаграммы в свойство setContent, как предлагается в этом сообщении:

используя инструменты диаграммы google в строке содержимого google maps api infowindow

Мне удалось выполнить код без ошибок, однако ничего не отображается. Такой подход мог бы создать диаграмму на другой странице html и каким-то образом установить эту страницу в свойство setContent, а также не добиться успеха.

Я собираюсь сдаться, поскольку я не вижу способа сделать это.

Буду признателен за любую помощь.

Спасибо

Jose

4b9b3361

Ответ 1

Это не работает, поскольку функция не может видеть контейнер.

Вы можете передать контейнер в качестве аргумента drawChart()

Но я думаю, вам нравится рисовать диаграмму, заполненную данными, связанными с маркером, поэтому я бы предложил передать маркер в качестве аргумента drawChart() и создать там infoWindow.

Пример-код (без использования данных, связанных с маркером, поскольку не ясно, какие данные вы хотите нарисовать)

       function drawChart(marker) {

    // Create the data table.
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Topping');
    data.addColumn('number', 'Slices');
    data.addRows([
      ['Mushrooms', 3],
      ['Onions', 1],
      ['Olives', 1],
      ['Zucchini', 1],
      ['Pepperoni', 2]
    ]);

    // Set chart options
    var options = {'title':'Pizza sold @ '+
                           marker.getPosition().toString(),
                   'width':300,
                   'height':200};

    var node        = document.createElement('div'),
        infoWindow  = new google.maps.InfoWindow(),
        chart       = new google.visualization.PieChart(node);

        chart.draw(data, options);
        infoWindow.setContent(node);
        infoWindow.open(marker.getMap(),marker);
  }

использование:

google.maps.event.addListener(marker1, 'click', function() {
  drawChart(this);
});

Демо: http://jsfiddle.net/doktormolle/S6vBK/