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

<br />

This page shows how to programmatically access a dataset and style its features,
and walks through styling examples for data features based on point, polygon,
and polyline geometries.

Data-driven styling for datasets renders data features based on the provided latitude
and longitude coordinates from the geospatial data file used to create the
dataset.

## Point data styling example

This example shows an approach to styling point geometry based data features.

![A screenshot showing styled point data.](https://developers.google.com/static/maps/documentation/android-sdk/dds-datasets/images/fur-colors-android.png)

### About the dataset

The dataset used in this example is the result of a [2018 survey of
squirrels](https://data.cityofnewyork.us/Environment/2018-Squirrel-Census-Fur-Color-Map/fak5-wcft)
in Central Park, New York City. In the following excerpt from the CSV data file,
columns `x` and `y` are used for geography; a `LatLng` column is included, but
it's not used in this example because datasets only support the
[WKT format](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)
if the column is named `WKT`. For more information about the supported formats
for location, see
[CSV requirements](https://developers.google.com/maps/documentation/datasets/create.md.txt#dataset-csv-requirements).

The squirrel census dataset contains a nice variety of different data points
relating to the observed fur color and behavior of squirrels (be sure to scroll
horizontally to see it all).

| X | Y | UniqueSquirrelID | Hectare | Shift | Date | Hectare SquirrelNumber | Age | PrimaryFurColor | HighlightFurColor | CombinationofPrimaryandHighlightColor | Colornotes | Location | AboveGroundSighter Measurement | SpecificLocation | Running | Chasing | Climbing | Eating | Foraging | Other Activities | Kuks | Quaas | Moans | Tailflags | Tailtwitches | Approaches | Indifferent | Runsfrom | OtherInteractions | LatLng |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| -73.9561344937861 | 40.7940823884086 | 37F-PM-1014-03 | 37F | PM | 10142018 | 3 |   |   |   | + |   |   |   |   | false | false | false | false | false |   | false | false | false | false | false | false | false | false |   | POINT (-73.9561344937861 40.7940823884086) |
| -73.9688574691102 | 40.7837825208444 | 21B-AM-1019-04 | 21B | AM | 10192018 | 4 |   |   |   | + |   |   |   |   | false | false | false | false | false |   | false | false | false | false | false | false | false | false |   | POINT (-73.9688574691102 40.7837825208444) |
| -73.9742811484852 | 40.775533619083 | 11B-PM-1014-08 | 11B | PM | 10142018 | 8 |   | Gray |   | Gray+ |   | Above Ground | 10 |   | false | true | false | false | false |   | false | false | false | false | false | false | false | false |   | POINT (-73.97428114848522 40.775533619083) |
| -73.9596413903948 | 40.7903128889029 | 32E-PM-1017-14 | 32E | PM | 10172018 | 14 | Adult | Gray |   | Gray+ | Nothing selected as Primary. Gray selected as Highlights. Made executive adjustments. |   |   |   | false | false | false | true | true |   | false | false | false | false | false | false | false | true |   | POINT (-73.9596413903948 40.7903128889029) |
| -73.9702676472613 | 40.7762126854894 | 13E-AM-1017-05 | 13E | AM | 10172018 | 5 | Adult | Gray | Cinnamon | Gray+Cinnamon |   | Above Ground |   | on tree stump | false | false | false | false | true |   | false | false | false | false | false | false | false | false |   | POINT (-73.9702676472613 40.7762126854894) |
| -73.9683613516225 | 40.7725908847499 | 11H-AM-1010-03 | 11H | AM | 10102018 | 3 | Adult | Cinnamon | White | Cinnamon+White |   |   |   |   | false | false | false | false | true |   | false | false | false | false | true | false | true | false |   | POINT (-73.9683613516225 40.7725908847499) |
| -73.9541201789795 | 40.7931811701082 | 36H-AM-1010-02 | 36H | AM | 10102018 | 2 | Adult | Gray |   | Gray+ | just outside hectare | Ground Plane | FALSE |   | false | false | false | false | true |   | false | false | false | false | false | false | false | false |   | POINT (-73.9541201789795 40.7931811701082) |

### Style point data features

The code in this example takes the approach of styling the fill color and
stroke color for each point based on the `CombinationofPrimaryandHighlightColor`
attribute, which combines the primary and secondary fur colors for each
squirrel.

### Kotlin


```java
private fun styleDatasetsLayer() {

  // Create the style factory function.
  val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->

      // Set default colors to to yellow and point radius to 8.
      var fillColor = Color.YELLOW
      var strokeColor = Color.YELLOW
      var pointRadius = 8F
      // Check if the feature is an instance of DatasetFeature.
      if (feature is DatasetFeature) {

        val furColors: MutableMap<String, String> = feature.getDatasetAttributes()
        // Determine CombinationofPrimaryandHighlightColor attribute.
        val furColor = furColors!!["CombinationofPrimaryandHighlightColor"]
        when (furColor) {
          "Black+" -> {
            fillColor = Color.BLACK
            strokeColor= Color.BLACK
          }
          "Cinnamon+" ->  {
            fillColor = -0x750000
            strokeColor= -0x750000
          }
          "Cinnamon+Gray" -> {
            fillColor = -0x750000
            strokeColor= -0x750000
            pointRadius = 6F
          }
          "Cinnamon+White" -> {
            fillColor = -0x750000
            strokeColor= Color.WHITE
            pointRadius = 6F
          }
          "Gray+" -> fillColor = Color.GRAY
          "Gray+Cinnamon" -> {
            fillColor = Color.GRAY
            strokeColor= -0x750000
            pointRadius = 6F
          }
          "Gray+Cinnamon, White" -> {
            fillColor = Color.LTGRAY
            strokeColor= -0x750000
            pointRadius = 6F
          }
          "Gray+White" -> {
            fillColor = Color.GRAY
            strokeColor= Color.WHITE
            pointRadius = 6F
          }
        }
        return@StyleFactory FeatureStyle.Builder()
          .fillColor(fillColor)
          .strokeColor(strokeColor)
          .pointRadius(pointRadius)
          .build()
      }
    return@StyleFactory null
  }

  // Apply the style factory function to the feature layer.
  datasetLayer?.setFeatureStyle(styleFactory)
}
```

<br />

### Java


```java
private void styleDatasetsLayer() {

  // Create the style factory function.
  FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {

    // Check if the feature is an instance of DatasetFeature.
    if (feature instanceof DatasetFeature) {

      // Determine CombinationofPrimaryandHighlightColor attribute.
      Map<String, String> furColors = ((DatasetFeature) feature).getDatasetAttributes();
      String furColor = furColors.get("CombinationofPrimaryandHighlightColor");
      // Set default colors to to yellow and point radius to 8.
      int fillColor = Color.YELLOW;
      int strokeColor = Color.YELLOW;
      int pointRadius = 8;
      switch (furColor) {
        case "Black+":
          fillColor = Color.BLACK;
          strokeColor = Color.BLACK;
          break;
        case "Cinnamon+":
          fillColor = 0xff8b0000;
          strokeColor = 0xff8b0000;
          break;
        case "Cinnamon+Gray":
          fillColor = 0xff8b0000;
          strokeColor = Color.GRAY;
          pointRadius = 6;
          break;
        case "Cinnamon+White":
          fillColor = 0xff8b0000;
          strokeColor = Color.WHITE;
          pointRadius = 6;
          break;
        case "Gray+":
          fillColor = Color.GRAY;
          strokeColor = Color.GRAY;
          break;
        case "Gray+Cinnamon":
          fillColor = Color.GRAY;
          strokeColor = 0xff8b0000;
          pointRadius = 6;
          break;
        case "Gray+Cinnamon, White":
          fillColor = Color.LTGRAY;
          strokeColor = 0xff8b0000;
          pointRadius = 6;
          break;
        case "Gray+White":
          fillColor = Color.GRAY;
          strokeColor = Color.WHITE;
          pointRadius = 6;
          break;
        default:
          fillColor = Color.YELLOW;
          strokeColor = Color.YELLOW;
          pointRadius = 8;
      }
      return new FeatureStyle.Builder()
        .fillColor(fillColor)
        .strokeColor(strokeColor)
        .pointRadius(pointRadius)
        .build();
    }
    return null;
  };

  // Apply the style factory function to the feature layer.
  datasetLayer.setFeatureStyle(styleFactory);
}
```

<br />

## Polygon data styling example

This example shows an approach to styling polygon geometry based data features.

![A screenshot showing styled polygon data.](https://developers.google.com/static/maps/documentation/javascript/dds-datasets/images/polygon_data.png)

### About the dataset

The dataset used in this example depicts [parks in New York City](https://data.cityofnewyork.us/Recreation/Parks-Properties/enfh-gkve).
The following excerpt from the dataset GeoJSON file shows a representative
feature entry.

```json
{
  "type": "Feature",
  "properties": {
    "jurisdiction": "DPR",
    "mapped": "False",
    "zipcode": "11356",
    "acres": "0.05",
    "location": "College Pl., College Pt. Blvd., bet. 11 Ave. and 12 Ave.",
    "nys_assembly": "27",
    "councildistrict": "19",
    "url": "http://www.nycgovparks.org/parks/Q042/",
    "typecategory": "Triangle/Plaza",
    "us_congress": "14",
    "eapply": "Poppenhusen Park",
    "parentid": "Q-07",
    "gispropnum": "Q042",
    "retired": "false",
    "communityboard": "407",
    "objectid": "6248",
    "globalid": "F4810079-CBB9-4BE7-BBFA-B3C0C35D5DE5",
    "name311": "Poppenhusen Park",
    "department": "Q-07",
    "pip_ratable": "true",
    "subcategory": "Sitting Area/Triangle/Mall",
    "precinct": "109",
    "permit": "true",
    "acquisitiondate": null,
    "omppropid": "Q042",
    "gisobjid": "100000301",
    "signname": "Poppenhusen Park",
    "address": null,
    "permitparent": "Q-07",
    "class": "PARK",
    "nys_senate": "11",
    "permitdistrict": "Q-07",
    "borough": "Q",
    "waterfront": "false"
  },
  "geometry": {
    "type": "MultiPolygon",
    "coordinates": [
      [
        [
          [
            -73.84575702371716,
            40.78796240884273
          ],
          [
            -73.84593393292693,
            40.78796857347548
          ],
          [
            -73.84577256469657,
            40.787651355629556
          ],
          [
            -73.84575702371716,
            40.78796240884273
          ]
        ]
      ]
    ]
  }
},
```

### Style polygon data features

The code in this example applies special coloring to data features associated
with a `typecategory` of "Undeveloped" or "Parkway", and colors all other
features green.

### Kotlin


```java
private fun styleDatasetsLayer() {

    // Create the style factory function.
    val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->

        // Check if the feature is an instance of DatasetFeature.
        if (feature is DatasetFeature) {
          // Determine the value of the typecategory attribute.
          val typeCategories: MutableMap<String, String> = feature.getDatasetAttributes()
          val typeCategory = typeCategories!!["typecategory"]
          // Set default colors to green.
          var fillColor = 0x4000ff00
          var strokeColor = 0xff00ff00
          when (typeCategory) {
            "Undeveloped" -> {
              // Color undeveloped areas blue.
              fillColor = 0x400000ff
              strokeColor = 0x400000ff
            }
            "Parkway" -> {
              // Color parkway areas red.
              fillColor = 0x40ff0000
              strokeColor = 0x40ff0000
            }
            else -> {
              // Color all other areas green.
              fillColor = 0x4000ff00
              strokeColor = 0xff00ff00
            }
          }
          return@StyleFactory FeatureStyle.Builder()
            .fillColor(fillColor)
            .strokeColor(strokeColor)
            .strokeWidth(2F)
            .build()
        }
        return@StyleFactory null
    }

    // Apply the style factory function to the feature layer.
    datasetLayer?.setFeatureStyle(styleFactory)
}
```

<br />

### Java


```java
private void styleDatasetsLayer() {

    // Create the style factory function.
    FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {

      // Check if the feature is an instance of DatasetFeature.
      if (feature instanceof DatasetFeature) {

        // Determine the value of the typecategory attribute.
        Map<String, String> typeCategories = ((DatasetFeature) feature).getDatasetAttributes();
        String typeCategory = typeCategories.get("typecategory");
        // Set default colors to green.
        int fillColor = 0x4000ff00;
        int strokeColor = 0xff00ff00;
        switch (typeCategory) {
          case "Undeveloped":
            // Color undeveloped areas blue.
            fillColor = 0x400000ff;
            strokeColor = 0xff0000ff;
            break;
          case "Parkway":
            // Color parkway areas red.
            fillColor = 0x40ff0000;
            strokeColor = 0xffff0000;
            break;
          default:
            // Color all other areas green.
            fillColor = 0x4000ff00;
            strokeColor = 0xff00ff00;
        }
        return new FeatureStyle.Builder()
          .fillColor(fillColor)
          .strokeColor(strokeColor)
          .strokeWidth(2)
          .build();
      }
      return null;
    };

    // Apply the style factory function to the feature layer.
    datasetLayer.setFeatureStyle(styleFactory);
}
```

<br />

## Polyline data styling example

This example shows an approach to styling polyline geometry based data features.

![A screenshot showing styled polyline data.](https://developers.google.com/static/maps/documentation/javascript/dds-datasets/images/polyline_data.png)

### About the dataset

The dataset used in this example shows
[bridges in the Seattle area](https://data-seattlecitygis.opendata.arcgis.com/datasets/9db5967e01224efcafbfbb64b06ff68f_0/explore?location=47.642165,-122.245150,12.64).
The following excerpt from the dataset GeoJSON file shows a representative
feature entry.

```json
{
  "type": "Feature",
  "properties": {
      "OBJECTID": 1,
      "COMPTYPE": 66,
      "COMPKEY": 515774,
      "HANSEGKEY": 489781,
      "UNITID": "BRG-935",
      "UNITTYPE": " ",
      "BRGUNITID": "BRG-935",
      "UNITDESC_BRG": "YALE AVE BR REV LANE OC                                                                                                                                                                                                                                        ",
      "UNITDESC_SEG": "HOWELL ST ON RP BETWEEN HOWELL ST AND I5 SB                                                                                                                                                                                                                    ",
      "INSTDATE": null,
      "EXPDATE": null,
      "STATUS": " ",
      "STATUSDT": null,
      "CONDITION": " ",
      "CONDDT": null,
      "OWN": " ",
      "LSTVERIFY": null,
      "MAINTBY": " ",
      "ADDBY": "GARCIAA",
      "ADDDTTM": "2010-01-21T00:00:00Z",
      "MODBY": null,
      "MODDTTM": null,
      "BR_NBR": 935,
      "BR_CODE": " 935",
      "BR_TYPE": "ST",
      "BR_NAME": "YALE AVE BR REV LANE OC",
      "BR_FACILITIES": "YALE AVE-SR 5 ON RAMP",
      "BR_FEATURES": "SR 5 REV LANE",
      "BR_RATING": 0,
      "BR_INSET": 1,
      "BR_GEO": "DT",
      "BR_OWNER": "DOT",
      "BR_OWNER_NAME": "State of Washington",
      "GEOBASID": 0,
      "XGEOBASID": 0,
      "GISSEGKEY": 489781,
      "EARTHQUAKE_RESPONSE_TEAM": " ",
      "SHAPE_Length": 220.11891836147655
  },
  "geometry": {
      "type": "LineString",
      "coordinates": [
          [
              -122.329201929090928,
              47.616910448708538
          ],
          [
              -122.329206483407461,
              47.616976719821004
          ],
          [
              -122.32921802149356,
              47.617042137515213
          ],
          [
              -122.329236413912909,
              47.617105967923777
          ],
          [
              -122.329261454336034,
              47.617167494985758
          ],
          [
              -122.329292861855023,
              47.617226028479571
          ],
          [
              -122.329330284134699,
              47.617280911766009
          ],
          [
              -122.329373301365223,
              47.617331529154569
          ],
          [
              -122.329421430971635,
              47.617377312810319
          ],
          [
              -122.329474133027375,
              47.617417749124023
          ],
          [
              -122.32953081631139,
              47.617452384473893
          ]
      ]
  }
},
```

### Style polyline data features

The following snippet applies the same style to directly to all data features.

### Kotlin


```java
private fun styleDatasetsLayer() {

  // Create the style factory function.
  val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->

    // Check if the feature is an instance of DatasetFeature.
    if (feature is DatasetFeature) {

      return@StyleFactory FeatureStyle.Builder()
        // Define a style with green stroke with a width of 4.
        .strokeColor(0xff00ff00.toInt())
        .strokeWidth(4F)
        .build()
    }
    return@StyleFactory null
  }

  // Apply the style factory function to the feature layer.
  datasetLayer?.setFeatureStyle(styleFactory)
}
```

<br />

### Java


```java
private void styleDatasetsLayer() {

  // Create the style factory function.
  FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {

    // Check if the feature is an instance of DatasetFeature.
    if (feature instanceof DatasetFeature) {

      return new FeatureStyle.Builder()
        // Define a style with green stroke with a width of 4.
        .strokeColor(0xff00ff00)
        .strokeWidth(4)
        .build();
    }
    return null;
  };

  // Apply the style factory function to the feature layer.
  datasetLayer.setFeatureStyle(styleFactory);
}
```

<br />