Get started using Mapbox Tiling Service and the Tilesets CLI
Familiarity with using the command line.
Mapbox Tiling Service and the Tilesets CLI are in public beta. All features and workflows are subject to changes.
Mapbox Tiling Service (MTS) allows you to create custom vector tilesets by providing source data with transformation rules called recipes. Tilesets generated using MTS can be used in any of your map styles and can be composited with any other vector tilesets.
At a high level, there are four steps required to create a new tileset using MTS:
These steps can all be accomplished using the Tilesets CLI. In this tutorial, you will use the Tilesets CLI to create a tileset source using sample data, then write a recipe that specifies how to transform that data. Then you will create a new tileset with that recipe and publish it. After it is published, you can use this tileset in a custom map style.
This tutorial uses Mapbox Tiling Service to process geospatial data into vector tiles and make those tiles available to use. The processing and hosting costs for the data in this tutorial fall within MTS's free tier. For other projects, depending on the precision level and the area tiled in a tileset, your MTS use may not be free. See the Mapbox Tiling Service pricing documentation and the guide to managing tilesets costs for more details on how we charge for this service.
There are a few resources you'll need before getting started:
- Create a Mapbox access token. Create a new access token that has the scopes
tilesets:list. Do not share this token!
- Install the Tilesets CLI. The Tilesets CLI is a Python tool that provides source data preparation and validation for interacting with MTS.
- Download sample data. This is a single line-delimited GeoJSON file.
To use Mapbox Tiling Service endpoints via the Tilesets CLI, you need to have a Mapbox access token with the correct scopes:
tilesets:list. You can pass your access token to each of the commands used in this tutorial using the
--token flag. To save time and keep your secret token secure, we recommend storing your Mapbox access token as an environment variable. Set the environment variable with the
Replace the placeholder
<YOUR_MAPBOX_ACCESS_TOKEN> with an access token with the correct scopes.
A tileset source is a collection of line-delimited GeoJSON files that is saved on Mapbox.com. A tileset source is referenced by an ID, like
mapbox://tileset-source/username/hello-world. You can think of a tileset source as a place to store your raw geographic data before turning it into a vector tileset that can be served from MTS. Tileset sources can contain multiple files. You will use a tileset source to create a new tileset "layer" later on in this tutorial.
MTS requires that all files used to create tileset sources be in line-delimited GeoJSON format. A file formatted as line-delimited GeoJSON contains one or more GeoJSON Feature objects separated by newlines. The Tilesets CLI automatically converts GeoJSON to line-delimited GeoJSON.
To create a tileset source, you will use the Tilesets CLI
upload-source command. In this command, you will provide the following information:
- Your Mapbox username
- A name for the new tileset source ("populated-places-source" in the example command below)
- The path to the source file or files
More detail on this command and how it interacts with MTS is available in the Tilesets CLI's documentation.
Run the following Tilesets CLI command, replacing
username with your Mapbox account username.
$ tilesets upload-source username populated-places-source /path/to/data/populated_places.geojson.ld
This command creates a connection with MTS and uploads your source to a permanent and secure location on Mapbox’s servers.
You will see a message that tells you that the tileset source has been successfully created:
Now that your tileset source has been created, you must provide a set of rules to tell MTS how this source's data should be transformed when you upload and publish it. These rules are referred to as "recipes".
Recipes provide options for generating vector tiles such as degree of simplification, zoom level extent, geometry unioning, attribute manipulation, and much more. You can find more detail about all the available configuration options in the Recipe reference.
Open your text editor and paste in the following basic recipe:
username in the
source field with your Mapbox account username. Save the recipe to your computer as a file named
With this recipe, you are specifying the vector tile layer name and the zoom range you want to use when the tiles are generated. This range, 0-5, is an acceptable standard default for global or country-level data. For other zoom ranges that suit your data, take a look at the zoom table in the Recipe reference. You are also using
source to specify that the recipe will use the tileset source that you created in the last step.
maxzoom you choose, in combination with your source data, will determine the cost of processing and hosting each layer. You can use the Tilesets CLI
estimate-area command to understand the pricing implications of using large
maxzoom values (
14 and higher), which correlate to higher precisions like
30cm, versus smaller maxzoom values, which correlate to lower precisions like
10m. For more information about how
maxzoom affects pricing, see Manage your tileset processing and tileset hosting costs.
This isn’t your only chance to write your recipe. You can change it whenever you want.
Now you will create a new tileset using your recipe using the Tilesets CLI
You will give your new tileset a tileset ID. This will be the main resource you reference when adding the tileset to your map styles in the future. The tileset ID is a combination of your Mapbox username plus an identifier that is 32 characters or less. The identifier cannot include spaces, but it can include
_ special characters. In the example below, the tileset ID is
username.hello-world-tiles. When you run the command, replace
username with your Mapbox account username.
--recipe flag to reference the recipe you created in the last step. This gives MTS a set of rules to follow as it generates the tileset.
--name flag to create a human-readable name for your tileset. The name is limited to 64 characters. If you do not provide a name, one will be randomly generated.
To create the tileset, run the following Tilesets CLI command:
$ tilesets create username.hello-world-tiles --recipe hello-world-recipe.json --name "hello world"
You should see a successful response message:
message: 'Successfully created empty tileset username.hello-world-tiles. Publish your tileset to begin processing your data into vector tiles.'
If you are signed into Mapbox Studio, you will see this new tileset on your Tilesets page. When you click on the new tileset to open the Tileset explorer, it will appear to be empty since it has not been published.
Now that you have successfully created a tileset, you can publish it!
Publishing your tileset is an active step that tells MTS to take the following steps:
- Read your tileset’s recipe.
- Retrieve the tileset source data you created.
- Create vector tiles from the data in the tileset source by applying the transformation rules outlined in the recipe.
To publish your tileset, you will use the Tilesets CLI
publish command. Run the following command, replacing
username with your Mapbox account username.
$ tilesets publish username.hello-world-tiles
You’ll see a success message, which means that your publish request has been queued and MTS has begun generating your tileset!
"message": "Processing username.hello-world-tiles."
The time it takes to generate your final tileset is determined by the size of your source data and the complexity of your recipe. For example, if you've specified a larger range of zoom levels, this will generate more vector tiles.
You can check the status of your tileset at any time with the Tilesets CLI
$ tilesets status username.hello-world-tiles
This shortcut shows the status of the latest job, which can be queued, processing, failed, or success. Your job should only take a few minutes to show
"status": success once processing finishes.
$ tilesets jobs username.hello-world-tiles
Once publishing has completed successfully, you will see the new tileset in your Tilesets page. Click on the new tileset to open the Tileset explorer.
This tileset is now ready to be used in your custom map styles!
Need to make changes to your source data or your recipe? You can repeat the process above as many times as you like. For instance, to increase the zoom level to 10 and include an additional line-delimited GeoJSON file, you can repeat steps three and four of this tutorial until you're satisfied with the output tileset.
- Add a tileset to a style. Not sure how to add your new tileset to your style? You can find detailed steps for this in our Make a choropleth map tutorial.
- Recipe examples. Recipes are the primary way to manipulate the look of your tileset. If you aren’t sure what recipe to use, we recommend reading through the Recipe examples page, which has samples of common and complex use cases, plus descriptions for every part of the recipe.
- Recipe reference. The Recipe reference documents all the available options for creating recipes and includes mini examples.
- MTS API documentation. The Mapbox Tilesets CLI is a tool for accessing MTS. The MTS API documentation has information about all MTS's endpoints and options.
- Tilesets CLI documentation. The Tilesets CLI has more commands than those discussed in this tutorial. The documentation in the GitHub repository outlines all the available commands, such as viewing or updating a recipe, validating source data, or converting data into line-delimited GeoJSON.