Visualização: mapa

Visão geral

O gráfico de mapa do Google exibe um mapa usando a API Google Maps. Os valores de dados são exibidos como marcadores no mapa. Os valores de dados podem ser coordenadas (pares longos) ou endereços. O mapa será dimensionado para incluir todos os pontos identificados.

Se você quiser que seus mapas sejam desenhos de linha em vez de imagens de satélite, use um geográfico.

Locais nomeados

É possível identificar os lugares onde colocar marcadores por nome, conforme mostrado no mapa com os 10 principais países por população.

Quando o usuário seleciona um dos marcadores, uma dica com o nome e a população do país é exibida, porque usamos a opção showInfoWindow. Além disso, quando o usuário passa o cursor sobre um dos marcadores por um curto período, uma dica de "título" é exibida com as mesmas informações, porque usamos a opção showTooltip. Veja o HTML completo:

<html>
  <head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script>
    google.charts.load('current', {
    'packages': ['map'],
    // Note: you will need to get a mapsApiKey for your project.
    // See: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings
    'mapsApiKey': 'AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY'
    
    });
    google.charts.setOnLoadCallback(drawMap);

    function drawMap() {
      var data = google.visualization.arrayToDataTable([
        ['Country', 'Population'],
        ['China', 'China: 1,363,800,000'],
        ['India', 'India: 1,242,620,000'],
        ['US', 'US: 317,842,000'],
        ['Indonesia', 'Indonesia: 247,424,598'],
        ['Brazil', 'Brazil: 201,032,714'],
        ['Pakistan', 'Pakistan: 186,134,000'],
        ['Nigeria', 'Nigeria: 173,615,000'],
        ['Bangladesh', 'Bangladesh: 152,518,015'],
        ['Russia', 'Russia: 146,019,512'],
        ['Japan', 'Japan: 127,120,000']
      ]);

    var options = {
      showTooltip: true,
      showInfoWindow: true
    };

    var map = new google.visualization.Map(document.getElementById('chart_div'));

    map.draw(data, options);
  };
  </script>
  </head>
  <body>
    <div id="chart_div"></div>
  </body>
</html>

Locais geocodificados

Também é possível especificar locais por latitude e longitude, que carregam mais rapidamente do que os locais nomeados:

O gráfico acima identifica quatro locais por latitude e longitude.

Dados
  var data = google.visualization.arrayToDataTable([
    ['Lat', 'Long', 'Name'],
    [37.4232, -122.0853, 'Work'],
    [37.4289, -122.1697, 'University'],
    [37.6153, -122.3900, 'Airport'],
    [37.4422, -122.1731, 'Shopping']
  ]);
HTML completo
<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load("current", {
        "packages":["map"],
        // Note: you will need to get a mapsApiKey for your project.
        // See: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings
        "mapsApiKey": "AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY"
      });
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['Lat', 'Long', 'Name'],
          [37.4232, -122.0853, 'Work'],
          [37.4289, -122.1697, 'University'],
          [37.6153, -122.3900, 'Airport'],
          [37.4422, -122.1731, 'Shopping']
        ]);

        var map = new google.visualization.Map(document.getElementById('map_div'));
        map.draw(data, {
          showTooltip: true,
          showInfoWindow: true
        });
      }

    </script>
  </head>

  <body>
    <div id="map_div" style="width: 400px; height: 300px"></div>
  </body>
</html>

Como personalizar marcadores

Você pode usar formas de marcadores localizadas em outros lugares da Web. Veja um exemplo com os alfinetes azuis em iconArchive.com:

Se você selecionar os alfinetes no gráfico acima, eles terão um valor menor. PNGs, GIFs e JPGs são compatíveis.

Dados
  var options = {
    icons: {
      default: {
        normal: 'https://icons.iconarchive.com/icons/icons-land/vista-map-markers/48/Map-Marker-Ball-Azure-icon.png',
        selected: 'https://icons.iconarchive.com/icons/icons-land/vista-map-markers/48/Map-Marker-Ball-Right-Azure-icon.png'
      }
    }
  };
