首页/新闻资讯/正文详情

Node 批量下载 Geoscene / ArcGIS 字体(pbf)完整方案

发布时间:2026/9/25 1:28:37 来源:云帆数科 栏目:资讯中心
Node 批量下载 Geoscene / ArcGIS 字体(pbf)完整方案
在使用 Geoscene / ArcGIS JS API 开发地图应用时经常会遇到一个问题❗字体资源依赖远程doc.geoscene.cn在内网或网络受限环境下无法加载最终导致✔ 点正常显示❌ 中文标注不显示❌ TextSymbol 无效 一、Node 批量下载字体核心思路 将远程 fonts 资源批量下载到本地/public/fonts 二、目标结构最终项目结构public/ fonts/ arial-unicode-ms-regular/0-255.pbf256-511.pbf...19968-20223.pbf⚙️ 三、Node 下载脚本完整可用 download-fonts.jsconstfsrequire(fs);constpathrequire(path);consthttpsrequire(https);// 字体 Unicode 区间精简中文覆盖constranges[0-255,256-511,512-767,768-1023,1024-1279,1280-1535,1536-1791,1792-2047,2048-2303,2304-2559,19968-20223,20224-20479,20480-20735,20736-20991,20992-21247];// 字体源 constbaseUrlhttps://doc.geoscene.cn/resources/fonts/arial-unicode-ms-regular/;// 输出目录 constoutDirpath.resolve(__dirname,public/fonts/arial-unicode-ms-regular);fs.mkdirSync(outDir,{recursive:true});// 下载函数带重试functiondownload(url,filePath,retry2){returnnewPromise((resolve){constfilefs.createWriteStream(filePath);https.get(url,(res){if(res.statusCode!200){console.log(❌ missing:,url);file.close();if(fs.existsSync(filePath))fs.unlinkSync(filePath);returnresolve(false);}res.pipe(file);file.on(finish,(){file.close();console.log(✔,path.basename(filePath));resolve(true);});}).on(error,async(){if(retry0){console.log( retry:,url);resolve(awaitdownload(url,filePath,retry-1));}else{console.log(❌ failed:,url);resolve(false);}});});}// 主流程 asyncfunctionrun(){console.log(\n Start downloading fonts...\n);letsuccess0;letfail[];for(constrofranges){consturl${baseUrl}${r}.pbf;constfilePathpath.join(outDir,${r}.pbf);constokawaitdownload(url,filePath);if(ok)success;elsefail.push(r);}console.log(\n);console.log( DOWNLOAD COMPLETE);console.log(✔ success:,success);console.log(❌ failed:,fail.length);if(fail.length){console.log(\n⚠ missing ranges:);console.log(fail);}console.log(\n output:,outDir);}run();▶️ 四、使用方法1️⃣ 放入项目根目录或者新建空文件夹执行下载之后将下载的文件拷贝到需要的地方。download-fonts.js2️⃣ 执行下载nodedownload-fonts.js3️⃣ 输出结果✔0-255.pbf ✔19968-20223.pbf...⚙️ 七、前端配置1️⃣ 设置 fontsUrlimportesriConfigfromgeoscene/config;esriConfig.fontsUrl/fonts;2️⃣ TextSymbol 使用importTextSymbolfromgeoscene/symbols/TextSymbol;constsymbolnewTextSymbol({text:朝阳区,color:black,font:{family:arial-unicode-ms-regular,size:12}}); 八、关键优化点✔ 1. 为什么要 Node 下载相比手动下载方式问题手动下载易漏文件浏览器点下载慢 不完整Node脚本✔ 自动化 可重复✔ 2. 为什么要分区间Geoscene 使用glyph 分片加载机制Unicode区间 → 对应 pbf 文件✔ 3. 必须包含中文区间19968–21247 ✔ 必须否则❌ 中文直接空白无报错 九、常见坑总结❌ 1. fontsUrl 没配esriConfig.fontsUrl/fonts;❌ 必须❌ 2. 少区间文件 表现中文部分缺字无报错❌ 3. 仍访问 doc.geoscene.cn 说明本地 fonts 没生效 十、总结Node 下载字体的核心价值 将 Geoscene 依赖的远程字体资源本地化最终实现✔ 离线可用✔ 中文完整显示✔ 不依赖 doc.geoscene.cn✔ 企业可部署

相关推荐

