13 KiB
Named Maps
Named Maps are essentially the same as Anonymous Maps except the MapConfig is stored on the server, and the map is given a unique name. You can create Named Maps from private data, and users without an API Key can view your Named Map (while keeping your data private).
The Named Map workflow consists of uploading a MapConfig file to CartoDB servers, to select data from your CartoDB user database by using SQL. The response back from the API provides the name of your MapConfig as a template map; which you can then use to create your Named Map details, or fetch XYZ tiles directly for Named Maps. You can use also the MapConfig that you uploaded to create a map using CartoDB.js for Named Maps.
The main differences, compared to Anonymous Maps, is that Named Maps include:
-
auth token
This allows you to control who is able to see the map based on an auth token, and create a secure Named Map with password-protection. -
templates
The MapConfig generated template map is static and contains placeholders, enabling you to modify your map's appearance by using variables. Templates maps are persistent with no preset expiration. They can only be created, or deleted, by a CartoDB user with a valid API KEY (See auth argument).Uploading a MapConfig produces a template map for your Named Maps. Such as MapConfigs are uploaded to the server, "template".json files are uploaded to the server for Named Maps.
Note: There is a limit of 4,096 Named Maps allowed per account. If you need to create more Named Maps, it is recommended to use template maps instead of uploading multiple Named Map MapConfigs.
Create
Definition
POST /api/v1/map/named
Params
| Params | Description |
|---|---|
| api_key | is required |
template.json
The response back from the API provides the name of your MapConfig as a template, enabling you to create the Named Map details by inserting your variables into the template where placeholders are defined, and create custom queries using SQL. The name argument defines how to name this "template_name".json. Note that there are some requirements for how to name a Named Map template. See the name argument description for details.
{
"version": "0.0.1",
"name": "template_name",
"auth": {
"method": "token",
"valid_tokens": [
"auth_token1",
"auth_token2"
]
},
"placeholders": {
"color": {
"type": "css_color",
"default": "red"
},
"cartodb_id": {
"type": "number",
"default": 1
}
},
"layergroup": {
"version": "1.0.1",
"layers": [
{
"type": "cartodb",
"options": {
"cartocss_version": "2.1.1",
"cartocss": "#layer { polygon-fill: <%= color %>; }",
"sql": "select * from european_countries_e WHERE cartodb_id = <%= cartodb_id %>"
}
}
]
},
"view": {
"zoom": 4,
"center": {
"lng": 0,
"lat": 0
},
"bounds": {
"west": -45,
"south": -45,
"east": 45,
"north": 45
}
}
}
Arguments
| Params | Description |
|---|---|
| name | There can only be one template with the same name for any user. Valid names start with a letter or a number, and only contain letters, numbers, dashes (-), or underscores (_). This is specific to the name of your Named Map template.json. |
| auth | |
|---|---|
| |_ method | "token" or "open" ("open" is the default if no method is specified. Use "token" to password-protect your map). |
| |_ valid_tokens | when "method" is set to "token", the values listed here allow you to instantiate the Named Map. See this example for how to create a password-protected map. |
| placeholders | Placeholders are variables that can be placed in your template.json file's SQL or CartoCSS. |
| layergroup | the layergroup configurations, as specified in the MapConfig. See MapConfig File Format for more information. |
| view (optional) | extra keys to specify the view area for the map. It can be used to have a static preview of a Named Map without having to instantiate it. It is possible to specify it with center + zoom or with a bounding box bbox. Center+zoom takes precedence over bounding box. |
| --- | --- |
| |_ zoom | The zoom level to use |
| |_ center | |
|---|---|
| |_ |_ lng | The longitude to use for the center |
| |_ |_ lat | The latitude to use for the center |
| |_ bounds | |
|---|---|
| |_ |_ west | LowerCorner longitude for the bounding box, in decimal degrees (aka most western) |
| |_ |_ south | LowerCorner latitude for the bounding box, in decimal degrees (aka most southern) |
| |_ |_ east | UpperCorner longitude for the bounding box, in decimal degrees (aka most eastern) |
| |_ |_ north | UpperCorner latitude for the bounding box, in decimal degrees (aka most northern) |
Placeholder Format
Placeholders are variables that can be placed in your MapConfig, and template.json file's, SQL or CartoCSS options. Placeholders need to be defined with a type and a default value for MapConfigs. See details about defining a MapConfig type for Layergoup configurations.
Valid placeholder names start with a letter and can only contain letters, numbers, or underscores. They have to be written between the <%= and %> strings in order to be replaced.
Example
<%= my_color %>
The set of supported placeholders for a template need to be explicitly defined with a specific type, and default value, for each placeholder.
Placeholder Types
The placeholder type will determine the kind of escaping for the associated value. Supported types are:
| Types | Description |
|---|---|
| sql_literal | internal single-quotes will be sql-escaped |
| sql_ident | internal double-quotes will be sql-escaped |
| number | can only contain numerical representation |
| css_color | can only contain color names or hex-values |
Placeholder default values will be used whenever new values are not provided as options, at the time of creation on the client. They can also be used to test the template by creating a default version with new options provided.
When using templates, be very careful about your selections as they can give broad access to your data if they are defined loosely.
Call
curl -X POST \
-H 'Content-Type: application/json' \
-d @template.json \
'https://documentation.cartodb.com/api/v1/map/named?api_key=APIKEY'
Response
{
"template_id":"name",
}
Instantiate
Instantiating a map allows you to get the information needed to fetch tiles. That temporal map is an Anonymous Map.
Definition
POST /api/v1/map/named/:template_name
Param
| Param | Description |
|---|---|
| auth_token | optional, but required when "method" is set to "token" |
// params.json
{
"color": "#ff0000",
"cartodb_id": 3
}
The fields you pass as params.json depend on the variables allowed by the Named Map. If there are variables missing it will raise an error (HTTP 400)
- auth_token optional if the Named Map needs password-protection
Example
You can initialize a template map by passing all of the required parameters in a POST to /api/v1/map/named/:template_name.
Valid credentials will be needed, if required by the template.
Call
curl -X POST \
-H 'Content-Type: application/json' \
-d @params.json \
'https://documentation.cartodb.com/api/v1/map/named/@template_name?auth_token=AUTH_TOKEN'
Response
{
"layergroupid": "docs@fd2861af@c01a54877c62831bb51720263f91fb33:123456788",
"last_updated": "2013-11-14T11:20:15.000Z"
}
Error
{
"errors" : ["Some error string here"]
}
You can then use the layergroupid for fetching tiles and grids as you would normally (see Anonymous Maps). However, you will need to show the auth_token, if required by the template.
Using JSONP
There is also a special endpoint to be able to initialize a map using JSONP (for old browsers).
Definition
GET /api/v1/map/named/:template_name/jsonp
Params
| Params | Description |
|---|---|
| auth_token | optional, but required when "method" is set to "token" |
| config | Encoded JSON with the params for creating Named Maps (the variables defined in the template) |
| lmza | This attribute contains the same as config but LZMA compressed. It cannot be used at the same time than config. |
| callback | JSON callback name |
Call
curl 'https://documentation.cartodb.com/api/v1/map/named/:template_name/jsonp?auth_token=AUTH_TOKEN&callback=callback&config=template_params_json'
Response
callback({
"layergroupid":"c01a54877c62831bb51720263f91fb33:0",
"last_updated":"1970-01-01T00:00:00.000Z"
"cdn_url": {
"http": "http://cdb.com",
"https": "https://cdb.com"
}
})
This takes the callback function (required), auth_token if the template needs auth, and config which is the variable for the template (in cases where it has variables).
url += "config=" + encodeURIComponent(
JSON.stringify({ color: 'red' });
The response is in this format:
callback({
layergroupid: "dev@744bd0ed9b047f953fae673d56a47b4d:1390844463021.1401",
last_updated: "2014-01-27T17:41:03.021Z"
})
Update
Definition
PUT /api/v1/map/named/:template_name
Params
| Param | Description |
|---|---|
| api_key | is required |
Response
Same as updating a map.
Other Information
Updating a Named Map removes all the Named Map instances, so they need to be initialized again.
Example
Call
curl -X PUT \
-H 'Content-Type: application/json' \
-d @template.json \
'https://documentation.cartodb.com/api/v1/map/named/:template_name?api_key=APIKEY'
Response
{
"template_id": "@template_name"
}
If any template has the same name, it will be updated.
If a template with the same name does NOT exist, a 400 HTTP response is generated with an error in this format:
{
"errors" : ["error string here"]
}
Delete
Deletes the specified template map from the server, and disables any previously initialized versions of the map.
Definition
DELETE /api/v1/map/named/:template_name
Params
| Param | Description |
|---|---|
| api_key | is required |
Example
Call
curl -X DELETE 'https://documentation.cartodb.com/api/v1/map/named/:template_name?api_key=APIKEY'
Response
{
"errors" : ["Some error string here"]
}
On success, a 204 (No Content) response will be issued. Otherwise a 4xx response with an error will be returned.
Listing Available Templates
This allows you to get a list of all available templates.
Definition
GET /api/v1/map/named/
Params
| Param | Description |
|---|---|
| api_key | is required |
Example
Call
curl -X GET 'https://documentation.cartodb.com/api/v1/map/named?api_key=APIKEY'
Response
{
"template_ids": ["@template_name1","@template_name2"]
}
Error
{
"errors" : ["Some error string here"]
}
Getting a Specific Template
This gets the definition of a template.
Definition
GET /api/v1/map/named/:template_name
Params
| Param | Description |
|---|---|
| api_key | is required |
Example
Call
curl -X GET 'https://documentation.cartodb.com/api/v1/map/named/:template_name?api_key=APIKEY'
Response
{
"template": {...} // see [template.json](#templatejson)
}
Error
{
"errors" : ["Some error string here"]
}
Use CartoDB.js to Create Named Maps
Named Maps can be used with CartoDB.js, by specifying a Named Map in a layer source as follows. Named Maps are treated almost the same as other layer source types.
var layerSource = {
user_name: '{your_user_name}',
type: 'namedmap',
named_map: {
name: '{template_name}',
layers: [{
layer_name: "layer1",
interactivity: "column1, column2, ..."
}]
}
}
cartodb.createLayer('map_dom_id',layerSource)
.addTo(map_object);
CartoDB.js has methods for accessing your Named Maps.
-
layer.setParams() allows you to change the template variables (in the placeholders object) via JavaScript
Note: The CartoDB.js
layer.setParams()function is not supported when using Named Maps for Torque. -
layer.setAuthToken() allows you to set the auth tokens to create the layer