HTML completo
<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load("current", {
        "packages":["map"],
        // Note: you will need to get a mapsApiKey for your project.
        // See: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings
        "mapsApiKey": "AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY"
      });
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['Lat', 'Long', 'Name'],
          [37.4232, -122.0853, 'Work'],
          [37.4289, -122.1697, 'University'],
          [37.6153, -122.3900, 'Airport'],
          [37.4422, -122.1731, 'Shopping']
        ]);

        var options = {
          icons: {
            default: {
              normal: 'https://icons.iconarchive.com/icons/icons-land/vista-map-markers/48/Map-Marker-Ball-Azure-icon.png',
              selected: 'https://icons.iconarchive.com/icons/icons-land/vista-map-markers/48/Map-Marker-Ball-Right-Azure-icon.png'
            }
          }
        };

        var map = new google.visualization.Map(document.getElementById('map_markers_div'));
        map.draw(data, options);
      }

    </script>
  </head>

  <body>
    <div id="map_markers_div" style="width: 400px; height: 300px"></div>
  </body>
</html>

Adicionar vários conjuntos de marcadores

Além de criar um conjunto padrão de marcadores, você também pode criar vários conjuntos de marcadores.

Para criar um conjunto de marcadores adicionais, adicione um código à opção icons e defina suas imagens de marcador. Em seguida, adicione uma coluna à sua tabela de dados e defina o código do conjunto de marcadores que você quer usar para cada linha na tabela de dados. Também é possível usar 'default' ou null para usar os marcadores padrão.

Opções
      var url = 'https://icons.iconarchive.com/icons/icons-land/vista-map-markers/48/';

      var options = {
        zoomLevel: 6,
        showTooltip: true,
        showInfoWindow: true,
        useMapTypeControl: true,
        icons: {
          blue: {
            normal:   url + 'Map-Marker-Ball-Azure-icon.png',
            selected: url + 'Map-Marker-Ball-Right-Azure-icon.png'
          },
          green: {
            normal:   url + 'Map-Marker-Push-Pin-1-Chartreuse-icon.png',
            selected: url + 'Map-Marker-Push-Pin-1-Right-Chartreuse-icon.png'
          },
          pink: {
            normal:   url + 'Map-Marker-Ball-Pink-icon.png',
            selected: url + 'Map-Marker-Ball-Right-Pink-icon.png'
          }
        }
      };
    
HTML completo
<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load('current', {
      'packages': ['map'],
      // Note: you will need to get a mapsApiKey for your project.
      // See: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings
      'mapsApiKey': 'AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY'
    });
    google.charts.setOnLoadCallback(drawMap);

    function drawMap () {
      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Address');
      data.addColumn('string', 'Location');
      data.addColumn('string', 'Marker')

      data.addRows([
        ['New York City NY, United States', 'New York',   'blue' ],
        ['Scranton PA, United States',      'Scranton',   'green'],
        ['Washington DC, United States',    'Washington', 'pink' ],
        ['Philadelphia PA, United States',  'Philly',     'green'],
        ['Pittsburgh PA, United States',    'Pittsburgh', 'green'],
        ['Buffalo NY, United States',       'Buffalo',    'blue' ],
        ['Baltimore MD, United States',     'Baltimore',  'pink' ],
        ['Albany NY, United States',        'Albany',     'blue' ],
        ['Allentown PA, United States',     'Allentown',  'green']
      ]);
      var url = 'https://icons.iconarchive.com/icons/icons-land/vista-map-markers/48/';

      var options = {
        zoomLevel: 6,
        showTooltip: true,
        showInfoWindow: true,
        useMapTypeControl: true,
        icons: {
          blue: {
            normal:   url + 'Map-Marker-Ball-Azure-icon.png',
            selected: url + 'Map-Marker-Ball-Right-Azure-icon.png'
          },
          green: {
            normal:   url + 'Map-Marker-Push-Pin-1-Chartreuse-icon.png',
            selected: url + 'Map-Marker-Push-Pin-1-Right-Chartreuse-icon.png'
          },
          pink: {
            normal:   url + 'Map-Marker-Ball-Pink-icon.png',
            selected: url + 'Map-Marker-Ball-Right-Pink-icon.png'
          }
        }
      };
      var map = new google.visualization.Map(document.getElementById('map_div'));

      map.draw(data, options);
    }
  </script>
</head>
<body>
  <div id="map_div" style="height: 500px; width: 900px"></div>
</body>
</html>

    

Estilizar mapas

A visualização de mapa oferece a possibilidade de definir estilos personalizados, permitindo que você crie um ou vários tipos de mapa.

Você pode definir um tipo de mapa personalizado criando um objeto de estilo de mapa e colocando-o sob o respectivo identificador (mapTypeId) na opção de mapas. Exemplo:

  var options = {
    maps: {
      <map style ID>: <map style object>
    }
  };

