Pontos de interesse de empresas e de outros tipos

Por padrão, os pontos de interesse (PDIs) aparecem no mapa básico com os respectivos ícones. Esses pontos incluem parques, escolas, edifícios governamentais e muito mais.

Além disso, os PDIs de empresas são exibidos por padrão no mapa quando o tipo dele é normal. Esses pontos representam empresas como lojas, restaurantes, hotéis e outros lugares. Os PDIs de empresas em mapas internos (plantas baixas) só aparecem no Modo Lite.

Um PDI corresponde a um ID de lugar, conforme definido no SDK do Places para Android. Por exemplo, parques são pontos de interesse, mas locais como fontes de água geralmente não são, a menos que tenham relevância nacional ou histórica.

Detectar eventos de clique em PDIs

Se você quiser responder a um clique em um PDI, utilize um objeto OnPoiClickListener, conforme o exemplo de código a seguir:

Java

class OnPoiClickDemoActivity extends AppCompatActivity implements
    OnMapReadyCallback, GoogleMap.OnPoiClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.poi_click_demo);
        SupportMapFragment mapFragment;
        mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        map.setOnPoiClickListener(this);
    }

    @Override
    public void onPoiClick(PointOfInterest poi) {
        Toast.makeText(this, "Clicked: " +
                poi.name + "\nPlace ID:" + poi.placeId +
                "\nLatitude:" + poi.latLng.latitude +
                " Longitude:" + poi.latLng.longitude,
            Toast.LENGTH_SHORT).show();
    }
}
      

Kotlin

internal class OnPoiClickDemoActivity : AppCompatActivity(), OnMapReadyCallback, OnPoiClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.poi_click_demo)
        val mapFragment = supportFragmentManager.findFragmentById(R.id.map)
                as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    override fun onMapReady(map: GoogleMap) {
        map.setOnPoiClickListener(this)
    }

    override fun onPoiClick(poi: PointOfInterest) {
        Toast.makeText(this, """Clicked: ${poi.name}
            Place ID:${poi.placeId}
            Latitude:${poi.latLng.latitude} Longitude:${poi.latLng.longitude}""",
            Toast.LENGTH_SHORT
        ).show()
    }
}
      

Os PDIs aparecem no mapa, mas não há IU padrão ao clicar. Ou seja, a API não exibe automaticamente uma janela de informações ou outra interface do usuário quando alguém toca em um ponto de interesse.

Conforme o exemplo acima, defina OnPoiClickListener no mapa chamando GoogleMap.setOnPoiClickListener(OnPoiClickListener). Quando um usuário clica (toca) em um PDI, seu app recebe um evento OnPoiClick(PointOfInterest) indicando o ponto de interesse clicado. O objeto PointOfInterest contém as coordenadas de latitude/longitude, o ID do lugar e o nome do ponto de interesse.

Impedir que os PDIs sejam exibidos no mapa

Para ocultar pontos de interesse, aplique estilos personalizados a todos os PDIs ou a categorias específicas deles.

A seguinte declaração de estilo JSON oculta todos os PDIs de empresas no mapa:

[
  {
    "featureType": "poi.business",
    "stylers": [
      { "visibility": "off" }
    ]
  }
]

Em outro exemplo, o JSON abaixo simplifica a exibição de todas as categorias de PDIs:

[
  {
    "featureType": "poi",
    "stylers": [
      { "visibility": "simplified" }
    ]
  }
]

Para ver o código Java e outros detalhes, consulte o guia sobre como ocultar elementos do mapa com estilos.