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

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

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

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

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

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

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

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

      

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

      

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

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

Как отключить показ объектов инфраструктуры на карте

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

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

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

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

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

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