Você pode consultar esse tipo de mapa personalizado mais tarde pelo ID de estilo do mapa que você atribuiu a ele.

Seu objeto de estilo de mapa contém um name, que será o nome de exibição no controle do tipo de mapa (não precisa corresponder ao mapTypeId) e uma matriz styles, que conterá objetos de estilo para cada elemento que você quiser personalizar. A referência da API Google Maps tem uma lista dos diferentes elementos, elementos e tipos de estilo com que você pode criar um tipo de mapa personalizado.

Observação:o mapTypeId personalizado precisa ser colocado na opção maps.

Opções
      var options = {
        mapType: 'styledMap',
        zoomLevel: 12,
        showTooltip: true,
        showInfoWindow: true,
        useMapTypeControl: true,
        maps: {
          // Your custom mapTypeId holding custom map styles.
          styledMap: {
            name: 'Styled Map', // This name will be displayed in the map type control.
            styles: [
              {featureType: 'poi.attraction',
               stylers: [{color: '#fce8b2'}]
              },
              {featureType: 'road.highway',
               stylers: [{hue: '#0277bd'}, {saturation: -50}]
              },
              {featureType: 'road.highway',
               elementType: 'labels.icon',
               stylers: [{hue: '#000'}, {saturation: 100}, {lightness: 50}]
              },
              {featureType: 'landscape',
               stylers: [{hue: '#259b24'}, {saturation: 10}, {lightness: -22}]
              }
        ]}}
      };
HTML completo
<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load('current', {
      'packages': ['map'],
      // Note: you will need to get a mapsApiKey for your project.
      // See: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings
      'mapsApiKey': 'AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY'
    });
    google.charts.setOnLoadCallback(drawMap);

    function drawMap () {
      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Address');
      data.addColumn('string', 'Location');

      data.addRows([
        ['Lake Buena Vista, FL 32830, United States',                  'Walt Disney World'],
        ['6000 Universal Boulevard, Orlando, FL 32819, United States', 'Universal Studios'],
        ['7007 Sea World Drive, Orlando, FL 32821, United States',     'Seaworld Orlando' ]
      ]);

      var options = {
        mapType: 'styledMap',
        zoomLevel: 12,
        showTooltip: true,
        showInfoWindow: true,
        useMapTypeControl: true,
        maps: {
          // Your custom mapTypeId holding custom map styles.
          styledMap: {
            name: 'Styled Map', // This name will be displayed in the map type control.
            styles: [
              {featureType: 'poi.attraction',
               stylers: [{color: '#fce8b2'}]
              },
              {featureType: 'road.highway',
               stylers: [{hue: '#0277bd'}, {saturation: -50}]
              },
              {featureType: 'road.highway',
               elementType: 'labels.icon',
               stylers: [{hue: '#000'}, {saturation: 100}, {lightness: 50}]
              },
              {featureType: 'landscape',
               stylers: [{hue: '#259b24'}, {saturation: 10}, {lightness: -22}]
              }
        ]}}
      };

      var map = new google.visualization.Map(document.getElementById('map_div'));

      map.draw(data, options);
    }
  </script>
</head>
<body>
<div id="map_div" style="height: 500px; width: 900px"></div>
</body>
</html>

Além de criar tipos de mapa personalizados, você também pode especificar quais mapas o usuário pode ver no controle com a opção mapTypeIds. Por padrão, todos os tipos de mapa, incluindo os personalizados, serão exibidos no controle de tipos de mapa. A opção mapTypeIds aceita uma matriz de strings dos tipos de mapa que você quer permitir que o usuário veja. Essas strings precisam se referir aos nomes predefinidos para os estilos de mapa padrão (por exemplo, normal, satélite, terreno ou híbrido) ou ao ID do estilo de mapa de um tipo de mapa personalizado que você definiu. Ao definir a opção mapTypeIds, seu mapa disponibilizará apenas os tipos de mapa especificados nessa matriz.

