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

Выберите платформу: Android iOS JavaScript

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

Кроме того, по умолчанию на карте появляются организации, если тип карты – 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 и другие подробности вы можете найти в руководстве по скрытию на карте объектов инфраструктуры с помощью стилей.