
Product
Reachability for Ruby Now in Beta
Reachability analysis for Ruby is now in beta, helping teams identify which vulnerabilities are truly exploitable in their applications.
tile-labeler
Advanced tools
Convert map label features into WebGL buffers for rendering
Feature layout is guided by a MapLibre style document, as parsed by tile-stencil. The returned buffers are consistent with the format returned by tile-mixer.
See the simple test plotting computed character positions over a pre-rendered tile.
tile-labeler is provided as an ESM import
import * as tileLabeler from 'tile-labeler';
tileLabeler exposes two methods:
Returns a function that collects font names and character codes for each label, and constructs an atlas of glyph SDFs (via sdf-manager).
const getAtlas = tileLabeler.initAtlasGetter(params);
The supplied parameters object has the following properties:
parsedStyles (Array): An array of MapLibre style layers, with style functions
already parsed by tile-stencilglyphEndpoint (String): The URL template from the glyphs property of a
MapLibre style document. Any Mapbox-specific domains or API keys must have been
already expanded by tile-stencilThe returned atlas getter function inputs tile data, and returns a Promise that resolves to an atlas of glyph SDFs. For example,
getAtlas(layers, zoom).then(atlas => {
// Use atlas to shape label features and construct WebGL buffers
});
The parameters for the getAtlas function are:
layers (Object): A dictionary of tile layers, keyed on the .id property
of the style for that layer. (NOTE: this is probably NOT the natural order
of the tile data—it should be pre-filtered. See filter-source.js in
tile-mixer.) Each layer should have a .features property pointing to
an array of GeoJSON features.zoom (Number): The zoom level at which style layout functions will be
evaluatedThe data returned from the labeler function includes:
{ width, height, data } = atlas: The signed distance field (SDF) data to
be loaded as an Alpha texture. data is a Uint16ArrayNOTE also that any label features in layer.features will have the following properties added (MODIFIED IN PLACE):
feature.font (String): The name of the font used to render this labelfeature.charCodes (Array): The character codes of the characters in the
label textReturns utilities to construct WebGL buffers for valid label features.
The syntax is as follows:
const { serialize, getLength, styleKeys } = tileLabeler
.initShaping(style, spriteData);
where the arguments are:
style: A 'symbol' layer from a MapLibre style document, with
the .layout property parsed into value getters by tile-stencil.spriteData: The data retrieved by tile-stencil from the URL described
in the sprite property of the style documentThere are three named returns: { serialize, getLength, styleKeys}
The serialize method can serialize a feature, using the following signature:
const buffers = serialize(feature, zoom, atlas, tree);
where the arguments are as follows:
feature: A GeoJSON feature, to which the properties .font and .charCodes
have been added by a previous call to a getAtlas function (see above under
initAtlasGetter).zoom: The map zoom level at which this label will be displayedatlas: An atlas of glyph SDFs, as generated by the getAtlas calltree: An rbush object used for checking collisions with previous labels.
The user is responsible for initializing this object, and supplying layers
in the correct order.The getLength method inputs the buffers returned by serialize, and returns
the number of instances that must be rendered to display the serialized feature.
const numInstances = getLength(buffers);
The styleKeys property is an Array of Strings, each representing the key
of a symbol style layer property. The values of these properties,
if they are specified as feature property functions, will need
to be loaded into buffers for rendering. tile-labeler does not construct these
buffers, but .getLength and .styleKeys provide the information needed to
construct them. See tile-gl code for an example of how to do this.
FAQs
Convert map label features into WebGL buffers for rendering
We found that tile-labeler demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Reachability analysis for Ruby is now in beta, helping teams identify which vulnerabilities are truly exploitable in their applications.

Research
/Security News
Malicious npm packages use Adspect cloaking and fake CAPTCHAs to fingerprint visitors and redirect victims to crypto-themed scam sites.

Security News
Recent coverage mislabels the latest TEA protocol spam as a worm. Here’s what’s actually happening.