Giter Club home page Giter Club logo

ol-mapbox-style's Introduction

ol-mapbox-style

Create OpenLayers maps from Mapbox Style Specification objects.

Getting started

Installation

To use the library in an application with an npm based dev environment, install it with

npm install ol-mapbox-style

When using webpack as bundler, make sure to include the following in your webpack configuration:

  node: {fs: 'empty'}

When installed this way, just import the ol-mapbox-style module, like in the usage example below. To use a standalone build of ol-mapbox-style, just include 'dist/olms.js' on your HTML page, and access the global olms object.

Usage example

The code below creates an OpenLayers map from Mapbox's Bright v9 style:

import olms from 'ol-mapbox-style';

var key = 'Your Mapbox Access Token here';
olms('map', 'https://api.mapbox.com/styles/v1/mapbox/bright-v9?access_token=' + key);

Only commonly available system fonts and Google Fonts will automatically be available for any text-font defined in the Mapbox Style object. It is the responsibility of the application to load other fonts. Because ol-mapbox-style uses system and web fonts instead of PBF/SDF glyphs, the font stack is treated a little different: style and weight are taken from the primary font (i.e. the first one in the font stack). Subsequent fonts in the font stack are only used if the primary font is not available/loaded, and they will be used with the style and weight of the primary font.

To apply a subset of the layers defined in the Mapbox Style layer to a custom OpenLayers layer, use the applyStyle() function.

To apply the properties of the Mapbox Style's background layer to the map, use the applyBackground() function.

To create a style function for individual OpenLayers vector or vector tile layers, use the stylefunction module:

import stylefunction from 'ol-mapbox-style/stylefunction';
// OpenLayers imports from https://npmjs.com/package/ol
import VectorLayer from 'ol/layer/Vector';
import VectorSource from 'ol/source/Vector';
import GeoJSON from 'ol/format/GeoJSON';

var layer = new VectorLayer({
  source: new VectorSource({
    format: new GeoJSON(),
    url: 'data/states.geojson'
  })
});

fetch('data/states.json').then(function(response) {
  response.json().then(function(glStyle) {
    stylefunction(layer, glStyle, 'states');
  });
});

API

Table of Contents

applyStyle

import {applyStyle} from 'ol-mapbox-style';

Applies a style function to an ol.layer.VectorTile or ol.layer.Vector with an ol.source.VectorTile or an ol.source.Vector. The style function will render all layers from the glStyle object that use the specified source, or a subset of layers from the same source. The source needs to be a "type": "vector" or "type": "geojson" source.

Two additional properties will be set on the provided layer:

  • mapbox-source: The id of the Mapbox Style document's source that the OpenLayers layer was created from. Usually apply() creates one OpenLayers layer per Mapbox Style source, unless the layer stack has layers from different sources in between.
  • mapbox-layers: The ids of the Mapbox Style document's layers that are included in the OpenLayers layer.

Parameters

  • layer (VectorTileLayer | VectorLayer) OpenLayers layer.
  • glStyle (string | Object) Mapbox Style object.
  • source (string | Array<string>) source key or an array of layer ids from the Mapbox Style object. When a source key is provided, all layers for the specified source will be included in the style function. When layer ids are provided, they must be from layers that use the same source.
  • path string Path of the style file. Only required when a relative path is used with the "sprite" property of the style. (optional, default undefined)
  • resolutions Array<number> Resolutions for mapping resolution to zoom level. (optional, default undefined)

Returns Promise Promise which will be resolved when the style can be used for rendering.

stylefunction

import stylefunction from 'ol-mapbox-style/stylefunction';

Creates a style function from the glStyle object for all layers that use the specified source, which needs to be a "type": "vector" or "type": "geojson" source and applies it to the specified OpenLayers layer.

Two additional properties will be set on the provided layer:

  • mapbox-source: The id of the Mapbox Style document's source that the OpenLayers layer was created from. Usually apply() creates one OpenLayers layer per Mapbox Style source, unless the layer stack has layers from different sources in between.
  • mapbox-layers: The ids of the Mapbox Style document's layers that are included in the OpenLayers layer.

Parameters

  • olLayer (VectorLayer | VectorTileLayer) OpenLayers layer to apply the style to. In addition to the style, the layer will get two properties: mapbox-source will be the id of the glStyle's source used for the layer, and mapbox-layers will be an array of the ids of the glStyle's layers.
  • glStyle (string | Object) Mapbox Style object.
  • source (string | Array<string>) source key or an array of layer ids from the Mapbox Style object. When a source key is provided, all layers for the specified source will be included in the style function. When layer ids are provided, they must be from layers that use the same source.
  • resolutions Array<number> Resolutions for mapping resolution to zoom level. (optional, default [78271.51696402048,39135.75848201024, 19567.87924100512,9783.93962050256,4891.96981025128,2445.98490512564, 1222.99245256282,611.49622628141,305.748113140705,152.8740565703525, 76.43702828517625,38.21851414258813,19.109257071294063,9.554628535647032, 4.777314267823516,2.388657133911758,1.194328566955879,0.5971642834779395, 0.29858214173896974,0.14929107086948487,0.07464553543474244])
  • spriteData Object Sprite data from the url specified in the Mapbox Style object's sprite property. Only required if a sprite property is specified in the Mapbox Style object. (optional, default undefined)
  • spriteImageUrl Object Sprite image url for the sprite specified in the Mapbox Style object's sprite property. Only required if a sprite property is specified in the Mapbox Style object. (optional, default undefined)
  • getFonts function (Array<string>): Array<string> Function that receives a font stack as arguments, and returns a (modified) font stack that is available. Font names are the names used in the Mapbox Style object. If not provided, the font stack will be used as-is. This function can also be used for loading web fonts. (optional, default undefined)

