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