Neste guia, mostramos como carregar a API Maps JavaScript. Existem três maneiras de fazer isso:
- Usar a importação de biblioteca dinâmica
- Usar a tag de carregamento direto de script
- Usar o pacote js-api-loader do NPM
Usar a API Dynamic Library Import
A importação dinâmica de biblioteca oferece a capacidade de carregar bibliotecas no momento da execução. Isso permite que você solicite as bibliotecas necessárias no momento em que elas são necessárias, em vez de todas de uma só vez no momento do carregamento. Ela também protege sua página contra o carregamento da API Maps JavaScript várias vezes.
Para carregar a API Maps JavaScript, adicione um carregador bootstrap inline ao código do aplicativo, como mostrado no snippet a seguir:
<script> (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({ key: "YOUR_API_KEY", v: "weekly", // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.). // Add other bootstrap parameters as needed, using camel case. }); </script>
Também é possível incluir o código do carregador bootstrap diretamente no código JavaScript.
Para carregar bibliotecas no momento da execução, use o operador await
para chamar importLibrary()
em uma função async
. Declarar variáveis para as classes necessárias permite
pular o uso de um caminho qualificado (por exemplo, google.maps.Map
), conforme mostrado no
exemplo de código abaixo:
TypeScript
let map: google.maps.Map; async function initMap(): Promise<void> { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; map = new Map(document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();
JavaScript
let map; async function initMap() { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();
A função também pode carregar bibliotecas sem declarar uma variável
para as classes necessárias, o que é especialmente útil se você adicionou um mapa usando o
elemento gmp-map
:
async function initMap() { google.maps.importLibrary("maps"); google.maps.importLibrary("marker"); } initMap();
Como alternativa, carregue as bibliotecas diretamente no HTML, conforme mostrado aqui:
<script> google.maps.importLibrary("maps"); google.maps.importLibrary("marker"); </script>
Saiba como migrar para a API Dynamic Library Loading.
Parâmetros obrigatórios
key
: sua chave de API. A API Maps JavaScript só é carregada quando uma chave de API válida é especificada.
Parâmetros opcionais
v
: a versão da API Maps JavaScript que será carregada.libraries
: uma lista separada por vírgulas de outras bibliotecas da API Maps JavaScript que serão carregadas. Em geral, não é recomendável especificar um conjunto fixo de bibliotecas, mas talvez seja útil para desenvolvedores interessados em ajustar o comportamento de armazenamento em cache no próprio site.language
: o idioma que será usado. Isso afeta os nomes de controles, notificações de direitos autorais, rotas de carro e etiquetas de controle, além das respostas às solicitações de serviço. Consulte a lista de idiomas compatíveis.region
: o código da região a ser usado. Esse parâmetro muda o comportamento do mapa com base em um determinado país ou território.authReferrerPolicy
: os clientes do Maps JS podem configurar restrições de referenciadores HTTP no console do Cloud e assim limitar os URLs com permissão para usar uma determinada chave de API. Por padrão, essas restrições são configuradas para que apenas alguns caminhos possam usar uma chave de API. Se qualquer URL no mesmo domínio ou origem puder usar a chave de API, defina o parâmetroauthReferrerPolicy: "origin"
para limitar a quantidade de dados enviados ao autorizar solicitações da API Maps JavaScript. Quando esse parâmetro for especificado, só vai ser possível carregar a API Maps JavaScript se as restrições de referenciadores HTTP estiverem ativadas e uma delas corresponder ao domínio do site atual sem um caminho definido.mapIds
: uma matriz de IDs de mapa. Faz com que a configuração dos IDs de mapa especificados seja pré-carregada.channel
: consulte Rastreamento de uso por canal.solutionChannel
: a Plataforma Google Maps oferece muitos tipos de exemplo de código para que você comece a usar o produto rapidamente. O Google inclui o parâmetro de consultasolutionChannel
nas chamadas de API no exemplo de código para acompanhar a implementação dos exemplos mais complexos e melhorar a qualidade da solução.
Usar a tag de carregamento de script direto
Esta seção mostra como usar a tag de carregamento direto de script. Como o script direto carrega bibliotecas quando o mapa é carregado, ele pode simplificar os mapas criados usando um elemento gmp-map
, removendo a necessidade de solicitar bibliotecas explicitamente no momento de execução. Como a tag de carregamento de script direto carrega todas as bibliotecas solicitadas de uma só vez, o desempenho pode ser afetado em alguns aplicativos. Inclua a tag de carregamento direto de script apenas uma vez por carregamento de página.
Adicionar uma tag de script
Para carregar a API Maps JavaScript inline em um arquivo HTML, adicione uma tag script
, como mostrado abaixo.
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&callback=initMap">
</script>
Parâmetros de URL de carregamento de script direto
Nesta seção, abordamos todos os parâmetros que podem ser especificados na string de consulta referente ao URL de carregamento do script ao carregar a API Maps JavaScript.
Alguns parâmetros são obrigatórios, outros são opcionais. Como é padrão em URLs, todos os parâmetros são separados usando o caractere E comercial (&
).
O URL de exemplo a seguir tem marcadores de posição para todos os parâmetros possíveis:
https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY
&loading=async
&callback=FUNCTION_NAME
&v=VERSION
&libraries="LIBRARIES"
&language="LANGUAGE"
®ion="REGION"
&auth_referrer_policy="AUTH_REFERRER_POLICY"
&map_ids="MAP_IDS"
&channel="CHANNEL"
&solution_channel="SOLUTION_IDENTIFIER"
O URL no exemplo de tag script
a seguir carrega a API Maps JavaScript:
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&callback=initMap">
</script>
Parâmetros obrigatórios (diretos)
Estes são os parâmetros obrigatórios ao carregar a API Maps JavaScript.
key
: sua chave de API. A API Maps JavaScript só é carregada quando uma chave de API válida é especificada.
Parâmetros opcionais (diretos)
Use estes parâmetros para solicitar uma versão específica da API Maps JavaScript, carregar outras bibliotecas, localizar seu mapa ou especificar a política sobre verificação do referenciador HTTP.
loading
: a estratégia de carregamento de código que a API Maps JavaScript pode usar. Defina comoasync
para indicar que a API Maps JavaScript não foi carregada de forma síncrona e que nenhum código JavaScript é acionado pelo eventoload
do script. É altamente recomendável definir esse valor comoasync
sempre que possível para melhorar a performance. Use o parâmetrocallback
para realizar ações quando a API Maps JavaScript estiver disponível. Disponível a partir da versão 3.55.callback
: o nome de uma função global que será chamada após o carregamento completo da API Maps JavaScript.v
: a versão da API Maps JavaScript a ser usada.libraries
: uma lista separada por vírgulas de outras bibliotecas da API Maps JavaScript a serem carregadas.language
: o idioma a ser usado. Esse parâmetro afeta os nomes de controles, notificações de direitos autorais, rotas de carro e rótulos de controle, além das respostas às solicitações de serviço. Consulte a lista de idiomas compatíveis.region
: o código da região a ser usado. Esse parâmetro muda o comportamento do mapa com base em um determinado país ou território.auth_referrer_policy
: os clientes podem configurar restrições de referenciadores HTTP no console do Cloud para limitar os URLs com permissão para usar uma determinada chave de API. Por padrão, essas restrições são configuradas para que apenas alguns caminhos possam usar uma chave de API. Se qualquer URL no mesmo domínio ou origem puder usar a chave de API, definaauth_referrer_policy=origin
para limitar a quantidade de dados enviados ao autorizar solicitações da API Maps JavaScript. Disponível a partir da versão 3.46. Quando esse parâmetro for especificado, só vai ser possível carregar a API Maps JavaScript se as restrições de referenciadores HTTP estiverem ativadas e uma delas corresponder ao domínio do site atual sem um caminho definido.mapIds
: uma lista separada por vírgulas de IDs de mapas. Faz com que a configuração dos IDs de mapa especificados seja pré-carregada.channel
: consulte Rastreamento de uso por canal.solution_channel
: a Plataforma Google Maps oferece muitos tipos de exemplo de código para que você comece a usar o produto rapidamente. O Google inclui o parâmetro de consultasolution_channel
nas chamadas de API no exemplo de código para acompanhar a implementação dos exemplos mais complexos e melhorar a qualidade da solução.
Usar o pacote js-api-loader do NPM
O pacote @googlemaps/js-api-loader (link em inglês) está disponível para carregamento usando o gerenciador de pacotes do NPM. Instale-o com o seguinte comando:
npm install @googlemaps/js-api-loader
Esse pacote pode ser importado para o aplicativo com:
import { Loader } from "@googlemaps/js-api-loader"
O carregador expõe uma interface de callback e promessa. Confira a seguir o uso
do método de promessa padrão load()
.
TypeScript
const loader = new Loader({ apiKey: "YOUR_API_KEY", version: "weekly", ...additionalOptions, }); loader.load().then(async () => { const { Map } = await google.maps.importLibrary("maps") as google.maps.MapsLibrary; map = new Map(document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); });
JavaScript
const loader = new Loader({ apiKey: "YOUR_API_KEY", version: "weekly", ...additionalOptions, }); loader.load().then(async () => { const { Map } = await google.maps.importLibrary("maps"); map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); });
Confira um exemplo com js-api-loader.
O exemplo a seguir mostra como usar loader.importLibrary()
para carregar bibliotecas:
const loader = new Loader({
apiKey: "YOUR_API_KEY",
version: "weekly",
...additionalOptions,
});
loader
.importLibrary('maps')
.then(({Map}) => {
new Map(document.getElementById("map"), mapOptions);
})
.catch((e) => {
// do something
});
Migrar para a API Dynamic Library Import
Nesta seção, abordamos as etapas necessárias para migrar a integração e usar a API Dynamic Library Import.
Etapas da migração
Primeiro, substitua a tag de carregamento de script direto pela tag inline do carregador bootstrap.
Antes
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=maps&callback=initMap">
</script>
Depois
<script> (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({ key: "YOUR_API_KEY", v: "weekly", // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.). // Add other bootstrap parameters as needed, using camel case. }); </script>
Em seguida, atualize o código do aplicativo:
- Mude a função
initMap()
para ser assíncrona. - Chame
importLibrary()
para carregar e acessar as bibliotecas necessárias.
Antes
let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } window.initMap = initMap;
Depois
let map; // initMap is now async async function initMap() { // Request libraries when needed, not in the script tag. const { Map } = await google.maps.importLibrary("maps"); // Short namespaces can be used. map = new Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } initMap();