📌 学习目标
- 掌握改变标签大小写的实现方法
- 理解相关API的使用
- 能够独立完成类似功能开发
🎯 核心概念
改变标签文本的大小写。
💻 完 整 代 码
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<title>Change the case of labels</title>
<meta property="og:description" content="使用 upcase 和 downcase 表达式更改标签的大小写。" />
<meta property="og:created" content="2025-06-25" />
<meta charset='utf-8'>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel='stylesheet' href='https://unpkg.com/maplibre-gl@5.24.0/dist/maplibre-gl.css' />
<script src='https://unpkg.com/maplibre-gl@5.24.0/dist/maplibre-gl.js'></script>
<style>
body { margin: 0; padding: 0; }
html, body, #map { height: 100%; }
</style>
</head>
<body>
<div id="map"></div>
<script>
const map = new maplibregl.Map({
container: 'map', // 容器ID
style: 'https://tiles.openfreemap.org/styles/bright', // 样式位置
center: [-116.231, 43.604], // 初始位置 [经度, 纬度]
zoom: 11 // 初始缩放级别
});
map.on('load', () => {
// 数据来自 https://opendata.cityofboise.org/
map.addSource('off-leash-areas', {
'type': 'geojson',
'data':
'https://maplibre.org/maplibre-gl-js/docs/assets/boise.geojson'
});
map.addLayer({
'id': 'off-leash-areas',
'type': 'symbol',
'source': 'off-leash-areas',
'layout': {
'icon-image': 'dog_park',
'text-field': [
'format',
['upcase', ['get', 'FacilityName']],
{'font-scale': 0.8},
'\n',
{},
['downcase', ['get', 'Comments']],
{'font-scale': 0.6}
],
'text-font': ['Noto Sans Regular'],
'text-offset': [0, 0.6],
'text-anchor': 'top'
}
});
});
</script>
</body>
</html>
🔍 代码解析
1. 初始化地图
使用 new maplibregl.Map() 创建地图实例,配置了基础地图样式和爱达荷州博伊西市区域。
2. 关键配置项
- upcase: 将文本转换为大写的表达式函数
- downcase: 将文本转换为小写的表达式函数
- format: 组合多个文本块和格式选项的表达式函数
- text-offset: 标签相对于图标的垂直偏移量
⚙️ 参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| upcase | expression | 是 | 将文本转换为大写 |
| downcase | expression | 是 | 将文本转换为小写 |
| font-scale | number | 否 | 字体缩放比例,默认1 |
| text-offset | array | 否 | 标签偏移量 [x, y] |
| text-anchor | string | 否 | 标签锚点位置 |
🎨 效果说明

运行代码后,地图显示博伊西市的off-leash区域(狗狗公园)。标签显示两行文本:
- 第一行(设施名称):使用大写显示,字号较大(0.8倍)
- 第二行(评论信息):使用小写显示,字号较小(0.6倍)
标签位于图标下方,形成清晰的信息层次。
💡 常 见 问 题
Q1: upcase/downcase表达式不生效?
A: 确保数据属性存在且为字符串类型:
['upcase', ['get', 'FacilityName']] // 正确
['upcase', ['get', 'id']] // 如果id是数字则不会生效
Q2: 如何实现首字母大写?
A: 当前版本不支持直接的首字母大写函数,但可以通过组合表达式实现:
// 将首字母大写,其余小写
['concat',
['upcase', ['slice', ['get', 'name'], 0, 1]],
['downcase', ['slice', ['get', 'name'], 1]]
]
Q3: format表达式的结构是怎样的?
A: format表达式采用交替结构:[文本, 格式选项, 文本, 格式选项, …]
['format',
'Hello', {'font-scale': 1.2},
'\n', {},
'World', {'font-scale': 0.8, 'text-color': '#ff0000'}
]
📝 练习任务
- 基础练习:修改font-scale参数,调整两行文本的大小比例
- 进阶挑战:添加第三行文本,使用不同的大小写转换和格式
- 拓展思考:如何根据数据属性动态决定使用大写还是小写?
- 综合实践:创建一个标签样式切换功能,允许用户选择大小写显示方式
🌟 最佳实践
- 信息层次: 使用大小写和字号区分主要信息和次要信息
- 一致性: 保持同一图层中大小写风格的一致性
- 可读性: 全大写文本在长文本时可读性较差,适用于短标签
- 国际化: 注意某些语言(如中文、日文)没有大小写概念
- 表达式组合: 灵活组合upcase/downcase与其他表达式函数实现复杂效果
🔗 延伸阅读
-
[下一课预告]:将继续学习地图图层的基础知识
525

被折叠的 条评论
为什么被折叠?



