Table of Contents

prewarm

Initializes resources like WebWorkers that can be shared across maps to lower load times in some situations. mapboxgl.workerUrl and mapboxgl.workerCount, if being used, must be set before prewarm() is called to have an effect.

By default, the lifecycle of these resources is managed automatically, and they are lazily initialized when a Map is first created. By invoking prewarm(), these resources will be created ahead of time, and will not be cleared when the last Map is removed from the page. This allows them to be re-used by new Map instances that are created later. They can be manually cleared by calling mapboxgl.clearPrewarmedResources(). This is only necessary if your web page remains active but stops using maps altogether.

This is primarily useful when using GL-JS maps in a single page app, wherein a user would navigate between various views that can cause Map instances to constantly be created and destroyed.

Examples

mapboxgl.prewarm()

clearPrewarmedResources

Clears up resources that have previously been created by mapboxgl.prewarm(). Note that this is typically not necessary. You should only call this function if you expect the user of your app to not return to a Map view at any point in your application.

Examples

mapboxgl.clearPrewarmedResources()

accessToken

Gets and sets the map’s access token.

Type: string

Examples

mapboxgl.accessToken = myAccessToken;

Returns string The currently set access token.

baseApiUrl

Gets and sets the map’s default API URL for requesting tiles, styles, sprites, and glyphs

Type: string

Examples

mapboxgl.baseApiUrl = 'https://api.mapbox.com';

Returns string The current base API URL.

workerCount

Gets and sets the number of web workers instantiated on a page with GL JS maps. By default, it is set to half the number of CPU cores (capped at 6). Make sure to set this property before creating any map instances for it to have effect.

Type: string

Examples

mapboxgl.workerCount = 2;

Returns number Number of workers currently configured.

maxParallelImageRequests

Gets and sets the maximum number of images (raster tiles, sprites, icons) to load in parallel, which affects performance in raster-heavy maps. 16 by default.

Type: string

Examples

mapboxgl.maxParallelImageRequests = 10;

Returns number Number of parallel requests currently configured.

clearStorage

Clears browser storage used by this library. Using this method flushes the Mapbox tile cache that is managed by this library. Tiles may still be cached by the browser in some cases.

This API is supported on browsers where the Cache API is supported and enabled. This includes all major browsers when pages are served over https://, except Internet Explorer and Edge Mobile.

When called in unsupported browsers or environments (private or incognito mode), the callback will be called with an error argument.

Parameters

  • callback Function Called with an error argument if there is an error.

Examples

mapboxgl.clearStorage();

version

The version of Mapbox GL JS in use as specified in package.json, CHANGELOG.md, and the GitHub release.

Type: string

supported

Test whether the browser supports Mapbox GL JS.

Parameters

  • options Object?
    • options.failIfMajorPerformanceCaveat boolean If true, the function will return false if the performance of Mapbox GL JS would be dramatically worse than expected (e.g. a software WebGL renderer would be used). (optional, default false)

Examples

// Show an alert if the browser does not support Mapbox GL
if (!mapboxgl.supported()) {
  alert('Your browser does not support Mapbox GL');
}

Returns boolean

setRTLTextPlugin

Sets the map’s RTL text plugin. Necessary for supporting the Arabic and Hebrew languages, which are written right-to-left. Mapbox Studio loads this plugin by default.

Parameters

  • pluginURL string URL pointing to the Mapbox RTL text plugin source.
  • callback Function Called with an error argument if there is an error.
  • lazy boolean If set to true, mapboxgl will defer loading the plugin until rtl text is encountered, rtl text will then be rendered only after the plugin finishes loading.

Examples

mapboxgl.setRTLTextPlugin('https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-rtl-text/v0.2.0/mapbox-gl-rtl-text.js');

getRTLTextPluginStatus

Gets the map’s RTL text plugin status. The status can be unavailable (i.e. not requested or removed), loading, loaded or error. If the status is loaded and the plugin is requested again, an error will be thrown.

Examples

const pluginStatus = mapboxgl.getRTLTextPluginStatus();

CameraOptions

Options common to Map#jumpTo, Map#easeTo, and Map#flyTo, controlling the desired location, zoom, bearing, and pitch of the camera. All properties are optional, and when a property is omitted, the current camera value for that property will remain unchanged.

Type: Object

Properties

  • center LngLatLike The desired center.
  • zoom number The desired zoom level.
  • bearing number The desired bearing in degrees. The bearing is the compass direction that is “up”. For example, bearing: 90 orients the map so that east is up.
  • pitch number The desired pitch in degrees. The pitch is the angle towards the horizon measured in degrees with a range between 0 and 60 degrees. For example, pitch: 0 provides the appearance of looking straight down at the map, while pitch: 60 tilts the user’s perspective towards the horizon. Increasing the pitch value is often used to display 3D objects.
  • around LngLatLike If zoom is specified, around determines the point around which the zoom is centered.
  • padding PaddingOptions Dimensions in pixels applied on each side of the viewport for shifting the vanishing point.