lavish-axi接入Claude Code等Agent的4种方式:skill、hook与plugin完整指南
lavish-axi接入Claude Code等Agent的4种方式:skill、hook与plugin完整指南

lavish-axi接入Claude Code等Agent的4种方式:skill、hook与plugin完整指南 【免费下载链接】lavish-axi HTML is the new markdown. Lavish is the new editor for your HTML artifacts. 项目地址: https://gitcode.com/gh_mirrors/la/lavish-axi lavish-axi… · 2026/9/25 1:28:25

拆解 easy-loading-cj 核心:EasyLoading 组件如何用 Stack + 遮罩承载 27 种动画
拆解 easy-loading-cj 核心:EasyLoading 组件如何用 Stack + 遮罩承载 27 种动画

拆解 easy-loading-cj 核心:EasyLoading 组件如何用 Stack 遮罩承载 27 种动画 【免费下载链接】easy-loading-cj easy-loading提供多种 loading/Toast 动画加载效果 项目地址: https://gitcode.com/Cangjie-TPC/easy-loading-cj easy-loading-cj 是一个基于… · 2026/9/25 1:28:25

mp3-module TF卡音乐命名指南:0001.wav文件格式与按名播放的差异一次讲清
mp3-module TF卡音乐命名指南:0001.wav文件格式与按名播放的差异一次讲清

mp3-module TF卡音乐命名指南:0001.wav文件格式与按名播放的差异一次讲清 【免费下载链接】CupCode_mp3模块 源师兄扩展项目: MP3模块 | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/mp3-module 源师兄的 CupCode_mp3 模块是面向源师兄板的… · 2026/9/25 1:28:25

Apache Beam 社区指标同步:基于 GitHub GraphQL API 的 PR/Issue 数据采集与 PostgreSQL 落地实践
Apache Beam 社区指标同步:基于 GitHub GraphQL API 的 PR/Issue 数据采集与 PostgreSQL 落地实践

大数据批处理流处理数据工程 【免费下载链接】beam Apache Beam is a unified programming model for Batch and Streaming data processing. 项目地址: https://gitcode.com/gh_mirrors/beam4/beam 点击查看 免费下载 本文以 Apache Beam 仓库中 .test-infra/metr… · 2026/9/25 2:05:53

Miller 压缩数据处理实战:GZIP/BZIP2/ZLIB/ZSTD 输入自动检测、`--prepipe` 外部解压与压缩输出完全指南
Miller 压缩数据处理实战:GZIP/BZIP2/ZLIB/ZSTD 输入自动检测、`--prepipe` 外部解压与压缩输出完全指南

CLI数据分析 【免费下载链接】miller Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON 项目地址: https://gitcode.com/gh_mirrors/mi/miller 点击查看 免费下载 本篇技术指南以 Miller 官方文档 referen… · 2026/9/25 2:05:53

Godot-MCP 代码实现解析:execute_editor_script 如何动态执行任意 GDScript
Godot-MCP 代码实现解析:execute_editor_script 如何动态执行任意 GDScript

Godot-MCP 代码实现解析:execute_editor_script 如何动态执行任意 GDScript 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/… · 2026/9/25 2:05:53

react-vis BarSeries 完全指南:用 VerticalBarSeries / HorizontalBarSeries 构建柱状图与堆叠柱状图
react-vis BarSeries 完全指南:用 VerticalBarSeries / HorizontalBarSeries 构建柱状图与堆叠柱状图

数据可视化图表库前端 【免费下载链接】react-vis Data Visualization Components 项目地址: https://gitcode.com/gh_mirrors/re/react-vis 点击查看 免费下载 导读 Bar Series(柱状系列)是 react-vis 中用于绘制矩形柱体的核心系列组件&a… · 2026/9/25 2:05:46

IMU外参静态标定:智能小车多传感器融合的精度基石
IMU外参静态标定:智能小车多传感器融合的精度基石

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:05:34

OCLP-Mod 启动流程全解析:从 OpenCore 启动选择器到系统装好的每一步
OCLP-Mod 启动流程全解析:从 OpenCore 启动选择器到系统装好的每一步

OCLP-Mod 启动流程全解析:从 OpenCore 启动选择器到系统装好的每一步 【免费下载链接】OCLP-Mod A mod version for OCLP,with more interesting features. 项目地址: https://gitcode.com/gh_mirrors/oc/OCLP-Mod OCLP-Mod 是一款基于 OpenCore Legacy Patc… · 2026/9/25 2:05:34

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码