
gods-eye-view 交通流测试夹具用真实 TomTom MVT 切片做离线解码与无密钥回归验证【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view本文围绕 gods-eye-view 仓库中 src/data/fixtures/README.md 所记录的测试夹具tomtom-flow-austin-12-935-1686.pbf展开说明这段真实采集的 TomTom 交通流矢量切片如何被用于离线单元测试与无密钥浏览器回归测试。读完本文你将掌握该夹具的来源、数据结构、在decodeFlowTile与切片数学中的用法以及通过qa-traffic --fixtures模式进行确定性验证的完整方法。夹具是什么一段真实的 TomTom 交通流矢量切片仓库的 src/data/fixtures/ 目录中存放着多个测试数据文件其中 tomtom-flow-austin-12-935-1686.pbf 是README.md唯一重点记录的对象。它的关键事实如下属性值文件类型Mapbox Vector TileMVTprotobuf图层名为Traffic flow数据来源TomTom 交通流相对速度切片relative风格地理位置美国奥斯汀市中心downtown Austin切片坐标z12 / x935 / y1686Web Mercator slippy 坐标系采集时间2026-07-16上游地址api.tomtom.com/traffic/map/4/tile/flow/relative/12/935/1686.pbf文件大小22,980 字节版权© TomTom这段数据不是手工构造的假数据而是从 TomTom 上游接口真实抓取并原样归档的响应体。它代表的是2026-07-16 某一时刻的交通拥堵快照point-in-time congestion snapshot这一点在 README 中被反复强调它不是随应用打包的数据图层也不会在应用普通启动时被加载。夹具在仓库中的定位与边界README 明确指出该夹具的两种使用场景离线解码 / 数据源测试offline decode/source tests——不依赖网络与 API Key直接对本地文件做解码断言显式的qa-traffic --fixtures浏览器模式——用于无密钥的确定性回归验证。同时 README 也划清了边界该文件是快照而非数据层普通应用启动流程绝不会读取它。这意味着它只服务于测试路径src/data/fixtures/目录下同级的firms-csv-cases.json、firms-viirs-noaa20-sample.csv也是同类定位的测试数据只是未被 README 展开记录。离线解码验证夹具驱动的单元测试夹具最主要的消费方是 src/data/flowTiles.test.mjs。该测试文件直接读取fixtures/tomtom-flow-austin-12-935-1686.pbf并针对解码函数decodeFlowTile定义于 src/layers/traffic/flowDecode.js做了一系列真实数据断言解码产出量从该夹具中至少解出 50 条以上流线段segments数值域合法每条线段的trafficLevel都在[0, 1]区间内且为有限数——这是 TomTom 当前速度与自由流速度的比值1 表示自由流坐标地理范围所有坐标点都落在奥斯汀范围lon ∈ [-98.0, -97.5]lat ∈ [30.0, 30.5]证明解码结果确实还原为奥斯汀市中心的真实路网拥堵真实存在至少存在一条trafficLevel 1的线段说明夹具携带了真实的拥堵信息结构完整性每条线段形状为{ coords, trafficLevel, roadType, closure }且夹具中至少包含一条closure true的封闭路段覆盖了道路封闭解码分支防御性对非 MVT 缓冲区调用decodeFlowTile返回[]不会抛异常。从解码实现flowDecode.js可以看到细节它用pbf5的PbfReader加mapbox/vector-tile3的VectorTile解析 MVT提取名为Traffic flow的图层缺少或非法的traffic_level字段会被跳过除非road_closure为真封闭路段以 level 0 解码单个损坏 feature 会跳过而非拖垮整个切片。切片数学z12/x935/y1686 从何而来夹具坐标并非随意选取。src/data/tomtomTiles.js 实现了纯函数的 Web Mercator slippy 切片数学lonLatToTile、tileToBBox、tilesForBounds而 src/data/tomtomTiles.test.mjs 用奥斯汀市中心坐标(30.2672, -97.7431)对夹具坐标做了双向验证lonLatToTile(-97.7431, 30.2672, 12)精确得到{x: 935, y: 1686}与夹具文件名一致tileToBBox(12, 935, 1686)的包围盒包含奥斯汀市中心且中心点经lonLatToTile往返计算仍回到{x: 935, y: 1686}以该坐标为中心的 0.05° 视口经tilesForBounds计算返回 14 个切片且必然包含夹具切片横跨切片边界的包围盒返回[935, 936]两个切片验证了切片枚举的正确性。此外tomtomTiles.js还承载了代理侧的预算账本逻辑utcDayKey、normalizeBudget、isOverBudget由 tomtomTiles.test.mjs 覆盖UTC 日期键格式、跨日清零、损坏状态重置、达到软上限后拒绝请求等。这套数学是零依赖、无 Cesium的客户端src/data/flowTiles.js与服务端代理可以共享同一份实现做单元测试。无密钥浏览器模式qa-traffic --fixtures夹具的第二个用途是 scripts/qa-traffic.mjs 的--fixtures模式。该脚本本体的头部注释明确了这一模式的设计意图Add--fixturesfor synthetic roads and the recorded flow tile without a key——即不需要 API Key、不触碰上游网络、不消耗配额的确定性验证。其实现机制位于 scripts/traffic-fixtures.mjs启动时用readFileSync读取夹具.pbftrafficFixtureResponse(request)作为 Puppeteer 请求拦截回调把三类请求假造出来/api/tomtom/status→ 返回{hasKey: true, dailyCount: 0}伪装成有密钥的服务端/api/tomtom/flow/{z}/{x}/{y}.pbf→ 原样返回夹具字节Content-Type 为application/x-protobuf/api/overpass中带highway的查询 → 用tilesForBoundsdecodeFlowTile从夹具解出的真实路段坐标合成 synthetic roads截取前 240 条 way并附加一条 residential 路段作为兜底从而在无 Overpass 网络的情况下驱动整个 traffic 图层渲染。关键点在于 scripts/qa-traffic.mjs 与脚本内对夹具模式的刻意区分FIXTURES模式下预算断言(iii)被标记为INCONCLUSIVE并在启动日志中声明 Synthetic source mode; live quota was not exercised——夹具模式不验证实时源访问与配额记账它只负责把渲染链路、参数切换、无密钥降级等行为以确定性的方式跑通。这也与 README point-in-time snapshot 的定性一致。背后的实时链路代理、缓存与预算夹具对应的生产路径夹具是测试替身但它的正主是一条完整的实时链路理解它有助于理解夹具为什么值得被归档。server/providers/traffic.js 是 TomTom 交通流矢量切片的本地代理Vite 插件上游api.tomtom.com/traffic/map/4/tile/flow/relative/{z}/{x}/{y}.pbfKey 只存在于服务端TOMTOM_API_KEY浏览器同源访问/api/tomtom/flow/{z}/{x}/{y}.pbfKey 永不落浏览器缓存内存最多 256 条 磁盘.gev-cache/tomtom/TTL 120 秒每切片单飞single-flight上游失败时 serve-stale缓存命中不计入预算预算治理持久化计数器.gev-cache/tomtom/budget.json按 UTC 日期键控、跨日归零软上限默认TOMTOM_DAILY_TILE_BUDGET 40,000免费档约 5 万/天超限后有旧数据则发STALE-BUDGET否则返回429 {error:budget}无密钥降级/api/tomtom/status返回{hasKey:false, ...}tile 端点返回503 {error:no_key}且不触上游traffic 图层据此进入模拟模式——qa-traffic的(v)场景正是用请求拦截伪造{hasKey:false}来验证这一降级路径包括零 flow 请求发出与loadingLabel 以 SIMULATED 开头。客户端侧src/data/flowTiles.js 通过 src/layers/traffic/flowSource.js 的createFlowTileSource拿到fetchFlowForBounds按tilesForBounds并行拉取覆盖切片、在客户端解码、以z/x/y为键缓存 120 秒最多 64 条最旧淘汰局部失败返回已解码部分last-good全部失败才 reject。flowTiles.test.mjs用夹具验证了请求路径/api/tomtom/flow/12/935/1686.pbf、缓存命中不再二次请求、AbortSignal中止与 503 拒绝等行为。如何运行这些验证夹具相关的验证无需任何 API Key可直接在仓库根目录执行# 离线解码与切片数学单元测试node:test node --test src/data/flowTiles.test.mjs src/data/tomtomTiles.test.mjs # 无密钥浏览器回归合成路网 录制切片需要已启动的 dev server node scripts/qa-traffic.mjs --url http://localhost:4410 --fixtures运行qa-traffic --fixtures时脚本会以--use-glangle --use-angleswiftshader等参数启动无头 Chromium优先使用 Puppeteer 版本固定的 Chrome-for-Testing见 scripts/qa-traffic.mjs 的注释说明驱动真实应用跑完 live 模式、uncoveredRoads参数切换、斜视取景框、预算诚实性与无密钥降级五组断言并输出qa-shots/traffic-*.png截图gitignored任何 FAIL 都会以非零退出码结束。使用与分发注意README 在结尾标注了© TomTom这提示了夹具的许可边界它是从 TomTom 公开接口采集的样本数据仅供仓库内离线测试与验证使用不应作为随应用分发的数据图层也不应被普通启动流程加载。如需扩展测试覆盖可在遵守上游许可的前提下按同样的方式录制新切片如其他城市、其他 zoom 级别并在 src/data/fixtures/README.md 中补充来源、坐标、采集时间与大小等元信息保持测试数据的可追溯性。【免费下载链接】gods-eye-viewA spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.项目地址: https://gitcode.com/GitHub_Trending/go/gods-eye-view创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考