Também é possível usar esses elementos com a opção mapType para definir um estilo de mapa como padrão, mas não incluí-lo na matriz mapTypeIds. Isso fará com que esse mapa seja exibido somente no carregamento inicial.

      var options = {
        mapType: 'styledMap',
        zoomLevel: 7,
        showTooltip: true,
        showInfoWindow: true,
        useMapTypeControl: true,
        // User will only be able to view/select custom styled maps.
        mapTypeIds: ['styledMap', 'redEverything', 'imBlue'],
        maps: {
          styledMap: {
            name: 'Styled Map',
            styles: [
              {featureType: 'poi.attraction',
               stylers: [{color: '#fce8b2'}]},
              {featureType: 'road.highway',
               stylers: [{hue: '#0277bd'}, {saturation: -50}]},
              {featureType: 'road.highway', elementType: 'labels.icon',
               stylers: [{hue: '#000'}, {saturation: 100}, {lightness: 50}]},
              {featureType: 'landscape',
               stylers: [{hue: '#259b24'}, {saturation: 10},{lightness: -22}]}
          ]},
          redEverything: {
            name: 'Redden All The Things',
            styles: [
              {featureType: 'landscape',
               stylers: [{color: '#fde0dd'}]},
              {featureType: 'road.highway',
               stylers: [{color: '#67000d'}]},
              {featureType: 'road.highway', elementType: 'labels',
               stylers: [{visibility: 'off'}]},
              {featureType: 'poi',
               stylers: [{hue: '#ff0000'}, {saturation: 50}, {lightness: 0}]},
              {featureType: 'water',
               stylers: [{color: '#67000d'}]},
              {featureType: 'transit.station.airport',
               stylers: [{color: '#ff0000'}, {saturation: 50}, {lightness: -50}]}
          ]},
          imBlue: {
            name: 'All Your Blues are Belong to Us',
            styles: [
              {featureType: 'landscape',
               stylers: [{color: '#c5cae9'}]},
              {featureType: 'road.highway',
               stylers: [{color: '#023858'}]},
              {featureType: 'road.highway', elementType: 'labels',
               stylers: [{visibility: 'off'}]},
              {featureType: 'poi',
               stylers: [{hue: '#0000ff'}, {saturation: 50}, {lightness: 0}]},
              {featureType: 'water',
               stylers: [{color: '#0288d1'}]},
              {featureType: 'transit.station.airport',
               stylers: [{color: '#0000ff'}, {saturation: 50}, {lightness: -50}]}
          ]}
        }
      };

Carregando

O nome do pacote google.charts.load é "map".

Você precisará ter seu próprio mapsApiKey para o projeto, em vez de apenas copiar o que é usado nos exemplos aqui. Isso evita a degradação do serviço de dados do mapa para seus usuários. Para ver mais detalhes, consulte Configurações de carregamento.

      google.charts.load("current", {
        "packages":["map"],
        // Note: you will need to get a mapsApiKey for your project.
        // See: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings
        "mapsApiKey": "AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY"
      });

O nome da classe do layout é google.visualization.Map. Como o nome abreviado Map está em conflito com a classe Map do JavaScript, o ChartWrapper não carregará automaticamente esse pacote quando você especificar chartType: 'Map'. No entanto, você pode especificar chartType: 'google.visualization.Map'.

  var visualization = new google.visualization.Map(container);

Formato de dados

Há suporte para dois formatos de dados alternativos:

  1. Pares de latitude/longitude: as duas primeiras colunas precisam ser números designando a latitude e a longitude, respectivamente. Uma terceira coluna opcional contém uma string que descreve o local especificado nas duas primeiras colunas.
  2. Endereço da string: a primeira coluna precisa ser uma string que contenha um endereço. Esse endereço deve ser o mais completo possível. Uma segunda coluna opcional contém uma string que descreve o local na primeira coluna. Os endereços de string são carregados mais lentamente, principalmente quando há mais de 10 endereços.

Observação: a opção de pares de latitude/longitude carrega mapas muito mais rapidamente, especialmente com dados grandes. Recomendamos que você use essa opção para grandes conjuntos de dados. Acesse a API Google Maps para saber como transformar seus endereços em pontos de latitude e longitude. O mapa pode exibir no máximo 400 entradas. Se os dados tiverem mais de 400 linhas, apenas as primeiras 400 serão exibidas.

Opções de configuração

Nome
enableScrollWheel

Se definida como verdadeira, ativa o aumento e diminuição do zoom usando a roda de rolagem do mouse.

Tipo: booleano
Padrão:falso
ícones

Mantém conjuntos de marcadores personalizados. Cada conjunto de marcadores pode especificar uma imagem de marcador normal e selected. É possível definir um conjunto padrão definindo a opção default ou conjuntos de marcadores personalizados definindo um ID de marcador exclusivo.

var options = {
  icons: {
    default: {
      normal:   '/path/to/marker/image',
      selected: '/path/to/marker/image'
    },
    customMarker: {
      normal:   '/path/to/other/marker/image',
      selected: '/path/to/other/marker/image'
    }
  }
};
Tipo: objeto
Padrão: nulo
Cor da linha

