Change the Case of Labels ​
Use the text-transform layout property to render map labels in uppercase, lowercase, or default case.
text-transform Property ​
Set text-transform in a symbol layer's layout to control label casing:
javascript
map.addLayer({
id: 'my-labels',
type: 'symbol',
source: 'my-source',
layout: {
'text-field': ['get', 'name'],
'text-transform': 'uppercase', // 'none' | 'uppercase' | 'lowercase'
}
});Update at Runtime ​
javascript
// Apply to a specific layer
map.setLayoutProperty('my-labels', 'text-transform', 'uppercase');
// Apply to ALL symbol layers in the style
map.getStyle().layers.forEach(layer => {
if (layer.type === 'symbol') {
map.setLayoutProperty(layer.id, 'text-transform', 'uppercase');
}
});Values ​
| Value | Effect |
|---|---|
'none' | Use the text as-is from the data (default) |
'uppercase' | Convert all characters to uppercase |
'lowercase' | Convert all characters to lowercase |
Data-Driven Case (per feature) ​
javascript
'text-transform': [
'match',
['get', 'type'],
'highway', 'uppercase',
'suburb', 'lowercase',
'none' // default
]Complete Example ​
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link href="https://cdn.mapmetrics-atlas.net/versions/latest/mapmetrics-gl.css" rel="stylesheet" />
<script src="https://cdn.mapmetrics-atlas.net/versions/latest/mapmetrics-gl.js"></script>
<style>#map { height: 500px; width: 100%; }</style>
</head>
<body>
<div id="map"></div>
<button id="none">Default</button>
<button id="upper">UPPERCASE</button>
<button id="lower">lowercase</button>
<script>
const map = new mapmetricsgl.Map({
container: 'map',
style: '<StyleFile_URL_with_Token>',
center: [10, 50],
zoom: 4
});
function setCase(val) {
map.getStyle().layers.forEach(layer => {
if (layer.type === 'symbol') {
map.setLayoutProperty(layer.id, 'text-transform', val);
}
});
}
map.on('load', () => {
document.getElementById('none').addEventListener('click', () => setCase('none'));
document.getElementById('upper').addEventListener('click', () => setCase('uppercase'));
document.getElementById('lower').addEventListener('click', () => setCase('lowercase'));
});
</script>
</body>
</html>jsx
import React, { useEffect, useRef } from 'react';
import mapmetricsgl from '@mapmetrics/mapmetrics-gl';
import '@mapmetrics/mapmetrics-gl/dist/mapmetrics-gl.css';
const ChangeLabelCase = () => {
const mapContainer = useRef(null);
const map = useRef(null);
useEffect(() => {
if (map.current) return;
map.current = new mapmetricsgl.Map({
container: mapContainer.current,
style: '<StyleFile_URL_with_Token>',
center: [10, 50],
zoom: 4
});
return () => { map.current?.remove(); map.current = null; };
}, []);
const setCase = (val) => {
if (!map.current) return;
map.current.getStyle().layers.forEach(layer => {
if (layer.type === 'symbol') {
map.current.setLayoutProperty(layer.id, 'text-transform', val);
}
});
};
const btnStyle = (bg) => ({
padding: '8px 14px', background: bg, color: 'white',
border: 'none', borderRadius: 6, cursor: 'pointer'
});
return (
<div>
<div ref={mapContainer} style={{ height: '500px', width: '100%' }} />
<div style={{ marginTop: 10, display: 'flex', gap: 8 }}>
<button onClick={() => setCase('none')} style={btnStyle('#6b7280')}>Default</button>
<button onClick={() => setCase('uppercase')} style={btnStyle('#3b82f6')}>UPPERCASE</button>
<button onClick={() => setCase('lowercase')} style={btnStyle('#8b5cf6')}>lowercase</button>
</div>
</div>
);
};
export default ChangeLabelCase;For more information, visit the MapMetrics GitHub repository.