tiler
We currently provide procedures to create the following kind of tilesets:
Spatial index tiles (aggregates spatial indexes into tiles at specific resolutions)
Geometry-based tiles of two types:
simple tilesets to visualize features individually
aggregation tilesets to generate aggregated point visualizations
Visit the Tilesets section to learn more about tileset types.
CREATE_SIMPLE_TILESET
Description
Generates a simple tileset.
input
:VARCHAR
that can either contain a table name (e.g.database.schema.tablename
) or a full query (e.g.'SELECT * FROM db.schema.tablename'
).output_table
:VARCHAR
of the formatdatabase.schema.tablename
where the resulting tileset will be stored.options
:VARCHAR
containing a valid JSON with the different options. Valid options are described in the table below.
warning
If a query is passed in input
, it might be evaluated multiple times to generate the tileset. Thus, non-deterministic functions, such as [ROW_NUMBER
] should be avoided. If such a function is needed, the query should be saved into a table first and then passed as input
, to avoid inconsistent results.
Option | Description |
---|---|
| Default: |
| Default: |
| Default: |
| Default: |
| Default: |
| Default: |
| Default: |
| Default: |
| Default:
. For the |
| Default: 11. A |
| Default: 8. A |
| Default: |
| Default: |
In web map tilesets, each additional zoom level has 4 times the amount of tiles as the previous zoom. Level 0 has 1 tile, level 1 has 4, level 2 has 16, etc. |
For the map viewer, tile_resolution
is really a way of using an offset zoom level to load 'large' but few tiles , or 'small' but many tiles. For example, at zoom level 2 we might have to load 16 tiles to fill our screen. By increasing tile_resolution
one step (eg. 0.5
to 1
), we artificially use one z-level less (zoom level of 1) to load 4 (larger) tiles. Or we could increase tile_resolution
two steps (eg. from 0.5 to 2), to artificially use two z-levels less (zoom level of 0) and thus load just one (even larger) tile. Here is a table which illustrates the real requested Z levels based on a tileset's tile_resolution
.
Map Zoom | TR 0.25 (256px) | TR 0.5 (512px) | TR 1 (1024px) | TR 2 (2048px) | TR 4 (4096px) |
---|---|---|---|---|---|
1 | 2 | 1 | 0 | 0 | 0 |
2 | 3 | 2 | 1 | 0 | 0 |
3 | 4 | 3 | 2 | 1 | 0 |
4 | 5 | 4 | 3 | 2 | 1 |
As shown, tile_resolution
of 0.5
is where the tileset zoom level and map zoom levels match, so we use 0.5
as our baseline even though the default tile_resolution
is 1
. Other tile_resolution
values (eg, 1, 2, 4) will use offset z-levels when loaded on the map.
Relationship between tile\_resolution
and max\_tile\_vertices
/max\_tile\_features
tile\_resolution
and max\_tile\_vertices
/max\_tile\_features
In the web map viewer, tile_resolution
is really a way of using an offset zoom level to load 'larger' but less tiles. For example, at zoom level 3 we might have to load 16 tiles to fill our screen. By increasing tile_resolution
one step (eg. 1
to 2
), we artificially use one z-level less (zoom level of 2) to load 4 (larger) tiles. Or we could increase tile_resolution
two steps (eg. from 1 to 4), we artificially use two z-levels less (zoom level of 1) to load just one (even larger) tile. Here is a table which illustrates the real requested Z levels based on a tilesets tile_resolution
.
UI Zoom | TR 0.25 (256px) | TR 0.5 (512px) | TR 1 (1024px) | TR 2 (2048px) | TR 4 (4096px) |
---|---|---|---|---|---|
1 | 2 | 1 | 0 | 0 | 0 |
2 | 3 | 2 | 1 | 0 | 0 |
3 | 4 | 3 | 2 | 1 | 0 |
4 | 5 | 4 | 3 | 2 | 1 |
As shown, tile_resolution
of 0.5
is where the tileset zoom level and map zoom levels match. Other tile_resolution
values will need offset z-levels.
At the default tile_resolution
of 1
, any values set for option(s) max_tile_features
or max_tile_vertices
will be multiplied by 4. Even when unspecified, the default values for max_tile_features
(40000) and max_tile_vertices
(800000) are better thought of as the defaults of 10000
and 200000
@ tile_resolution
of 0.5
, multiplied by 4. For example, at tile_resolution
of 1
, the default max_tile_features
=> [default max_tile_features> @ 0.5] X 4 => 10000 X 4 = 40000.
This factor increases to 16 for tile_resolution
of 2
and 64 for tile_resolution
of 4
. Likewise, it decreases to 1 (ie. no change) at tile_resolution
0.5, and 0.25 at tile_resolution
of 0.25
(ie. divide by 4).
Although this is somewhat unintuitive, the offset ensures that tilesets generated using the same options (but different tile_resolutions) will always appear the same on the map.
Example
CREATE_POINT_AGGREGATION_TILESET
Description
Generates a point aggregation tileset.
input
:VARCHAR
that can either contain a table name (e.g.database.schema.tablename
) or a full query (e.g.(SELECT * FROM database.schema.tablename)
).output_table
:VARCHAR
of the formatdatabase.schema.tablename
where the resulting tileset will be stored. The database and schema must exist and the caller needs to have permissions to create a new table in it. The process will fail if the table already exists.options
:VARCHAR
containing a valid JSON with the different options. Valid options are described in the table below.
warning
If a query is passed in input
, it might be evaluated multiple times to generate the tileset. Thus, non-deterministic functions, such as [ROW_NUMBER
] should be avoided. If such a function is needed, the query should be saved into a table first and then passed as input
, to avoid inconsistent results.
Option | Description |
---|---|
| Default: |
| Default: |
| Default: |
| Default: |
| Default:
|
| Default: |
| Default: |
| Default: |
| Default: |
| Default:
. For the |
| Default: |
In web map tilesets, each additional zoom level has 4 times the amount of tiles as the previous zoom. Level 0 has 1 tile, level 1 has 4, level 2 has 16, etc.
For the map viewer, tile_resolution
is really a way of using an offset zoom level to load 'large' but few tiles , or 'small' but many tiles. For example, at zoom level 2 we might have to load 16 tiles to fill our screen. By increasing tile_resolution
one step (eg. 0.5
to 1
), we artificially use one z-level less (zoom level of 1) to load 4 (larger) tiles. Or we could increase tile_resolution
two steps (eg. from 0.5 to 2), to artificially use two z-levels less (zoom level of 0) and thus load just one (even larger) tile. Here is a table which illustrates the real requested Z levels based on a tilesets tile_resolution
.
Map Zoom | TR 0.25 (256px) | TR 0.5 (512px) | TR 1 (1024px) | TR 2 (2048px) | TR 4 (4096px) |
---|---|---|---|---|---|
1 | 2 | 1 | 0 | 0 | 0 |
2 | 3 | 2 | 1 | 0 | 0 |
3 | 4 | 3 | 2 | 1 | 0 |
4 | 5 | 4 | 3 | 2 | 1 |
As shown, tile_resolution
of 0.5
is where the tileset zoom level and map zoom levels match, so we use 0.5
as our baseline even thoug the default tile_resolution
is 1
. Other tile_resolution
values (eg, 1, 2, 4) will use offset z-levels when loaded on the map.
Relationship between tile\_resolution
and aggregation\_resolution
tile\_resolution
and aggregation\_resolution
The value of aggregation_resolution
will be adjusted based on tile_resolution
. Although the default tile_resolution
is 1, we use 0.5
as the baseline. So by default, aggregation_resolution
gets adjusted. Its value (whether default or user-specified) will be decreased/increased as outlined below:
tile_resolution | Adjustment | Default | User-supplied Eg. 8 |
---|---|---|---|
0.25 | -1 | 6 - 1 = 5 | 8 - 1 = 7 |
0.5 | 0 | 6 + 0 = 6 | 8 + 0 = 8 |
1 | +1 | 6 + 1 = 7 | 8 + 1 = 9 |
2 | +2 | 6 + 2 = 8 | 8 + 2 = 10 |
4 | +3 | 6 + 3 = 9 | 8 + 3 = 11 |
Such that, 7, the default aggregation_level
@ tile_resolution
of 1
, is better thought of as 6 + 1 = 7. Likewise, if a user specified an aggregation_resolution
of 8, and tile_resolution
of 4, the generated tile will actually use 8 + 3 = 11. But, when rendered on the map, the z-levels are offset by -3 for tile_resolution
4 so the tiles are geographically larger but otherwise look the same as those generated with another tile_resolution
value.
Relationship between tile\_resolution
and max\_tile\_features
tile\_resolution
and max\_tile\_features
At the default tile_resolution
of 1
, any values set for option(s) max_tile_features
will be multiplied by 4. Even when unspecified, the default values for max_tile_features
(40000) is better thought of as the default of 10000
@ tile_resolution
of 0.5
, multiplied by 4. Such that, max_tile_features
@ tile_resolution
of 1
=> [default max_tile_features @ 0.5] X 4 => 10000 X 4 = 40000.
This factor increases to 16 for tile_resolution
of 2
and 64 for tile_resolution
of 4
. Likewise, it decreases to 1 (ie. no change) at tile_resolution
0.5, and 0.25 at tile_resolution
of 0.25
(ie. divide by 4).
Although this is somewhat unintuitive, the offset ensures that tilesets generated using the same options (but different tile_resolutions) will always appear the same on the map.
FEATURES PER TILE LIMITS
The value of aggregation_resolution
sets an upper bound to how many features can be present in a tile. For a value of n, a maximum of 4^n (4 raised to n) features can be present in a tile. For example, for an aggregation resolution of 8, the maximum number of features (points) will be 65536 per tile. This value can be too high and produce tiles that are too large when either the aggregation resolution is high or many properties are included. In that case, to improve the performance of the map visualizations, the max_tile_features
should be used to limit the size of the tiles to about 1MB.
Result
The generated tileset consists of a table with the following columns, where each row represents a tile:
z
: zoom level of the tile.x
: X-index of the tile (0
to2^Z-1
).y
: Y-index of the tile (0
to2^Z-1
).data
: contents of the tile, encoded as a GeoJSON string (a feature collection). It will contain the resulting points (location of the aggregated features) and their attributes (as defined byproperties
).
Additionally, there is a row in the data
column identified by Z=-1
which contains metadata about the tileset in JSON format. It contains the following properties:
bounds
: geographical extents of the source as a string inXmin, Ymin, Xmax, Ymax
format.center
: center of the geographical extents asX, Y, Z
, where theZ
represents the zoom level where a single tile spans the whole extents size.zmin
: minimum zoom level in the tileset.zmax
: maximum zoom level in the tileset.tilestats
: stats about the feature's properties. In addition to its name (attribute
) andtype
, it containsmin
,max
,average
andsum
.
Example
In the example above, for all features we would get a property "num_cities"
with the number of points that fall in it and "population_sum"
with the sum of the population in those cities. In addition to this, when there is only one point that belongs to this property (and only in that case) we will also get the column values from the source data in "city_name"
.
Example
In the above example a simple tileset is created from a polygon table. The tile_resolution of 4 will means the tiles will be 4096px when rendered.
CREATE_SPATIAL_INDEX_TILESET
Description
Creates a tileset that uses a spatial index (H3 and QUADKEYS are currently supported), aggregating data from an input table that uses that same spatial index.
Aggregated data is computed for all levels between resolution_min
and resolution_max
. For each resolution level, all tiles for the area covered by the source table are added, with data aggregated at level resolution + aggregation resolution
.
input
:VARCHAR
that can either contain a table name (e.g.database.schema.tablename
) or a full query (e.g.'SELECT * FROM db.schema.tablename'
).output_table
:VARCHAR
of the formatdatabase.schema.tablename
where the resulting tileset will be stored.options
:VARCHAR
containing a valid JSON with the different options. Valid options are described in the table below.
warning
If a query is passed in input
, it might be evaluated multiple times to generate the tileset. Thus, non-deterministic functions, such as [ROW_NUMBER
] should be avoided. If such a function is needed, the query should be saved into a table first and then passed as input
, to avoid inconsistent results.
Option | Description |
---|---|
| Default: |
| Default: |
| A |
| A |
| Defaults: |
| Default: |
| Default: {}. A JSON object that defines the properties that will be included associated with each cell feature. Each property is defined by its name and type (Number, Boolean, String, etc.). Please note that every property different from Number will be casted to String. |
| Default: |
Examples
Additional examples
Last updated