Pronto!

Para começar a desenvolver, acesse nossa documentação do desenvolvedor.

Ative a Google Maps Android API

Para começar, orientaremos você pelo Google Developers Console para realizar algumas atividades:

  1. Criar ou selecionar um projeto
  2. Ative a Google Maps Android API
  3. Criar chaves apropriadas
Continuar

Sobreposições de solo

A sobreposições de solo são sobreposições de imagem vinculadas a coordenadas de latitude/longitude. Portanto, elas se movem quando o mapa é arrastado ou seu zoom é alterado.

Exemplos de código

O repositório ApiDemos no GitHub inclui um exemplo que demonstra sobreposições de solo:

Introdução

Uma sobreposição de solo é uma imagem fixa em um mapa. Ao contrário dos [marcadores], as sobreposições de solo são orientadas em relação à superfície do planeta e não em relação à tela. Portanto, a rotação, inclinação ou alteração do zoom do mapa altera a orientação da imagem. As sobreposições de solo são úteis quando se quer fixar uma única imagem em uma área do mapa. Se você quiser adicionar imagens abrangentes que cobrem uma grande parte do mapa, considere uma sobreposição de blocos.

Adicionar uma sobreposição

Para adicionar uma GroundOverlay, crie um objeto GroundOverlayOptions que define uma imagem e uma posição. Opcionalmente, você pode especificar configurações adicionais que afetam o posicionamento da imagem no mapa. Após definir as opções necessárias, passe o objeto para o método GoogleMap.addGroundOverlay() para adicionar a imagem ao mapa. O método addGroundOverlay() retorna um objeto GroundOverlay. Retenha uma referência a esse objeto se você quiser modificá-lo posteriormente.

Observação: quando a imagem é adicionada ao mapa, é convertida em uma imagem com lados que são uma potência de dois. É possível evitar essa conversão usando uma imagem original com dimensões que são uma potência de dois — por exemplo, 128x512 ou 1024x1024.

Passo a passo:

  1. Instancie um novo objeto GroundOverlayOptions
  2. Especifique a imagem como um BitmapDescriptor.
  3. Defina a posição da imagem usando um dos métodos disponíveis:
    • position(LatLng location, float width, float height)
    • position(LatLng location, float width)
    • positionFromBounds(LatLngBounds bounds)
  4. Defina propriedades opcionais, como transparency, conforme a necessidade.
  5. Chame GoogleMap.addGroundOverlay() para adicionar a imagem ao mapa.

O exemplo a seguir mostra como adicionar uma sobreposição de solo a um objeto GoogleMap existente.

LatLng NEWARK = new LatLng(40.714086, -74.228697);

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
        .position(NEWARK, 8600f, 6500f);
map.addGroundOverlay(newarkMap);

Se você quiser alterar ou remover uma sobreposição de solo após adicioná-la ao mapa, não deixe de manter uma referência ao objeto GroundOverlay. A sobreposição poderá ser modificada posteriormente fazendo alterações nesse objeto.

LatLng NEWARK = new LatLng(40.714086, -74.228697);

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
        .position(NEWARK, 8600f, 6500f);

// Add an overlay to the map, retaining a handle to the GroundOverlay object.
GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);

Remover uma sobreposição

Você pode remover uma sobreposição de solo com o método GroundOverlay.remove().

imageOverlay.remove();

Alterar uma sobreposição

É possível alterar a imagem de sobreposição de solo após adicioná-la ao mapa usando o método GroundOverlay.setImage(BitmapDescriptor).

// Add an overlay, retaining a handle to the GroundOverlay object.
GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);

// Update the GroundOverlay with a new image of the same dimensions.
imageOverlay = map.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1975));

O método setImage() substitui a imagem existente por outra imagem com as mesmas dimensões.

Posicionar uma sobreposição de solo

Há duas formas de especificar a posição da sobreposição de solo:

  • Usando LatLng para centralizar a sobreposição e dimensões em metros para especificar o tamanho da imagem.
  • Usando LatLngBounds para especificar os cantos nordeste e sudoeste da imagem.

É necessário especificar a posição da sobreposição de solo antes de adicioná-la ao mapa.

Usar a localização para posicionar uma imagem

Ao adicionar uma imagem, você especifica um LatLng no qual a âncora será fixada e a extensão da sobreposição (em metros). Por padrão, a anchor é posicionada no centro da imagem. Opcionalmente, você pode informar a altura da sobreposição (em metros). Se não informada, a altura da sobreposição será calculada automaticamente para preservar as proporções da imagem.

O código a seguir coloca uma imagem na posição 40.714086, -74.228697 , com 8,6 km de largura por 6,5 km de altura. A imagem está ancorada no canto esquerdo inferior.

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
        .anchor(0, 1)
        .position(new LatLng(40.714086, -74.228697), 8600f, 6500f);

Usar LatLngBounds para posicionar uma imagem

Você informa uma LatLngBounds que contém a imagem. A LatLngBounds define os cantos nordeste e sudoeste da imagem. Quando a imagem é desenhada no mapa, ela é girada para encaixar nos limites. Se os limites não corresponderem à proporção da imagem original, a imagem será distorcida.

O código a seguir coloca uma imagem no mapa com o canto sudoeste vinculado a 40.712216,-74.22655 e o canto nordeste vinculado a 40.773941, -74.12544.

LatLngBounds newarkBounds = new LatLngBounds(
        new LatLng(40.712216, -74.22655),       // South west corner
        new LatLng(40.773941, -74.12544));      // North east corner
GroundOverlayOptions newarkMap = new GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
        .positionFromBounds(newarkBounds);

Lidar com eventos de sobreposição de solo

Por padrão, sobreposições de solo não são clicáveis. Você pode ativar e desativar a capacidade de receber cliques chamando GroundOverlay.setClickable(boolean).

Use um OnGroundOverlayClickListener para detectar eventos de clique em uma sobreposição de solo clicável. Para definir este detector no mapa, chame GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener). Quando um usuário clicar em uma sobreposição de solo, você receberá um retorno de chamada onGroundOverlayClick(GroundOverlay).

Enviar comentários sobre…

Google Maps Android API
Google Maps Android API
Precisa de ajuda? Acesse nossa página de suporte.