Организации и другие объекты на карте

По умолчанию объекты отображаются на базовой карте вместе с соответствующими им значками. К объектам относятся парки, школы, правительственные здания и прочее.

Кроме того, по умолчанию на карте появляются организации, если тип карты – normal. Организации – это магазины, рестораны, гостиницы и т. п. Организации на схемах (планах) зданий отображаются только в упрощенном режиме.

Каждому объекту соответствует Place ID (идентификатор места) согласно определению в Places SDK для Android. Например, парки отдыха относятся к объектам, а фонтаны, как правило, нет (кроме случаев, когда они имеют национальное или историческое значение).

Отслеживание событий кликов для объектов

Если вы хотите, чтобы приложение реагировало, когда пользователь касается объекта, используйте прослушиватель OnPoiClickListener, как показано в примере ниже.

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()
    }
}
      

Объекты показываются на карте по умолчанию, но не существует стандартного элемента интерфейса, отображаемого при нажатии на них. Поэтому API не отображает автоматически информационное окно или какой-либо иной элемент интерфейса, когда пользователь касается объекта.

Как показано в примере выше, на карте устанавливается прослушиватель OnPoiClickListener путем вызова метода GoogleMap.setOnPoiClickListener(OnPoiClickListener). Когда пользователь нажимает на объект (касается его), ваше приложение получает событие OnPoiClick(PointOfInterest), которое указывает на этот объект. Объект PointOfInterest содержит координаты широты и долготы, идентификатор места и название объекта на карте.

Отключение отображения объектов на карте

Скрыть объекты можно, применив настраиваемые стили ко всем ним или только к определенным категориям.

Следующая декларация стиля JSON скрывает все организации на карте:

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

Еще один пример. Этот код JSON упрощает отображение всех категорий объектов:

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

Код Java и другие подробности вы можете найти в руководстве по скрытию объектов на карте с помощью стилей.