<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-CA">
	<id>https://dges.carleton.ca/CUOSGwiki/index.php?action=history&amp;feed=atom&amp;title=Creating_Custom_Basemaps_with_Vector_Tile_Servers</id>
	<title>Creating Custom Basemaps with Vector Tile Servers - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://dges.carleton.ca/CUOSGwiki/index.php?action=history&amp;feed=atom&amp;title=Creating_Custom_Basemaps_with_Vector_Tile_Servers"/>
	<link rel="alternate" type="text/html" href="https://dges.carleton.ca/CUOSGwiki/index.php?title=Creating_Custom_Basemaps_with_Vector_Tile_Servers&amp;action=history"/>
	<updated>2026-05-18T13:28:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://dges.carleton.ca/CUOSGwiki/index.php?title=Creating_Custom_Basemaps_with_Vector_Tile_Servers&amp;diff=18440&amp;oldid=prev</id>
		<title>DerekEllis at 02:19, 24 December 2021</title>
		<link rel="alternate" type="text/html" href="https://dges.carleton.ca/CUOSGwiki/index.php?title=Creating_Custom_Basemaps_with_Vector_Tile_Servers&amp;diff=18440&amp;oldid=prev"/>
		<updated>2021-12-24T02:19:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 02:19, 24 December 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 337:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 337:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt;&amp;lt;!-- Image: Vector Tiles in QGIS --&amp;gt;&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt;&amp;lt;!-- Image: Vector Tiles in QGIS --&amp;gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt;[[File:QGISVectorTile.png|500px]]&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt;[[File:QGISVectorTile.png|500px]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;div&gt;== Licensing Considerations ==&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;div&gt;Remember that the Open Database License requires that OpenStreetMap contributors are credited when using data or datasets that are derived from OpenStreetMap data.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;div&gt;In addition, any use of the vector tiles that are created using OpenMapTiles [https://openmaptiles.org/docs/generate/generate-openmaptiles/ must also credit OpenMapTiles].&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;div&gt;An example attribution of both: © OpenMapTiles © OpenStreetMap contributors&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt;== Conclusion ==&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt;== Conclusion ==&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>DerekEllis</name></author>
		
	</entry>
	<entry>
		<id>https://dges.carleton.ca/CUOSGwiki/index.php?title=Creating_Custom_Basemaps_with_Vector_Tile_Servers&amp;diff=18215&amp;oldid=prev</id>
		<title>DerekEllis: Add content</title>
		<link rel="alternate" type="text/html" href="https://dges.carleton.ca/CUOSGwiki/index.php?title=Creating_Custom_Basemaps_with_Vector_Tile_Servers&amp;diff=18215&amp;oldid=prev"/>
		<updated>2021-12-23T04:11:22Z</updated>

		<summary type="html">&lt;p&gt;Add content&lt;/p&gt;
&lt;a href=&quot;https://dges.carleton.ca/CUOSGwiki/index.php?title=Creating_Custom_Basemaps_with_Vector_Tile_Servers&amp;amp;diff=18215&amp;amp;oldid=17819&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>DerekEllis</name></author>
		
	</entry>
	<entry>
		<id>https://dges.carleton.ca/CUOSGwiki/index.php?title=Creating_Custom_Basemaps_with_Vector_Tile_Servers&amp;diff=17819&amp;oldid=prev</id>
		<title>DerekEllis: Initial edit</title>
		<link rel="alternate" type="text/html" href="https://dges.carleton.ca/CUOSGwiki/index.php?title=Creating_Custom_Basemaps_with_Vector_Tile_Servers&amp;diff=17819&amp;oldid=prev"/>
		<updated>2021-12-14T02:40:40Z</updated>

		<summary type="html">&lt;p&gt;Initial edit&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
Basemaps play an important role in giving geographic context to a map, &lt;br /&gt;
however they can be hard to come across and are typically only available under a copyright or license that makes the unusable for many projects.&lt;br /&gt;
The styling of a basemap can also affect the aesthetic of a map, however the appearance of basemaps is generally controlled by the original creator of the basemap.&lt;br /&gt;
&lt;br /&gt;
This tutorial will show how to create a custom basemap using open data, how to apply a customized style to the basemap, and how to use the basemap in a mapping application.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
This tutorial will require some basic command line use (running commands, changing directories) and will be done in a Linux environment, however the same steps can be performed on other operating systems like Windows and macOS as well.&lt;br /&gt;
&lt;br /&gt;
The following tools will need to be installed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Add links and installation instructions here --&amp;gt;&lt;br /&gt;
* NodeJS&lt;br /&gt;
* Docker&lt;br /&gt;
* docker-compose&lt;br /&gt;
* git&lt;br /&gt;
* Osmium&lt;br /&gt;
* tileserver-gl-light&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vector Tiles ==&lt;br /&gt;
&lt;br /&gt;
Tilesets are a way of storing geographic data that has been split up into a uniform grid of tiles, and pre-processed to be displayed at preset zoom levels. &lt;br /&gt;
This pre-processing makes it really easy for a &amp;quot;tileserver&amp;quot; to serve only the relevant data for the current view and zoom of a map viewport, which is far more efficient than trying to load an entire raw dataset.&lt;br /&gt;
A tileset can contain vector or raster data, however we will be creating a tileset of vector data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Add reference, and license disclaimer --&amp;gt; &lt;br /&gt;
Our vector data source will be OpenStreetMap which makes its data available under the Open Database License (ODbL). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mention MBTiles? Note the level of detail in each zoom level --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Generating Tiles ===&lt;br /&gt;
&lt;br /&gt;
To generate our own vector tiles, we will be using the OpenMapTiles project which provides and open-source tool for generating tilesets from OpenStreetMap data.&lt;br /&gt;
&lt;br /&gt;
To install OpenMapTiles, run the following command, and then change into the openmaptiles directory:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/openmaptiles/openmaptiles.git&lt;br /&gt;
cd openmaptiles&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;quickstart&amp;quot; script is provided which can be run to quickly generate tiles. By default, it will download data for, and generate a tileset of Albania. &lt;br /&gt;
By providing the name of a specific region ([https://github.com/openmaptiles/openmaptiles/blob/master/QUICKSTART.md from a set list of regions]), the script will generate tiles for the specified region instead.&lt;br /&gt;
The tileset data will be stored in the &amp;lt;syntaxhighlight inline&amp;gt;data&amp;lt;/syntaxhighlight&amp;gt; directory, under the OpenMapTiles project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./quickstart.sh         # Generate tileset of Albania&lt;br /&gt;
&lt;br /&gt;
./quickstart.sh canada  # Generate tileset of Canada&lt;br /&gt;
./quickstart.sh quebec  # Generate tileset of Québec&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This process can be very slow for large regions like Canada or Québec however, so we will see how to create smaller OpenStreetMap datasets for OpenMapTiles to convert.&lt;br /&gt;
&lt;br /&gt;
=== Creating Custom OpenStreetMap Data Extent ===&lt;br /&gt;
&lt;br /&gt;
An OpenStreetMap dataset contains &amp;lt;i&amp;gt;raw&amp;lt;/i&amp;gt; high detail vector data, which results in very large data files. &lt;br /&gt;
For example, Canada alone contains 2.8GB worth of vector data which is both a lot to download, but also a lot to process.&lt;br /&gt;
Most sources for downloading OpenStreetMap data will only allow a very small extract of data to be downloaded, but some sources like [https://download.geofabrik.de/ Geofabrik] provide larger pre-extracted downloads.&lt;br /&gt;
Geofabrik has per-province extracts, which can be more manageable to work with.&lt;br /&gt;
&lt;br /&gt;
Let&amp;#039;s say that for this tutorial we want to create a basemap of the Ottawa-Gatineau region, which happens to span across both Ontario and Québec.&lt;br /&gt;
Unfortunately this means that the Geofabrik extracts would split our region across the provincial border, but we can combine the two extracts using a tool called [https://osmcode.org/osmium-tool/ Osmium].&lt;br /&gt;
The commands below will download and merge the two extracts. &lt;br /&gt;
We can also go one step further and also use Osmium to extract a much smaller extent of just the Ottawa-Gatineau area, and by leaving out the rest of Ontario and Québec we cut the merged dataset down from 1.2GB to just 48MB. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Download provincial extracts&lt;br /&gt;
wget https://download.geofabrik.de/north-america/canada/ontario-latest.osm.pbf&lt;br /&gt;
wget https://download.geofabrik.de/north-america/canada/quebec-latest.osm.pbf&lt;br /&gt;
&lt;br /&gt;
osmium merge ontario-latest.osm.pbf quebec-latest.osm.pbf -o merged.osm.pbf&lt;br /&gt;
&lt;br /&gt;
# Extract the National Capital Region&lt;br /&gt;
osmium extract -b -76.2616,45.1249,-75.1726,45.6620 merged.osm.pbf -o ncr.osm.pbf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Generating Tiles (cont.) ===&lt;br /&gt;
&lt;br /&gt;
Before generating any more tiles, we need to make one adjustment to the default configuration of OpenMapTiles to allow it to generate more tile zoom levels. &lt;br /&gt;
By default it will only generate 7 levels, as this is much quicker and can be used for creating previews of tilesets.&lt;br /&gt;
Open the &amp;lt;syntaxhighlight inline&amp;gt;.env&amp;lt;/syntaxhighlight&amp;gt; file from the OpenMapTiles project and change the &amp;lt;syntaxhighlight inline&amp;gt;MAX_ZOOM&amp;lt;/syntaxhighlight&amp;gt; variable to read &amp;lt;syntaxhighlight inline&amp;gt;MAX_ZOOM=14&amp;lt;/syntaxhighlight&amp;gt;. &lt;br /&gt;
This tells the tool to generate the higher-detail zoom levels.&lt;br /&gt;
&lt;br /&gt;
Now with the &amp;lt;syntaxhighlight inline&amp;gt;ncr.osm.pbf&amp;lt;/syntaxhighlight&amp;gt; inside of the OpenMapTiles &amp;lt;syntaxhighlight inline&amp;gt;data&amp;lt;/syntaxhighlight&amp;gt; directory, we can now run the following commands to generate a tileset for our extent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# ncr refers to ncr.osm.pbf, created in previous section&lt;br /&gt;
make generate-bbox-file area=ncr&lt;br /&gt;
&lt;br /&gt;
./quickstart.sh ncr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After running, this will produce a &amp;lt;syntaxhighlight inline&amp;gt;tiles.mbtiles&amp;lt;/syntaxhighlight&amp;gt; file in the &amp;lt;syntaxhighlight inline&amp;gt;data&amp;lt;/syntaxhighlight&amp;gt; directory containing our tileset.&lt;br /&gt;
&lt;br /&gt;
== Serving Tiles ==&lt;br /&gt;
&lt;br /&gt;
Now that we have generated our map tiles, we want to serve them so that they can be used by a mapping application. &lt;br /&gt;
We will do this with &amp;lt;syntaxhighlight inline&amp;gt;tileserver-gl-light&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
After running the following command, the server can be accessed at [http://localhost:8080 http://localhost:8080].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tileserver-gl-light ./data/tiles.mbtiles&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The homepage of the tileserver includes a link that can be used to preview the tileset. &lt;br /&gt;
By zooming into our extent of Ottawa-Gatineau we can see the detailed vector tiles being loaded in. Areas outside of the extent will be blank, since we didn&amp;#039;t include that data when generating the tiles.&lt;br /&gt;
&lt;br /&gt;
== Using Vector Tiles in QGIS ==&lt;br /&gt;
&lt;br /&gt;
Vector tiles in this format can be consumed by many tools and libraries, but we will demonstrate their use in QGIS here.&lt;br /&gt;
MapTiler develops a plugin for QGIS, also called MapTiler, which enables the use of vector tiles in QGIS.&lt;br /&gt;
&lt;br /&gt;
To install the plugin, in QGIS navigate to the Plugins &amp;gt; Manage and Install Plugins... menu. In the search bar, enter &amp;quot;MapTiler&amp;quot;, select the plugin that turns up in the search results, and install the plugin.&lt;br /&gt;
Once installed, a new &amp;quot;MapTiler&amp;quot; dropdown will be added to the QGIS Browser panel. &lt;br /&gt;
Expanding the dropdown shows a list of preset vector tile services that can be added, however they require a MapTiler access key.&lt;br /&gt;
&lt;br /&gt;
To add our own tile server, we can right click on the MapTiler dropdown and select &amp;quot;Add a new map...&amp;quot;.&lt;br /&gt;
The popup will default to adding a new map from URL, where we can give our map a name, and then enter the URL to the tile server&amp;#039;s style JSON.&lt;br /&gt;
&amp;lt;!-- TODO: Explain what the server&amp;#039;s style JSON actually is --&amp;gt;&lt;br /&gt;
We can then add the new map as a layer in our QGIS project.&lt;br /&gt;
&lt;br /&gt;
The plugin treats the vector tiles as proper vector data, meaning that it can be queried like any other vector features in QGIS. &lt;br /&gt;
When producing map layouts, the vector data can even be exported to vector graphics formats like SVG and PDF.&lt;br /&gt;
&lt;br /&gt;
== Styling the Map ==&lt;br /&gt;
&lt;br /&gt;
By default the tile server we created renders the vector data in a fairly plain-looking style.&lt;br /&gt;
Perhaps we would like to change the colours to fit our desired aesthetic, or to emphasize certain features, or even to add and remove some features from the map altogether.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Revise wording --&amp;gt;&lt;br /&gt;
The [https://docs.mapbox.com/mapbox-gl-js/style-spec/ Mapbox GL style specification] is used to customize the style of vector tiles.&lt;br /&gt;
A style is a JSON document that specifies (among other things), a list of layers to be rendered.&lt;br /&gt;
These layers derive their data from the vector data source we produced earlier, but can be filtered to only display certain features from the source.&lt;br /&gt;
Those features can they have different layout and paint properties applied to them, and the styling can even be set up to change depending on a feature&amp;#039;s data properties.&lt;br /&gt;
&lt;br /&gt;
It is possible to write a style directly as a JSON document, however it can be complicated.&lt;br /&gt;
Instead, we will use the [https://maputnik.github.io/editor Maputnik editor], which is an open-source web app for editing map styles. &lt;br /&gt;
The editor shows the current style in a viewport, and has panels on the left which list the style&amp;#039;s layers, and the different styling properties applied to a selected layer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Expand on Maputnik use, with screenshots --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding / Removing Layers ===&lt;br /&gt;
Layers take some or all features from a data &amp;lt;b&amp;gt;source&amp;lt;/b&amp;gt; (our vector tiles in this case) and apply some layout and paint properties to those features which dictate how they will be rendered.&lt;br /&gt;
A layer can select which features will be included by specifying a &amp;lt;b&amp;gt;source layer&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;filter&amp;lt;/b&amp;gt; property. A data source can have multiple data layers, and the filter can be used to further refine the selection using the filter property.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt; &lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;id&amp;quot;: &amp;quot;road_secondary_tertiary&amp;quot;,&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
  &amp;quot;source&amp;quot;: &amp;quot;openmaptiles&amp;quot;,&lt;br /&gt;
  &amp;quot;source-layer&amp;quot;: &amp;quot;transportation&amp;quot;,&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    &amp;quot;in&amp;quot;,&lt;br /&gt;
    &amp;quot;class&amp;quot;,&lt;br /&gt;
    &amp;quot;secondary&amp;quot;,&lt;br /&gt;
    &amp;quot;tertiary&amp;quot;&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;layout&amp;quot;: {},&lt;br /&gt;
  &amp;quot;paint&amp;quot;: {}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This defines a layer that takes the features from the &amp;lt;syntaxhighlight inline&amp;gt;transportation&amp;lt;/syntaxhighlight&amp;gt; source layer in the &amp;lt;syntaxhighlight inline&amp;gt;openmaptiles&amp;lt;/syntaxhighlight&amp;gt; data source, &lt;br /&gt;
and then filters specifically for features (roads in this case) that are in the secondary and tertiary road class.&lt;br /&gt;
&lt;br /&gt;
The list of all available source layers and properties are defined in the [https://openmaptiles.org/schema/ OpenMapTiles Vector Tile Schema].&lt;br /&gt;
&lt;br /&gt;
=== Layout and Paint properties ===&lt;br /&gt;
&amp;lt;!-- TODO: Footnote about layout and paint props --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Layout and paint properties define how features in a certain layer will be displayed. These properties are specified in the [https://docs.mapbox.com/mapbox-gl-js/style-spec/ Mapbox Style Specification].&lt;/div&gt;</summary>
		<author><name>DerekEllis</name></author>
		
	</entry>
</feed>