Implemente geolocalização precisa usando Google Maps JavaScript API e navegador. Tutorial completo para obter coordenadas GPS do usuário em aplicações React Next.js.
Google Maps API em React e Next.js
TypeScript + @vis.gl
Tutorial completo de integração Google Maps JavaScript API com React Next.js. Aprenda geolocalização, mapas interativos, rotas dinâmicas e marcadores personalizados usando TypeScript e as melhores práticas de desenvolvimento web.
Material auxiliar do CrazyStack Typescript do DevDoido
Recursos Poderosos
Tudo que você precisa para criar aplicações de mapeamento profissionais
Crie rotas interativas com Google Maps Directions API. Aprenda a renderizar caminhos, calcular distâncias e implementar navegação turn-by-turn em React.
Carregamento assíncrono de Google Maps com Next.js. Otimizações de performance, lazy loading e melhores práticas para aplicações web rápidas.
Tutorial TypeScript para Google Maps API. Tipagem completa, interfaces personalizadas e desenvolvimento type-safe com React e Next.js.
Integração completa usando @googlemaps/google-maps-services-js e @googlemaps/js-api-loader. Places API, Geocoding e todas as funcionalidades.
Crie marcadores personalizados, estilos de mapa únicos e componentes reutilizáveis. Tutorial completo de customização para Google Maps em React.
Use Tab para navegar entre os recursos e Enter para mais detalhes
Configuração Rápida
Siga estes passos simples para começar a usar o Google Maps em seu projeto Next.js
Instale as bibliotecas necessárias:
Configure sua chave de API do Google:
Importe e use em seu componente:
Exemplos de Código
Códigos prontos para usar do tutorial completo do Google Maps API
# Instalação das dependências
npm install @googlemaps/js-api-loader
# Configuração da API Key
# Adicione no seu arquivo .env.local:
NEXT_PUBLIC_GOOGLE_MAPS_API_KEY=sua_api_key_aqui
# Tipos TypeScript (opcional)
npm install --save-dev @types/google.mapsTutorial Completo
Siga nosso guia passo a passo para dominar a integração do Google Maps com Next.js
Instale as dependências e configure a API key do Google Maps
Implemente as classes RouteGoogle e MapGoogle para gerenciar mapas e rotas
Crie hooks React para carregar mapas e gerenciar rotas
Desenvolva componentes React para interação com mapas
Progresso do Tutorial
0 de 4 etapas concluídas
Este é um material auxiliar do bootcamp CrazyStack Typescript do DevDoido. Ele servirá como uma espécie de documentação de alguns códigos vistos durante as aulas apenas como material complementar, garanta já sua vaga no bootcamp em crazystack.com.br.
Stack 2026: @vis.gl/react-google-maps no App Router
Caminho PT atual: pacote @vis.gl/react-google-maps, componente com 'use client', key em NEXT_PUBLIC_GOOGLE_MAPS_API_KEY só com restrição por HTTP referrer ativa. Tutoriais PT antigos ainda ensinam LoadScript legado — prefira APIProvider + Map da doc vis.gl (SSR não é suportado pela Maps JS API).
'use client';
import { APIProvider, Map } from '@vis.gl/react-google-maps';
export default function MyMap() {
return (
<APIProvider apiKey={process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY!}>
<Map
mapId="SEU_MAP_ID"
defaultZoom={12}
defaultCenter={{ lat: -23.55, lng: -46.63 }}
gestureHandling="greedy"
style={{ width: '100%', height: 400 }}
/>
</APIProvider>
);
}Fonte: guia SSR & frameworks do vis.gl — o directive use client exclui o mapa do SSR no App Router.
Checklist Cloud Console: billing, APIs e restrição de key
Antes do mapa na tela — sem isso o tutorial “funciona no localhost” e estoura na produção. Ponte natural para lead-gen / curso Maps Scrapper — sem inventar scrapes.
- Ative faturamento com alerta de orçamento (Maps Platform pós-2025 usa caps/SKU — não assuma crédito US$200 legado).
- Habilite Maps JavaScript API (e Places/Geocoding só se for usar).
- Crie a key com restrição por HTTP referrer do seu domínio.
Map ID, AdvancedMarker e InfoWindow
AdvancedMarker só funciona em mapa com cloud-based styling: crie um Map ID no Cloud Console e passe em mapId no componente Map (doc vis.gl AdvancedMarker).
- InfoWindow: mantenha no máximo um aberto; feche o anterior ao clicar outro marker; conteúdo com texto/ARIA — nunca injete HTML cru de usuário.
- Geolocation: peça permissão só sob gesto do usuário; trate deny/timeout; não assuma lat/lng sem fallback (centro padrão + mensagem).
- Ponte lead-gen / curso Maps Scrapper: use Places/Geocoding só com APIs habilitadas e quota monitorada — sem inventar scrapes.
Código de rotas (Directions) — material do bootcamp
Este código TypeScript define uma classe RouteGoogle, que implementa RouteProtocol. Ela cria e gerencia rotas no Google Maps, com marcadores para início e destino, mais um marcador do veículo em movimento.
1. Importação de módulos e tipos:
import type { DirectionsResponseData } from "@googlemaps/google-maps-services-js";
import { RouteProtocol } from "./route.protocol";
import { convertDirectionsResponseToDirectionsResult } from "./mapUtils";- • Importa
DirectionsResponseDatade@googlemaps/google-maps-services-js. Serve pra lidar com os dados de resposta das direções do Google Maps. - • Traz a interface
RouteProtocoldo módulo localroute.protocol. Define o contrato queRouteGoogleprecisa seguir. - • Importa a função
convertDirectionsResponseToDirectionsResultdemapUtils.
2. Declaração da classe RouteGoogle:
export class RouteGoogle implements RouteProtocol {
// Propriedades da classe
}A classe RouteGoogle é exportada e segue RouteProtocol.
3. Construtor:
constructor(options: {
startMarkerOptions: google.maps.MarkerOptions;
endMarkerOptions: google.maps.MarkerOptions;
carMarkerOptions: google.maps.MarkerOptions;
}) {
// Inicialização das propriedades da classe
}O construtor recebe options com três campos:startMarkerOptions, endMarkerOptions e carMarkerOptions. Eles configuram os marcadores de início, fim e carro.
4. Inicialização de marcadores e DirectionsRenderer:
this.startMarker = new google.maps.Marker(startMarkerOptions);
this.endMarker = new google.maps.Marker(endMarkerOptions);
this.carMarker = new google.maps.Marker(carMarkerOptions);
const { strokeColor } = this.startMarker.getIcon() as google.maps.Symbol;
this.directionsRenderer = new google.maps.DirectionsRenderer({
suppressMarkers: true,
polylineOptions: { strokeColor, strokeOpacity: 0.5, strokeWeight: 5 }
});
this.directionsRenderer.setMap(this.startMarker.getMap() as google.maps.Map);Aqui criamos três marcadores (startMarker, endMarker e carMarker) usando as opções passadas. DirectionsRenderer é configurado pra desenhar a rota. O estilo da linha usa a cor do ícone do marcador inicial.
Código completo da classe RouteGoogle
import type { DirectionsResponseData } from "@googlemaps/google-maps-services-js";
import { RouteProtocol } from "./route.protocol";
import { convertDirectionsResponseToDirectionsResult } from "./mapUtils";
export class RouteGoogle implements RouteProtocol {
public startMarker: google.maps.Marker;
public endMarker: google.maps.Marker;
public carMarker: google.maps.Marker;
public directionsRenderer: google.maps.DirectionsRenderer;
constructor(options: {
startMarkerOptions: google.maps.MarkerOptions;
endMarkerOptions: google.maps.MarkerOptions;
carMarkerOptions: google.maps.MarkerOptions;
}) {
const { startMarkerOptions, endMarkerOptions, carMarkerOptions } = options;
this.startMarker = new google.maps.Marker(startMarkerOptions);
this.endMarker = new google.maps.Marker(endMarkerOptions);
this.carMarker = new google.maps.Marker(carMarkerOptions);
const { strokeColor } = this.startMarker.getIcon() as google.maps.Symbol;
this.directionsRenderer = new google.maps.DirectionsRenderer({
suppressMarkers: true,
polylineOptions: { strokeColor, strokeOpacity: 0.5, strokeWeight: 5 }
});
this.directionsRenderer.setMap(this.startMarker.getMap() as google.maps.Map);
}
delete(): void {
this.startMarker.setMap(null);
this.endMarker.setMap(null);
this.carMarker.setMap(null);
this.directionsRenderer.setMap(null);
}
async calculateRoute(
directionsResponseData?: DirectionsResponseData & { request: any }
): Promise<void> {
if (directionsResponseData) {
const directionsResult = convertDirectionsResponseToDirectionsResult(
directionsResponseData
);
this.directionsRenderer.setDirections(directionsResult);
}
}
// Outros métodos da classe...
}Pronto para Começar?
Transforme suas ideias em aplicações web poderosas com mapas interativos e funcionalidades avançadas de geolocalização
Tutorial Completo
Acesse o tutorial detalhado com exemplos práticos
Código Fonte
Baixe todos os arquivos e exemplos do projeto
CrazyStack
Participe do bootcamp completo de TypeScript
Material auxiliar do CrazyStack Typescript do DevDoido
Garanta já sua vaga no bootcamp e domine o desenvolvimento full-stack com TypeScript
Fontes
Revisão em agosto de 2026. Créditos, caps e SKUs do Google Maps Platform mudam (ex. ajustes de 2025+) — o free tier legado de US$200 não deve ser assumido. Restrinja API keys e monitore billing no Console.
Google Maps JavaScript API · Maps — Billing March 2025 · @vis.gl/react-google-maps.
Perguntas frequentes
Como integrar Google Maps em React/Next.js com TypeScript?
Use @vis.gl/react-google-maps com APIProvider e um componente client ('use client'). A Maps JavaScript API não renderiza bem em SSR puro no App Router.
Funciona com App Router do Next.js?
Sim: isole o mapa num Client Component, exponha a key via NEXT_PUBLIC_ só se restringida por HTTP referrer, e evite importar o mapa em Server Components.
Quanto custa a Google Maps Platform?
Há crédito/quota e billing por SKU; a tabela mudou (caps/SKU desde 2025+). Não assuma o crédito legado US$200. Restrinja a key e monitore o Cloud Console.
Como adicionar markers e rotas?
Comece com Map + AdvancedMarker (Map ID quando exigido). Directions/Places são APIs extras — habilite no console e trate billing à parte.
Continue explorando: curso de Maps Scrapper · curso de Next.js · curso de React · Next.js 16: o que mudou · aplicação fullstack em 90 dias.