By default, points of interest (POIs) appear on the base map along with their
corresponding icons. POIs include parks, schools, government buildings, and
more.
In addition, business POIs appear by default on the map when the map type is
normal. Business POIs represent businesses such as shops, restaurants, hotels,
and more. Business POIs on indoor maps (floor plans) appear only on a
lite mode map.
A POI corresponds to a Place ID, as defined in the
Places SDK for Android. For example, recreational parks are POIs, but
things like water fountains are generally not POIs (unless they're of national
or historic significance).
Listen for click events on POIs
If you want to respond to a user tapping on a POI, you can use an
OnPoiClickListener as shown in the following code
sample:
Kotlin
internalclassOnPoiClickDemoActivity:AppCompatActivity(),OnMapReadyCallback,OnPoiClickListener{overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.poi_click_demo)valmapFragment=supportFragmentManager.findFragmentById(R.id.map)asSupportMapFragmentmapFragment.getMapAsync(this)}overridefunonMapReady(map:GoogleMap){map.setOnPoiClickListener(this)}overridefunonPoiClick(poi:PointOfInterest){Toast.makeText(this,"""Clicked: ${poi.name} Place ID:${poi.placeId} Latitude:${poi.latLng.latitude} Longitude:${poi.latLng.longitude}""",Toast.LENGTH_SHORT).show()}}
POIs appear on the map by default, but there is no default on-click UI. That is,
the API does not automatically display an info window or any other user
interface when the user taps a POI.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-28 UTC."],[[["\u003cp\u003ePoints of Interest (POIs) such as parks, schools, and businesses, are displayed on the map by default with corresponding icons.\u003c/p\u003e\n"],["\u003cp\u003eDevelopers can listen for click events on POIs and respond to user interactions using the \u003ccode\u003eOnPoiClickListener\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eAlthough POIs are displayed by default, there is no default on-click UI, meaning developers need to implement their own info windows or other UI elements.\u003c/p\u003e\n"],["\u003cp\u003eThe display of POIs can be customized or hidden altogether using JSON style declarations to control their visibility and appearance.\u003c/p\u003e\n"]]],["Points of interest (POIs), including parks, schools, and businesses, appear by default on maps. To handle user taps on POIs, use `OnPoiClickListener` and set it via `GoogleMap.setOnPoiClickListener`. This triggers an `OnPoiClick` event, providing the POI's name, place ID, and coordinates. You can also hide POIs using custom JSON styling by setting the `visibility` to `off` for business POIs for instance or `simplified` for all POIs.\n"],null,["Select platform: [Android](/maps/documentation/android-sdk/poi \"View this page for the Android platform docs.\") [iOS](/maps/documentation/ios-sdk/poi \"View this page for the iOS platform docs.\") [JavaScript](/maps/documentation/javascript/examples/event-poi \"View this page for the JavaScript platform docs.\")\n\n\u003cbr /\u003e\n\nBy default, points of interest (POIs) appear on the base map along with their\ncorresponding icons. POIs include parks, schools, government buildings, and\nmore.\n\nIn addition, *business* POIs appear by default on the map when the map type is\n`normal`. Business POIs represent businesses such as shops, restaurants, hotels,\nand more. Business POIs on [indoor maps (floor plans)](/maps/documentation/android-sdk/map#indoor) appear only on a\n[lite mode](/maps/documentation/android-sdk/lite) map.\n\nA POI corresponds to a [Place ID](/maps/documentation/places/android-sdk/place-id), as defined in the\nPlaces SDK for Android. For example, recreational parks are POIs, but\nthings like water fountains are generally not POIs (unless they're of national\nor historic significance).\n\nListen for click events on POIs\n\nIf you want to respond to a user tapping on a POI, you can use an\n[`OnPoiClickListener`](/android/reference/com/google/android/gms/maps/GoogleMap.OnPoiClickListener) as shown in the following code\nsample:\n\n\nKotlin \n\n```kotlin\ninternal class OnPoiClickDemoActivity : AppCompatActivity(), OnMapReadyCallback, OnPoiClickListener {\n\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n setContentView(R.layout.poi_click_demo)\n val mapFragment = supportFragmentManager.findFragmentById(R.id.map)\n as SupportMapFragment\n mapFragment.getMapAsync(this)\n }\n\n override fun onMapReady(map: GoogleMap) {\n map.setOnPoiClickListener(this)\n }\n\n override fun onPoiClick(poi: PointOfInterest) {\n Toast.makeText(this, \"\"\"Clicked: ${poi.name}\n Place ID:${poi.placeId}\n Latitude:${poi.latLng.latitude} Longitude:${poi.latLng.longitude}\"\"\",\n Toast.LENGTH_SHORT\n ).show()\n }\n}\n\n \n```\n\nJava \n\n```java\nclass OnPoiClickDemoActivity extends AppCompatActivity implements\n OnMapReadyCallback, GoogleMap.OnPoiClickListener {\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.poi_click_demo);\n SupportMapFragment mapFragment;\n mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);\n mapFragment.getMapAsync(this);\n }\n\n @Override\n public void onMapReady(GoogleMap map) {\n map.setOnPoiClickListener(this);\n }\n\n @Override\n public void onPoiClick(PointOfInterest poi) {\n Toast.makeText(this, \"Clicked: \" +\n poi.name + \"\\nPlace ID:\" + poi.placeId +\n \"\\nLatitude:\" + poi.latLng.latitude +\n \" Longitude:\" + poi.latLng.longitude,\n Toast.LENGTH_SHORT).show();\n }\n}\n\n \n```\n\n\u003cbr /\u003e\n\nPOIs appear on the map by default, but there is no default on-click UI. That is,\nthe API does not automatically display an info window or any other user\ninterface when the user taps a POI.\n\nAs the above sample shows, you set the\n[`OnPoiClickListener`](/android/reference/com/google/android/gms/maps/GoogleMap.OnPoiClickListener) on the map by\ncalling\n[`GoogleMap.setOnPoiClickListener(OnPoiClickListener)`](/android/reference/com/google/android/gms/maps/GoogleMap#setOnPoiClickListener(com.google.android.gms.maps.GoogleMap.OnPoiClickListener)).\nWhen a user clicks (taps) on a POI, your app receives an\n[`OnPoiClick(PointOfInterest)`](/android/reference/com/google/android/gms/maps/GoogleMap.OnPoiClickListener#onPoiClick(com.google.android.gms.maps.model.PointOfInterest)) event\nindicating the point of interest (POI) that the user clicked. The\n[`PointOfInterest`](/android/reference/com/google/android/gms/maps/model/PointOfInterest) contains the latitude/longitude coordinates,\nplace ID and name of the point of interest.\n\nStop POIs from showing on the map\n\nYou can hide points of interest (POIs) by applying custom styles to all POIs or\nto specific categories of POIs.\n\nThe following JSON style declaration hides all business POIs on the map: \n\n [\n {\n \"featureType\": \"poi.business\",\n \"stylers\": [\n { \"visibility\": \"off\" }\n ]\n }\n ]\n\nAs another example, the following JSON simplifies the display of all categories\nof POIs: \n\n [\n {\n \"featureType\": \"poi\",\n \"stylers\": [\n { \"visibility\": \"simplified\" }\n ]\n }\n ]\n\nFor Java code and other details, see the guide to\n[hiding map features with styling](/maps/documentation/android-sdk/hiding-features)."]]