Examples

// set the map's initial perspective with CameraOptions
var map = new mapboxgl.Map({
  container: 'map',
  style: 'mapbox://styles/mapbox/streets-v11',
  center: [-73.5804, 45.53483],
  pitch: 60,
  bearing: -60,
  zoom: 10
});

AnimationOptions

Options common to map movement methods that involve animation, such as Map#panBy and Map#easeTo, controlling the duration and easing function of the animation. All properties are optional.

Type: Object

Properties

  • duration number The animation’s duration, measured in milliseconds.
  • easing Function A function taking a time in the range 0..1 and returning a number where 0 is the initial state and 1 is the final state.
  • offset PointLike of the target center relative to real map container center at the end of animation.
  • animate boolean If false, no animation will occur.
  • essential boolean If true, then the animation is considered essential and will not be affected by prefers-reduced-motion.

PaddingOptions

Options for setting padding on calls to methods such as Map#fitBounds, Map#fitScreenCoordinates, and Map#setPadding. Adjust these options to set the amount of padding in pixels added to the edges of the canvas. Set a uniform padding on all edges or individual values for each edge. All properties of this object must be non-negative integers.

Type: Object

Properties

  • top number Padding in pixels from the top of the map canvas.
  • bottom number Padding in pixels from the bottom of the map canvas.
  • left number Padding in pixels from the left of the map canvas.
  • right number Padding in pixels from the right of the map canvas.

Examples

var bbox = [[-79, 43], [-73, 45]];
map.fitBounds(bbox, {
  padding: {top: 10, bottom:25, left: 15, right: 5}
});
var bbox = [[-79, 43], [-73, 45]];
map.fitBounds(bbox, {
  padding: 20
});

StyleImageInterface

Interface for dynamically generated style images. This is a specification for implementers to model: it is not an exported method or class.

Images implementing this interface can be redrawn for every frame. They can be used to animate icons and patterns or make them respond to user input. Style images can implement a StyleImageInterface#render method. The method is called every frame and can be used to update the image.

Properties

Examples

var flashingSquare = {
    width: 64,
    height: 64,
    data: new Uint8Array(64 * 64 * 4),

    onAdd: function(map) {
        this.map = map;
    },

    render: function() {
        // keep repainting while the icon is on the map
        this.map.triggerRepaint();

        // alternate between black and white based on the time
        var value = Math.round(Date.now() / 1000) % 2 === 0  ? 255 : 0;

        // check if image needs to be changed
        if (value !== this.previousValue) {
            this.previousValue = value;

            var bytesPerPixel = 4;
            for (var x = 0; x < this.width; x++) {
                for (var y = 0; y < this.height; y++) {
                    var offset = (y * this.width + x) * bytesPerPixel;
                    this.data[offset + 0] = value;
                    this.data[offset + 1] = value;
                    this.data[offset + 2] = value;
                    this.data[offset + 3] = 255;
                }
            }

            // return true to indicate that the image changed
            return true;
        }
    }
 }

 map.addImage('flashing_square', flashingSquare);

render

This method is called once before every frame where the icon will be used. The method can optionally update the image’s data member with a new image.

If the method updates the image it must return true to commit the change. If the method returns false or nothing the image is assumed to not have changed.

If updates are infrequent it maybe easier to use Map#updateImage to update the image instead of implementing this method.

Returns boolean true if this method updated the image. false if the image was not changed.

onAdd

Optional method called when the layer has been added to the Map with Map#addImage.

Parameters

  • map Map The Map this custom layer was just added to.

onRemove

Optional method called when the icon is removed from the map with Map#removeImage. This gives the image a chance to clean up resources and event listeners.

RequestParameters

A RequestParameters object to be returned from Map.options.transformRequest callbacks.

Type: Object

Properties

  • url string The URL to be requested.
  • headers Object The headers to be sent with the request.
  • method string Request method 'GET' | 'POST' | 'PUT'.
  • body string Request body.
  • type string Response body type to be returned 'string' | 'json' | 'arrayBuffer'.
  • credentials string 'same-origin'|'include' Use ‘include’ to send cookies with cross-origin requests.
  • collectResourceTiming boolean If true, Resource Timing API information will be collected for these transformed requests and returned in a resourceTiming property of relevant data events.

Examples

