当前位置: 首页 > news >正文

MapLibre GL JS第52课:显示和样式化富文本标签

📌 学习目标

  • 掌握显示和样式化富文本标签的实现方法
  • 理解相关API的使用
  • 能够独立完成类似功能开发

🎯 核心概念

显示和样式化富文本标签。

💻 完 整 代 码

代码示例

<!DOCTYPEhtml><htmllang="en"><head><title>Display and style rich text labels</title><metaproperty="og:description"content="使用 format 表达式以英文和当地语言显示国家标签。"/><metaproperty="og:created"content="2023-06-27"/><metacharset='utf-8'><metaname="viewport"content="width=device-width, initial-scale=1"><linkrel='stylesheet'href='https://unpkg.com/maplibre-gl@5.24.0/dist/maplibre-gl.css'/><scriptsrc='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><!-- The lang attribute is read from the map container if present, otherwise from the HTML document --><divid="map"lang="zh-HK"></div><script>maplibregl.setRTLTextPlugin('https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.3.0/dist/mapbox-gl-rtl-text.js');constmap=newmaplibregl.Map({container:'map',// 容器IDstyle:'https://tiles.openfreemap.org/styles/bright',// 样式URLcenter:[17.49,40.01],// 初始位置 [经度, 纬度]zoom:4// 初始缩放级别});map.on('load',()=>{map.setLayoutProperty('label_country','text-field',['format',['get','name_en'],{'font-scale':1.2},'\n',{},['get','name'],{'font-scale':0.8,'text-font':['literal',['Noto Sans Regular']]}]);});</script></body></html>

🔍 代码解析

初始化地图

使用new maplibregl.Map()创建地图实例,配置基本参数。本示例的核心特色是展示如何使用format表达式创建富文本标签,同时显示英文和当地语言名称。

加载 RTL 插件

maplibregl.setRTLTextPlugin('https://unpkg.com/@mapbox/mapbox-gl-rtl-text@0.3.0/dist/mapbox-gl-rtl-text.js');

关键配置项

  • container: 地图容器的 DOM 元素 ID
  • style: 使用 OpenStreetMap 亮色样式https://tiles.openfreemap.org/styles/bright
  • center: 地图初始中心点[17.49, 40.01](巴尔干半岛区域)
  • zoom: 初始缩放级别为 4,显示区域级别视图

format 表达式配置

