Display a custom basemap style

Learn how to access and display a styled vector basemap layer in a map.

A styled basemap layer is a set of styles that you define to override one of the default basemap styles service vector tile layer styles. These are used to create and display a map or scene with your own custom styles, labels, and colors. To create a styled basemap layer, you can use the ArcGIS Vector Tile Style Editor. The editor stores your styles in ArcGIS as a layer item with an item ID.

In this tutorial, you will use an item ID to access and display a styled vector tile layer (Forest and Parks Canvas) in a map. You also add an image tile layer (World Hillshade) to enhance the visualization. Both layers are hosted in ArcGIS Online.

Prerequisites

Steps

Create a new pen

  1. To get started, either complete the Display a map tutorial or .

Get an access token

You need an access token with the correct privileges to access the location services used in this tutorial.

  1. Go to the Create an API key tutorial and create an API key with the following privilege(s):
    • Privileges
      • Location services > Basemaps
  2. In CodePen, set esriConfig.apiKey to your access token.
    Use dark colors for code blocks
    1
    2
    3
    4
    5
    6
    7
    8
    9
      var esriConfig = {
        apiKey: "YOUR_ACCESS_TOKEN"
      };
    

To learn about other ways to get an access token, go to Types of authentication.

Add modules

  1. In a new <script> at the bottom of the <body>, add the Basemap, VectorTileLayer, and TileLayer modules.

    Expand
    Use dark colors for code blocks
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
        <script>
    
          require(["esri/Basemap", "esri/layers/TileLayer", "esri/layers/VectorTileLayer"], (
            Basemap,
            TileLayer,
            VectorTileLayer
          ) => {
    
          });
    
        </script>
    
    Expand

Create a vector tile layer

You can access a basemap layer by referencing its item ID. You can find a layer's item ID by accessing it with ArcGIS Online or the ArcGIS Vector Tile Style Editor.

  1. Go to the Forest and Parks Canvas vector tile layer in ArcGIS Online and find its item ID. The ID is at the end of the URL.

  2. In CodePen, create a new VectorTileLayer object and set its portalItem id property to d2ff12395aeb45998c1b154e25d680e5 and the opacity property to 0.75.

    Expand
    Use dark colors for code blocks
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
          require(["esri/Basemap", "esri/layers/TileLayer", "esri/layers/VectorTileLayer"], (
            Basemap,
            TileLayer,
            VectorTileLayer
          ) => {
    
            const vectorTileLayer = new VectorTileLayer({
              portalItem: {
                id: "6976148c11bd497d8624206f9ee03e30" // Forest and Parks Canvas
              },
              opacity: 0.75
            });
    
          });
    
    Expand

Create an image tile layer

Use ArcGIS Online to find the item ID for the World Hillshade image tile layer and then use it to access the layer. The image tile layer will be used to visually enhance the styles with terrain.

  1. Go to the World Hillshade image tile layer in ArcGIS and find its item ID. The ID is at the end of the URL.

  2. In CodePen, create a new TileLayer and set its portalItem id property to 1b243539f4514b6ba35e7d995890db1d.

    Expand
    Use dark colors for code blocks
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
            const vectorTileLayer = new VectorTileLayer({
              portalItem: {
                id: "6976148c11bd497d8624206f9ee03e30" // Forest and Parks Canvas
              },
              opacity: 0.75
            });
    
            const hillshadeTileLayer = new TileLayer({
              portalItem: {
                id: "1b243539f4514b6ba35e7d995890db1d" // World Hillshade
              }
            });
    
    
    Expand

Add the basemap layers

Basemaps can contain multiple baseLayers. Use the Basemap class to add the vectorTileLayerand hillshadeTileLayer created above. These layers will create the underlying style for the map. The vector tile layer provides the base colors and the image tile layer provides the hillshade or topographic effect.

  1. In the main function, create a Basemap object and add vectorTileLayer and the hillshadeTileLayer to the baseLayers array.

    Expand
    Use dark colors for code blocks
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
            const vectorTileLayer = new VectorTileLayer({
              portalItem: {
                id: "6976148c11bd497d8624206f9ee03e30" // Forest and Parks Canvas
              },
              opacity: 0.75
            });
    
            const hillshadeTileLayer = new TileLayer({
              portalItem: {
                id: "1b243539f4514b6ba35e7d995890db1d" // World Hillshade
              }
            });
    
            const basemap = new Basemap({
              baseLayers: [hillshadeTileLayer, vectorTileLayer]
            });
    
    
    Expand
  2. Update the map's basemap property to use the basemap object created earlier.

    Expand
    Use dark colors for code blocks
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
            const vectorTileLayer = new VectorTileLayer({
              portalItem: {
                id: "6976148c11bd497d8624206f9ee03e30" // Forest and Parks Canvas
              },
              opacity: 0.75
            });
    
            const hillshadeTileLayer = new TileLayer({
              portalItem: {
                id: "1b243539f4514b6ba35e7d995890db1d" // World Hillshade
              }
            });
    
            const basemap = new Basemap({
              baseLayers: [hillshadeTileLayer, vectorTileLayer]
            });
    
            const arcgisMap = document.querySelector("arcgis-map");
            arcgisMap.basemap = basemap;
    
    
    Expand

Update the map position

  1. Update the center and zoom properties to zoom the display to North America.

    Expand
    Use dark colors for code blocks
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
            const arcgisMap = document.querySelector("arcgis-map");
            arcgisMap.basemap = basemap;
    
            arcgisMap.center = [-100, 40];
            arcgisMap.zoom = 3;
    
    Expand

Run the app

In CodePen, run your code to display the map.

The map should display the Forest and Parks Canvas vector tile layer on top of the World Hillshade image tile layer. The styled vector tile layer is displayed on top of the hillshade terrain.

What's next?

Learn how to use additional API features and ArcGIS services in these tutorials:

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.