// use transformRequest to modify requests that begin with `http://myHost`
transformRequest: function(url, resourceType) {
 if (resourceType === 'Source' && url.indexOf('http://myHost') > -1) {
   return {
     url: url.replace('http', 'https'),
     headers: { 'my-custom-header': true },
     credentials: 'include'  // Include cookies for cross-origin requests
   }
  }
 }

CustomLayerInterface

Interface for custom style layers. This is a specification for implementers to model: it is not an exported method or class.

Custom layers allow a user to render directly into the map’s GL context using the map’s camera. These layers can be added between any regular layers using Map#addLayer.

Custom layers must have a unique id and must have the type of "custom". They must implement render and may implement prerender, onAdd and onRemove. They can trigger rendering using Map#triggerRepaint and they should appropriately handle Map.event:webglcontextlost and Map.event:webglcontextrestored.

The renderingMode property controls whether the layer is treated as a "2d" or "3d" map layer. Use:

  • "renderingMode": "3d" to use the depth buffer and share it with other layers
  • "renderingMode": "2d" to add a layer with no depth. If you need to use the depth buffer for a "2d" layer you must use an offscreen framebuffer and CustomLayerInterface#prerender

Properties

  • id string A unique layer id.
  • type string The layer’s type. Must be "custom".
  • renderingMode string Either "2d" or "3d". Defaults to "2d".

Examples

// Custom layer implemented as ES6 class
class NullIslandLayer {
    constructor() {
        this.id = 'null-island';
        this.type = 'custom';
        this.renderingMode = '2d';
    }

    onAdd(map, gl) {
        const vertexSource = `
        uniform mat4 u_matrix;
        void main() {
            gl_Position = u_matrix * vec4(0.5, 0.5, 0.0, 1.0);
            gl_PointSize = 20.0;
        }`;

        const fragmentSource = `
        void main() {
            gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
        }`;

        const vertexShader = gl.createShader(gl.VERTEX_SHADER);
        gl.shaderSource(vertexShader, vertexSource);
        gl.compileShader(vertexShader);
        const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
        gl.shaderSource(fragmentShader, fragmentSource);
        gl.compileShader(fragmentShader);

        this.program = gl.createProgram();
        gl.attachShader(this.program, vertexShader);
        gl.attachShader(this.program, fragmentShader);
        gl.linkProgram(this.program);
    }

    render(gl, matrix) {
        gl.useProgram(this.program);
        gl.uniformMatrix4fv(gl.getUniformLocation(this.program, "u_matrix"), false, matrix);
        gl.drawArrays(gl.POINTS, 0, 1);
    }
}

map.on('load', function() {
    map.addLayer(new NullIslandLayer());
});

onAdd

Optional method called when the layer has been added to the Map with Map#addLayer. This gives the layer a chance to initialize gl resources and register event listeners.

Parameters

onRemove

Optional method called when the layer has been removed from the Map with Map#removeLayer. This gives the layer a chance to clean up gl resources and event listeners.

Parameters

prerender

Optional method called during a render frame to allow a layer to prepare resources or render into a texture.

The layer cannot make any assumptions about the current GL state and must bind a framebuffer before rendering.

Parameters

  • gl WebGLRenderingContext The map’s gl context.
  • matrix Array<number> The map’s camera matrix. It projects spherical mercator coordinates to gl coordinates. The mercator coordinate [0, 0] represents the top left corner of the mercator world and [1, 1] represents the bottom right corner. When the renderingMode is "3d", the z coordinate is conformal. A box with identical x, y, and z lengths in mercator units would be rendered as a cube. MercatorCoordinate.fromLngLat can be used to project a LngLat to a mercator coordinate.

render

Called during a render frame allowing the layer to draw into the GL context.

The layer can assume blending and depth state is set to allow the layer to properly blend and clip other layers. The layer cannot make any other assumptions about the current GL state.

If the layer needs to render to a texture, it should implement the prerender method to do this and only use the render method for drawing directly into the main framebuffer.

The blend function is set to gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA). This expects colors to be provided in premultiplied alpha form where the r, g and b values are already multiplied by the a value. If you are unable to provide colors in premultiplied form you may want to change the blend function to gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA).

Parameters

  • gl WebGLRenderingContext The map’s gl context.
  • matrix Array<number> The map’s camera matrix. It projects spherical mercator coordinates to gl coordinates. The spherical mercator coordinate [0, 0] represents the top left corner of the mercator world and [1, 1] represents the bottom right corner. When the renderingMode is "3d", the z coordinate is conformal. A box with identical x, y, and z lengths in mercator units would be rendered as a cube. MercatorCoordinate.fromLngLat can be used to project a LngLat to a mercator coordinate.