map.setLayoutProperty('label_country','text-field',['format',['get','name_en'],// 第一部分:英文名称{'font-scale':1.2},// 英文名称样式:放大1.2倍'\n',// 换行符{},// 换行符不需要样式['get','name'],// 第二部分:当地语言名称{'font-scale':0.8,// 当地语言样式:缩小0.8倍'text-font':['literal',['Noto Sans Regular']]}]);

⚙️ 参数说明

参数类型必填默认值说明
containerstring-地图容器元素的 ID
stylestring/object-地图样式 URL 或内联样式对象
center[number, number][0, 0]初始中心点坐标
zoomnumber0初始缩放级别

format 表达式

参数类型说明
textexpression要显示的文本内容
optionsobject文本样式选项

文本样式选项

属性类型说明
font-scalenumber字体缩放比例
text-fontarray字体名称数组
text-colorstring文本颜色
text-halo-colorstring文本光晕颜色
text-halo-widthnumber文本光晕宽度

🎨 效果说明

运行代码后,地图上的国家标签会以双行富文本形式显示:

  • 第一行: 英文名称(放大1.2倍)
  • 第二行: 当地语言名称(缩小0.8倍,使用 Noto Sans 字体)
  • 示例: 国家标签显示为 “Italy” 在上方,意大利文 “Italia” 在下方

视觉效果:

  • 英文名称更大更突出
  • 当地语言名称作为补充信息
  • 支持 RTL(从右到左)语言(如阿拉伯语、希伯来语)

💡 常 见 问 题

Q1: format 表达式是什么?
A:format表达式允许创建富文本标签,支持多行文本和不同样式的组合。每个文本片段都可以有独立的样式设置。

Q2: 为什么需要 RTL 插件?
A:RTL(Right-to-Left)插件支持从右到左书写的语言,如阿拉伯语、希伯来语等,确保这些语言正确显示。

Q3: 如何添加更多文本样式?
A:format表达式中添加更多的文本和样式对象对:

['format',['get','name'],{'font-scale':1.2},'\n',{},['get','capital'],{'font-scale':0.8,'text-color':'#888'}]

Q4: 可以使用哪些字体?
A:可以使用样式中定义的字体或通过text-font属性指定字体。建议使用支持多语言的字体如 Noto Sans。

📝 练习任务

  1. 基础练习:修改字体大小比例,调整中英文名称的显示效果
  2. 进阶挑战:添加第三行文本显示国家首都
  3. 拓展思考:如何根据国家属性动态改变文本颜色?

🌟 最佳实践

  1. 字体选择: 使用支持多语言的字体(如 Noto Sans)确保各种语言正确显示
  2. 样式层次: 主文本使用较大字体,辅助信息使用较小字体
  3. RTL 支持: 加载 RTL 插件支持从右到左的语言
  4. 性能考虑: 避免过多的文本样式组合,影响渲染性能
  5. 可读性: 确保文本颜色与背景有足够对比度
  6. 语言属性: 使用lang属性帮助浏览器正确处理文本方向

🔗 延伸阅读

  • Map API文档

  • MapLibre GL JS 官方文档

  • [下一课预告]:将继续学习地图图层的基础知识

http://www.jsqmd.com/news/1027219/

相关文章:

  • 2026国内好用的低温脱硝剂生产厂家排名 - 品牌排行榜
  • 拒绝被绑定,基于 SGLang 和 HIPify 构建自主可控的 AI 推理服务
  • 你的PPT没人互动,不是讲得差,而是缺了这一个功能
  • 2026共挤POE耐磨层增强塑料复合管工厂甄选:技术实力与工程适配性深度解析 - 优质品牌商家
  • Ubuntu安装全攻略:从镜像下载到系统配置与问题排查
  • 5个步骤让模糊照片变清晰:ComfyUI-SUPIR超分辨率实战指南
  • 创维E900V22C电视盒子CoreELEC终极改造指南:三步打造专业级家庭媒体中心
  • 【信息科学与工程学】【物理/化学和工程技术】第八十六篇 飞行力学01
  • 杭州房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水
  • 百色漏水检测维修权威推荐:卫生间-厨房-阳台-屋顶天花板漏水维修:靠谱防水补漏公司团队TOP5推荐(2026最新深度调研实测榜单) - 即刻修防水
  • 2026年树脂复合雨篦子厂家实力甄选:从产能到案例的实用选购指南 - 优质品牌商家
  • 无锡全域集装箱移动集成房 | 裕达房屋 租赁・定制・出售 一站式配齐 - 博客万
  • 收藏!小白程序员必备:AI应用开发工程师四大核心能力进阶指南
  • 晋中房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水
  • 秦皇岛漏水检测维修权威推荐:卫生间-厨房-阳台-屋顶天花板漏水维修:靠谱防水补漏公司团队TOP5推荐(2026最新深度调研实测榜单) - 即刻修防水
  • 3分钟掌握AI马赛克神器:DeepMosaics智能图像处理全解析
  • 2026年光敏三极管选购指南:主流品牌技术参数与行业应用深度解析 - 优质品牌商家
  • 讯维全域管控平台|一体化音视频架构,适配政企全场景数字化管控需求
  • 2026年耐用玻璃瓶厂家甄选:多维度对比与行业趋势分析 - 优质品牌商家
  • DeblurGAN-v2: 更快更强的运动去模糊算法【文献解读】
  • OpenClaw Docker部署七层阶梯与生产避坑指南
  • 2026年中济南合同诉讼纠纷律师推荐:闫飞律师以专业实力赢得信赖 - 品牌鉴赏官2026
  • 绘制自定义图形:Shape组件(Circle, Rect, Path)的高级用法(32)
  • 2026年石英片厂家官方甄选指南:高透、耐高温与定制化加工推荐 - 优质品牌商家
  • 2026年国内烘箱烘干机厂家官方甄选:技术实力与工程经验并重的行业推荐 - 优质品牌商家
  • 无锡房屋渗漏水检测维修、卫生间漏水免砸砖维修、漏水点精准检测、厨房漏水防水补漏、正规防水补漏公司、口碑榜TOP5靠谱推荐、本地人必选的防水维修公司 - 安佳防水
  • 裕达集装箱房・移动房屋・集成房屋(无锡全域)|租赁・定制・出租・出售 一站式服务 - 博客万
  • 2026耐用的高分子晶须合金桥架生产商怎么选 - 品牌排行榜
  • 2026年武汉建设工程纠纷法律服务全景解析与核心服务商深度推荐 - 品牌鉴赏官2026
  • 2026年口碑甄选:琴台式防爆正压柜采购指南与厂商对比分析 - 优质品牌商家