Managing markers, labels, and POI collisions

This page shows you how to manage collisions between markers that you add to your map and default labels, such as points of interest (POIs) or street names.

Before you begin

To manage marker and label collisions, you must be using a vector map. If you're using lite mode, a bitmap image of a map, you can't manage marker and label collisions.

Specifying marker priorities

Use the Marker.CollisionBehavior property to specify priority on a marker.

Use one of the following values:

  • REQUIRED - Default. Requires display of a marker that overlaps with other markers, labels, and POIs.
  • OPTIONAL_AND_HIDES_LOWER_PRIORITY - Indicates that the marker may be replaced or overlapped by a required marker, or replaced by an OPTIONAL_AND_HIDES_LOWER_PRIORITY marker with higher priority. Use zIndex to help determine relative priority between OPTIONAL_AND_HIDES_LOWER_PRIORITY markers. A higher zIndex value indicates higher priority.
  • REQUIRED_AND_HIDES_OPTIONAL - Requires display of a marker while hiding any OPTIONAL_AND_HIDES_LOWER_PRIORITY markers, labels, or POIs that overlap with the marker. The marker may overlap with other required markers.

The following code example shows setting CollisionBehavior for a new marker:

Java

Marker marker = map.addMarker(
    new MarkerOptions()
        .position(new LatLng(10, 10))
        .zIndex(10) // Optional.
        .collisionBehavior(Marker.CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY));
      

Kotlin

val marker = map.addMarker(
    MarkerOptions()
        .position(LatLng(10.0, 10.0))
        .zIndex(10f) // Optional.
        .collisionBehavior(Marker.CollisionBehavior.OPTIONAL_AND_HIDES_LOWER_PRIORITY)
)