Select platform: [Android](https://developers.google.com/maps/documentation/android-sdk/dds-boundaries/start.md.txt "View this page for the Android platform docs.") [iOS](https://developers.google.com/maps/documentation/ios-sdk/dds-boundaries/start.md.txt "View this page for the iOS platform docs.") [JavaScript](https://developers.google.com/maps/documentation/javascript/dds-boundaries/start.md.txt "View this page for the JavaScript platform docs.")

<br />

Follow these steps to get set up with data-driven styling for boundaries.

## Enable the new maps renderer

An upgraded map renderer is available as of version 18.0.0 of the
Maps SDK for Android. This renderer brings many improvements, including
support for Cloud-based maps styling, to Maps SDK for Android.

With the release of version 18.2.0 of the Maps SDK for Android, Google switched the
default renderer from the legacy renderer to the upgraded map renderer. This
change means that the upgraded map renderer is now used by default in your app
when you build a new app or rebuild an existing app.

> [!CAUTION]
> **Caution:** To use data-driven styling for boundaries in your app, your app must be built using the upgraded map renderer. If you are adding data-driven styling for boundaries to an existing app, ensure that you rebuild the app so that your app uses the upgraded map renderer. For more information, see [New Map Renderer](https://developers.google.com/maps/documentation/android-sdk/renderer.md.txt).

## Create a map ID

To create a new map ID, follow the steps at
[Create a map ID](https://developers.google.com/maps/documentation/get-map-id#create-a-map-id). Make sure you
set the Map type to **Android**.

## Create a new map style

To create a new map style, follow the instructions in [Manage map styles](https://developers.google.com/maps/documentation/android-sdk/cloud-customization/map-styles.md.txt)
to create the style, and [associate the style with the map ID you just created](https://developers.google.com/maps/documentation/android-sdk/cloud-customization/map-styles.md.txt#associate-style-with-map-id).

> [!WARNING]
> **Experimental:** This feature can only be set for light map styles. When you link a light map style that has this feature enabled to a [map
> ID](https://developers.google.com/maps/documentation/android-sdk/map-ids/mapid-over), the enabled layers are also available for the dark map style.

### Select the feature layers in your new map style

In the Google API Console you can select which feature layers to display for
your new map style. The feature layer determines which kinds of boundaries
appear on the map (for example localities, states, and so on).

> [!IMPORTANT]
> **Important:** For optimal performance, only select the layers you need.

1. In the Google API Console, [go to the Map Styles page](https://console.cloud.google.com/project/_/google/maps-apis/studio/styles).
2. Select a project if prompted.
3. Select a map style.
4. Click the **Feature layers** drop-down to add or remove layers.
5. Click **Save** to save your changes and make them available to your maps.

![A screenshot showing the drop-down.](https://developers.google.com/static/maps/documentation/android-sdk/images/feature_layer_dropdown.png)

## Update your map initialization code

This step requires the map ID you just created. It can be found on your
[Maps Management](https://console.cloud.google.com/google/maps-apis/studio/maps) page.

To add the map ID to your initialization code, see
[Add the map ID to your app](https://developers.google.com/maps/documentation/get-map-id#add-a-map-id-to-your-app).

## Get access to a feature layer of a map

You use a [`FeatureLayer`](https://developers.google.com/android/reference/com/google/android/gms/maps/model/FeatureLayer.md.txt)
object to represent each feature layer of a map, such as a Postal Code or
Locality feature layer. To get access to a feature layer object, call
[`GoogleMap.getFeatureLayer()`](https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.md.txt#getFeatureLayer(com.google.android.gms.maps.model.FeatureLayerOptions))
when the map initializes:

### Java


```javascript
private FeatureLayer postalCodeLayer;

@Override
public void onMapReady(GoogleMap map) {
  // Get the POSTAL_CODE feature layer.
  postalCodeLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder()
    .featureType(FeatureType.POSTAL_CODE)
    .build());
  ...
}
```

<br />

### Kotlin


```java
private var postalCodeLayer: FeatureLayer? = null

override fun onMapReady(googleMap: GoogleMap) {
  // Get the POSTAL_CODE feature layer.
  postalCodeLayer = googleMap.getFeatureLayer(new FeatureLayerOptions.Builder()
    .featureType(FeatureType.POSTAL_CODE)
    .build())
  ...
}
```

<br />

Pass a [`FeatureLayerOptions`](https://developers.google.com/android/reference/com/google/android/gms/maps/model/FeatureLayerOptions.md.txt)
object to `getFeatureLayer()` to specify the type of the feature layer. In this
example, you want to access the `POSTAL_CODE` layer. Create a different
`FeatureLayer` object for each layer that you want to style.

Once you have the `FeatureLayer` object, you can apply styling to the
boundary polygons in that feature.

> [!NOTE]
> **Note:** If a `FeatureLayer` of the specified type does not exist for the map, or if data-driven styling for boundaries is not enabled because you have not specified the map ID, this call returns but logs an error. Use the [`FeatureLayer.isAvailable()`](https://developers.google.com/android/reference/com/google/android/gms/maps/model/FeatureLayer.md.txt#isAvailable()) method to determine if a `FeatureLayer` is available.

## Check map capabilities (required)

Data-driven styling for boundaries requires a map ID. If the map ID is missing, or an
invalid map ID is passed, data-driven styling for boundaries cannot load. As a
troubleshooting step, you can use
[`MapCapabilities`](https://developers.google.com/android/reference/com/google/android/gms/maps/model/MapCapabilities.md.txt)
to check if data-driven styling for boundaries is supported.

> [!CAUTION]
> **Caution:** Some devices might not support the new map renderer and therefore cannot display data-driven styling for boundaries. You must use `MapCapabilities` to check for support at runtime. If data-driven styling for boundaries is not supported, define a fallback option. For device requirements for the new map renderer, see [Supported
> devices](https://developers.google.com/maps/documentation/android-sdk/renderer#supported-devices).

### Kotlin


```java
val capabilities: MapCapabilities = googleMap.getMapCapabilities()
System.out.println("Data-driven Styling is available: " + capabilities.isDataDrivenStylingAvailable())
```

<br />

### Java


```java
MapCapabilities capabilities = googleMap.getMapCapabilities();
System.out.println("Data-driven Styling is available: " + capabilities.isDataDrivenStylingAvailable());
```

<br />