Returns StyleFunction Style function for use in ol.layer.Vector or ol.layer.VectorTile.

applyBackground

import {applyBackground} from 'ol-mapbox-style';

Applies properties of the Mapbox Style's first background layer to the map.

Parameters

  • map PluggableMap OpenLayers Map.
  • glStyle Object Mapbox Style object.

olms

import olms from 'ol-mapbox-style';

Loads and applies a Mapbox Style object to an OpenLayers Map. This includes the map background, the layers, the center and the zoom.

The center and zoom will only be set if present in the Mapbox Style document, and if not already set on the OpenLayers map.

Layers will be added to the OpenLayers map, without affecting any layers that might already be set on the map.

Layers added by apply() will have two additional properties:

  • mapbox-source: The id of the Mapbox Style document's source that the OpenLayers layer was created from. Usually apply() creates one OpenLayers layer per Mapbox Style source, unless the layer stack has layers from different sources in between.
  • mapbox-layers: The ids of the Mapbox Style document's layers that are included in the OpenLayers layer.

This function sets an additional mapbox-style property on the OpenLayers map instance, which holds the Mapbox Style object.

Parameters

  • map (PluggableMap | HTMLElement | string) Either an existing OpenLayers Map instance, or a HTML element, or the id of a HTML element that will be the target of a new OpenLayers Map.
  • style (string | Object) JSON style object or style url pointing to a Mapbox Style object. When using Mapbox APIs, the url must contain an access token and look like https://api.mapbox.com/styles/v1/mapbox/bright-v9?access_token=[your_access_token_here]. When passed as JSON style object, all OpenLayers layers created by apply() will be immediately available, but they may not have a source yet (i.e. when they are defined by a TileJSON url in the Mapbox Style document). When passed as style url, layers will be added to the map when the Mapbox Style document is loaded and parsed.

Returns Promise A promise that resolves after all layers have been added to the OpenLayers Map instance, their sources set, and their styles applied. the resolve callback will be called with the OpenLayers Map instance as argument.

apply

import {apply} from 'ol-mapbox-style';

Like olms, but returns an ol/Map instance instead of a Promise.

Parameters

  • map (PluggableMap | HTMLElement | string) Either an existing OpenLayers Map instance, or a HTML element, or the id of a HTML element that will be the target of a new OpenLayers Map.
  • style (string | Object) JSON style object or style url pointing to a Mapbox Style object. When using Mapbox APIs, the url must contain an access token and look like https://api.mapbox.com/styles/v1/mapbox/bright-v9?access_token=[your_access_token_here]. When passed as JSON style object, all OpenLayers layers created by apply() will be immediately available, but they may not have a source yet (i.e. when they are defined by a TileJSON url in the Mapbox Style document). When passed as style url, layers will be added to the map when the Mapbox Style document is loaded and parsed.

Returns PluggableMap The OpenLayers Map instance that will be populated with the contents described in the Mapbox Style object.

getLayer

import {getLayer} from 'ol-mapbox-style';

Get the OpenLayers layer instance that contains the provided Mapbox Style layer. Note that multiple Mapbox Style layers are combined in a single OpenLayers layer instance when they use the same Mapbox Style source.

Parameters

  • map PluggableMap OpenLayers Map.
  • layerId string Mapbox Style layer id.

Returns Layer OpenLayers layer instance.

getLayers

import {getLayers} from 'ol-mapbox-style';

Get the OpenLayers layer instances for the provided Mapbox Style source.

Parameters

  • map PluggableMap OpenLayers Map.
  • sourceId string Mapbox Style source id.

Returns Array<Layer> OpenLayers layer instances.

getSource

import {getSource} from 'ol-mapbox-style';

Get the OpenLayers source instance for the provided Mapbox Style source.

Parameters

  • map PluggableMap OpenLayers Map.
  • sourceId string Mapbox Style source id.

Returns Source OpenLayers source instance.

Building the library

npm install

The resulting binary (olms.js) will be in the dist/ folder. To see the library in action, navigate to dist/index.html.

To run test locally, run

npm test

For debugging tests in the browser, run

npm run karma

and open a browser on the host and port indicated in the console output (usually http://localhost:9876/) and click the 'DEBUG' button to go to the debug environment.

CircleCI

ol-mapbox-style's People

Contributors

ahocevar avatar fredj avatar bartvde avatar fleur avatar theduckylittle avatar gd-aichi avatar chrismayer avatar pakb avatar petrsloup avatar egaoneko avatar frankrowe avatar eliask avatar harelm avatar tbarsballe avatar songyumeng avatar adrien-atmosphere avatar joux3 avatar aberenyi avatar erictheise avatar romaxx avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.