用途:解决 MapLibre 地图文字标注不渲染、字体错误、自托管 glyphs、离线渲染及非拉丁文字支持等问题。MapLibre 默认不使用本机字体,而是从 style 的 glyphs 字段指向的服务器获取预计算的 SDF 字形文件。
主要能力与用法:glyphs 是形如 https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf 的 URL 模板,{fontstack} 为 text-font 逗号列表,{range} 为 Unicode 范围。GL JS ≥ 5.11.0 起,glyphs 缺失或某个 PBF 加载失败时不再致命,改用 TinySDF 本地渲染,text-font 按本地/网页字体列表解析;但该回退仅限 GL JS,跨端一致仍应显式提供 glyphs。Native 不支持省略 glyphs,改用 font-faces 属性(Android ≥ 11.13.0、iOS ≥ 6.18.0),手动把 text-font 名映射到本地字体文件并指定 Unicode 范围,两套机制不可互移。
字体来源:demotiles.maplibre.org/font 提供 Noto Sans 系列,适合原型;OpenMapTiles 提供 Klokantech Noto Sans;标准字体可直接复制现有 {fontstack}/{range}.pbf 目录自托管,或用 openmaptiles/fonts、UNDP-Data/fonts;自定义字体才需用 Font Maker 或 fontnik 从 TTF/OTF 生成 PBF。text-font 名称必须与服务器字体栈目录名完全一致。
非拉丁文字:CJK 默认由 localIdeographFontFamily(默认 'sans-serif')在设备端生成,text-font 被忽略(权重关键字除外),不要提供 CJK glyph PBF;设为 false 会恢复服务端字形但明显变慢。阿拉伯文、希伯来文、泰文等需在 text-font 回退列表加入对应 Noto 字体并提供 PBF。阿拉伯文和希伯来文还需在初始化地图前调用 setRTLTextPlugin('https://unpkg.com/maplibre-gl/dist/maplibre-gl-rtl-text.js', null, true)。天城文、高棉文等需要连字与重排的脚本,因 MapLibre 无整形引擎(无 HarfBuzz/Raqm),仅提供正确字体 PBF 也无法正确显示,目前无配置修复。
限制:本地回退效果依赖操作系统与浏览器;Native 与 GL JS 的本地字体方案互不兼容;具体收费、价格与平台信息暂未提供。