MapLibre GL JS第55课:改变标签大小写

📌 学习目标

  • 掌握改变标签大小写的实现方法
  • 理解相关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: 标签相对于图标的垂直偏移量

⚙️ 参数说明

参数类型必填说明
upcaseexpression将文本转换为大写
downcaseexpression将文本转换为小写
font-scalenumber字体缩放比例,默认1
text-offsetarray标签偏移量 [x, y]
text-anchorstring标签锚点位置

🎨 效果说明

在这里插入图片描述

运行代码后,地图显示博伊西市的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'}
]

📝 练习任务

  1. 基础练习:修改font-scale参数,调整两行文本的大小比例
  2. 进阶挑战:添加第三行文本,使用不同的大小写转换和格式
  3. 拓展思考:如何根据数据属性动态决定使用大写还是小写?
  4. 综合实践:创建一个标签样式切换功能,允许用户选择大小写显示方式

🌟 最佳实践

  1. 信息层次: 使用大小写和字号区分主要信息和次要信息
  2. 一致性: 保持同一图层中大小写风格的一致性
  3. 可读性: 全大写文本在长文本时可读性较差,适用于短标签
  4. 国际化: 注意某些语言(如中文、日文)没有大小写概念
  5. 表达式组合: 灵活组合upcase/downcase与其他表达式函数实现复杂效果

🔗 延伸阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丷丩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值