Se showLine for verdadeiro, define a cor da linha. Por exemplo: "#800000".

Tipo: string
Padrão: cor padrão
Largura da linha

Se showLine for verdadeiro, definirá a largura da linha (em pixels).

Tipo: número
Padrão: 10
maps.<mapTypeId>

Um objeto que contém propriedades de um tipo de mapa personalizado. Esse tipo de mapa personalizado será acessado pelo mapTypeId que você especificar para o tipo de mapa personalizado. É necessário definir um novo mapTypeId para cada tipo de mapa personalizado criado. Cada tipo de mapa personalizado precisa conter duas propriedades:

  • name: o nome de exibição do tipo de mapa estilizado
  • Styles: uma matriz com os objetos de estilo para o tipo de mapa estilizado.
Tipo: objeto
Padrão:nulo
maps.<mapTypeId>.name

O nome do mapa que será exibido no controle do mapa se useMapTypeControl estiver definido como true.

Tipo: string
Padrão:nulo
maps.<mapTypeId>.styles

Mantém os objetos de estilo para os vários elementos de um tipo de mapa personalizado.

Cada objeto de estilo pode conter de uma a três propriedades: featureType, elementType e stylers. Se featureType e elementType forem omitidos, os estilos serão aplicados a todos os elementos/elementos do mapa.

{
  featureType: 'roadway.highway',
  elementType: 'labels.text.fill',
  stylers: [{hue: '#ff0000}, {saturation: 50}, {lightness: 100}]
}

Consulte a documentação do Maps para mais informações sobre os diferentes elementos, elementos e estilizadores.

Tipo: matriz
Padrão: nulo
mapType

O tipo de mapa a ser exibido. Os valores possíveis são "normal", "terreno", "satélite", "híbrido" ou o ID de um tipo de mapa personalizado, se houver.

Tipo: string
Padrão: "híbrido"
Ids do tipo de mapa

Se você estiver usando o controle do tipo de mapa (useMapTypeControl: true), os IDs especificados nessa matriz serão os únicos tipos exibidos no controle. Se essa opção não for definida, o controle de tipo de mapa será padronizado com as opções padrão de controle de tipos de mapa do Google Maps e todos os tipos de mapa personalizados que estiverem disponíveis.

Tipo: matriz
Padrão:nulo
Mostrar janela de informações

Se definido como verdadeiro, mostra a descrição do local em uma janela separada quando um marcador de ponto é selecionado pelo usuário. Essa opção era chamada de showTip até a versão 45. Consulte também showTooltip

Tipo: booleano
Padrão:falso
Linha de exibição

Se definido como verdadeiro, mostrará uma polilinha do Google Maps por todos os pontos.

Tipo: booleano
Padrão:falso
Dica de ferramenta

Se definido como verdadeiro, mostra a descrição do local como uma dica quando o mouse está posicionado acima de um marcador de ponto. Essa opção era chamada de showTip até a versão 45. No momento, não há suporte a HTML. Portanto, a dica mostrará tags HTML brutas.

Tipo: booleano
Padrão:falso
Uso de ControlControl

Mostrar um seletor de tipo de mapa que permite ao visualizador alternar entre [mapa, satélite, híbrido, terreno]. Quando useJumpControl for false (padrão), nenhum seletor será apresentado e o tipo será determinado pela opção mapType.

Tipo: booleano
Padrão:falso
zoomLevel

Um número inteiro que indica o nível de zoom inicial do mapa, em que 0 é completamente diminuído (todo o mundo) e 19 é o nível de zoom máximo. Consulte "Níveis de zoom" na API Google Maps.

Tipo:número
Padrão: automático

Métodos

Método
draw(data, options)

Desenha o mapa.

Tipo de retorno:nenhum
getSelection()

Implementação padrão de getSelection(). Todos os elementos de seleção são de linha. É possível retornar mais de uma linha selecionada.

Tipo de retorno: matriz de elementos de seleção
setSelection(selection)

Implementação padrão de setSelection(). Trata cada entrada de seleção como uma seleção de linhas. Compatível com a seleção de várias linhas.

Tipo de retorno: nenhum

Eventos

Nome
error

Disparado quando ocorre um erro ao tentar renderizar o gráfico.

Propriedades:ID e mensagem
select

Evento de seleção padrão

Propriedades:nenhuma

Política de dados

O mapa é exibido pelo Google Maps. Consulte os Termos de Serviço do Google Maps para saber mais sobre a política de dados.