Files
2026-11-05 01:04:53 +08:00

4.6 KiB
Raw Permalink Blame History

数据格式

最小地铁图

{
  "mode": "metro",
  "title": "研究方法地图",
  "subtitle": "示意分类,不表示时间或推荐排名",
  "routes": [
    {"id":"qual","label":"定性","code":"A","color":"#208a87","stops":["interview","synthesis"]},
    {"id":"quant","label":"定量","code":"B","color":"#3d64a3","stops":["survey","synthesis"]}
  ],
  "nodes": [
    {"id":"interview","label":"访谈"},
    {"id":"survey","label":"问卷"},
    {"id":"synthesis","label":"综合证据","major":true}
  ]
}

顶层字段

字段 含义
mode metro 或 timeline,默认前者
title, subtitle 主标题、解释性副标题
eyebrow, footer 页眉分类、来源/语义/刻度说明
routes, nodes 非空数组,下面说明
layout 可选尺寸与布局参数
theme.paper 背景色,#RRGGBB,默认米白
links 可选明确关联,{"from":"节点ID","to":"节点ID","label":"关系依据"};画为细灰箭头,不自动创造
eras 时间图背景,{"start":1800,"end":1900,"label":"阶段"};范围必须在时间轴内
ticks 时间图的刻度数字数组,不得超出节点时间范围

线路

id 唯一;label 显示名称;code 用短字母或数字;color 为 #RRGGBB;group 是图例栏目标题;stops 是节点 ID 的有序列表,非空、同一线路内不重复。

所有线路的 stops 共同定义归属;没有节点侧的第二套 routes 字段。多条线路引用同一个 ID 就是换乘节点。所有节点至少属于一条线路。

可选 offsets 控制横向弯道,如 [[0,0],[0.25,0],[0.45,-50],[0.75,-50],[1,0]]。地铁图默认省略此字段,保持主干笔直。每对值是 [纵向归一化位置,水平偏移像素],位置 0/1 为全图首/末事件,严格递增并限制在 0—1。端部保持最近值,相邻点以平滑三次曲线连接;站点按同一函数定位。偏移不是自动布线,过大的偏移会造成相撞或换序,需看图调整。

节点

字段 含义
id 唯一、非空、稳定字符串
label 主名称,默认 ID
detail 可选一行说明,不自动换行
major true 时强调文字和站点
order metro 排序优先值;只在满足线路先后约束的节点中生效,默认输入数组顺序
time timeline 必需有限数字,负数年代需解释记年法
label_side left / right 优先方向;冲突时可自动反向
label_dy 标签垂直偏移像素;设置后不再尝试其他垂直偏移,仍可反向、移到侧栏

共享节点是所有所属线路上的同一事件;名称相似或发生时间不同的条目应使用不同 ID,再以明确关联连接。

布局

字段 默认 含义
width 1320 需容纳全部线路、文字和侧栏
lane_gap 86 相邻线路横向间距,最小 32
row_gap 66 metro 站点纵距,最小 36;高度按节点数计算
font_size 17 节点字号,最小 8
lane_order routes 顺序 所有线路 ID 的完整排列
height 2050 timeline 高度,metro 忽略
time_scale 全范围线性 timeline 分段映射

地铁图使用稳定拓扑排序,每个节点占一个纵向层级。当前版本不把独立节点压到同一行,也不做线路邻接的全局优化;可通过 lane_order、输入节点顺序和弯道进行编辑。

时间图每条线路按时间升序列出站点,同年事件允许并排,范围不能只有一个值。可用 "time_scale":[[1800,0],[1900,0.28],[1950,0.59],[2000,1]]。第一对必须为 [最早节点时间,0],最后为 [最晚节点时间,1],两列严格递增;相邻区段内线性插值。图中须注明压缩区段,脚本不自行决定压缩哪些年代。不能为避让修改年代。

输出与返回值

  • SVG:真实文字、路径和几何节点,保留 data-route / data-node,字体未嵌入。
  • .report.json:尺寸、数量、节点坐标、标签侧向/偏移/估计包围框、提示列表。
  • label_needs_review:估计标签碰撞、越界或穿越线路;要修正并看图复核。
  • overpass:非成员线路从共享胶囊上方通过,是信息提示;只有圆环表示归属。
  • route_outside:线路越界,需要调整偏移或加宽。
  • 退出码:0 成功;1 输入/文件错误;2 --strict 发现待复核问题。报告不是像素级碰撞证明。

额外来源字段可放入节点或关联,渲染器忽略它们,源 JSON 应保留以便追溯。只把经过核实或用户明确给出的关系加入 links。