联机调试
RTT {{collabPerf.rttLast.toFixed(1)}} ms · ↑ {{collabPerf.uplinkLast.toFixed(1)}} · SRV {{collabPerf.serverLast.toFixed(3)}} · ↓ {{collabPerf.downlinkLast.toFixed(1)}} ms
RELAY {{collabPerf.relayServerLast.toFixed(3)}} ms · APPLY {{collabPerf.applyLast.toFixed(1)}} · RENDER {{collabPerf.renderLast.toFixed(1)}} ms
PATCH {{collabPerf.patchBytes}} B / {{collabPerf.patchOps}} ops · SNAP {{collabPerf.snapshotBytes}} B
TAKEOVER {{collabPerf.hostTakeoverLast ? 'YES' : 'NO'}} ×{{collabPerf.hostTakeoverCount}}
渲染调试
模式:{{ canvasRenderEnabled ? canvasRendererStatus.mode : 'SVG 回退 / Canvas 已关闭' }}
状态:Ready {{ canvasRendererStatus.ready ? '是' : '否' }} · Frame {{ canvasRendererStatus.hasFrame ? '是' : '否' }} · Offscreen {{ canvasRendererStatus.offscreen ? '是' : '否' }} · WASM {{ canvasRendererStatus.wasm ? '是' : '否' }}
总耗时:{{ Number(canvasRendererStatus.lastRenderMs || 0).toFixed(1) }} ms · Vector {{ Number(canvasRendererStatus.debug?.timing?.vectorTotalMs || 0).toFixed(1) }} · Blit {{ Number(canvasRendererStatus.debug?.timing?.blitMs || 0).toFixed(1) }} · Cache {{ canvasRendererStatus.debug?.cacheHit ? '命中' : '重建' }}
主线程快照:{{ Number(canvasRendererStatus.debug?.snapshotBuildMs || 0).toFixed(1) }} ms(线 {{ Number(canvasRendererStatus.debug?.snapshotBuild?.linesMs || 0).toFixed(1) }} / 名 {{ Number(canvasRendererStatus.debug?.snapshotBuild?.namesMs || 0).toFixed(1) }} / 站 {{ Number(canvasRendererStatus.debug?.snapshotBuild?.stationsMs || 0).toFixed(1) }})
Worker 分层:线 {{ Number(canvasRendererStatus.debug?.timing?.linesMs || 0).toFixed(1) }} ms · 名 {{ Number(canvasRendererStatus.debug?.timing?.namesMs || 0).toFixed(1) }} ms · 站 {{ Number(canvasRendererStatus.debug?.timing?.stationsMs || 0).toFixed(1) }} ms · 地形 {{ Number(canvasRendererStatus.debug?.timing?.terrainsMs || 0).toFixed(1) }} ms
数量:线 {{ canvasRendererStatus.debug?.totals?.lines || 0 }} / 图层 {{ canvasRendererStatus.debug?.snapshotCounts?.lineLayers || 0 }} · 名 {{ canvasRendererStatus.debug?.totals?.names || 0 }} · 站 {{ canvasRendererStatus.debug?.totals?.stations || 0 }} · 地形 {{ canvasRendererStatus.debug?.totals?.terrains || 0 }}
实绘:线图层 {{ canvasRendererStatus.debug?.counts?.lineLayersDrawn || 0 }}/{{ canvasRendererStatus.debug?.counts?.lineLayersTested || 0 }} · 名 {{ canvasRendererStatus.debug?.counts?.namesDrawn || 0 }}(LOD 隐藏 {{ canvasRendererStatus.debug?.counts?.namesHiddenByLod || 0 }})· 站 {{ canvasRendererStatus.debug?.counts?.stationsDrawn || 0 }}(简化 {{ canvasRendererStatus.debug?.counts?.stationsSimplified || 0 }})
参数:DPR {{ Number(canvasRendererStatus.cacheDpr || 1).toFixed(2) }} · 边距 {{ Math.round(Number(canvasRendererStatus.cacheMargin || 0)) }} px · Path {{ canvasRendererStatus.debug?.pathCache || 0 }} · Bounds {{ canvasRendererStatus.debug?.boundsCache || 0 }} · 快速变换 {{ canvasFastTransformActive ? '开启' : '关闭' }}
错误:{{ canvasRendererStatus.lastError }}
{{ collabBlockingNotice }}
{{ collabRole==='none' ? '本地聊天' : '多人联机聊天' }}{{ collabRole==='none' ? '当前存档' : (collabRoomName || '当前房间') }}
上滑加载更早的 50 条消息
没有更早消息
{{ msg.username || '未知用户' }}
正在更新切片数据
{{namerBulkUpdateStatus || '请稍候…'}}
更新完成或失败后会自动恢复操作。
⚠️ 可用 Worker 数量为 0
交互计算已回退到主线程,点选、吸附和拖动可能明显变慢。此警告会持续显示,直到线程池恢复。
错误:{{ interactionWorkerStatus.lastError }}
1km
{{ scale1kmPx.toFixed(1) }}px
{{ fixedPxLength }}px
{{ scaleFixedKm.toFixed(2) }}km
{{ paxFlowViewSlotText }}
流量视图
当前显示全网 OD 近似流量。左键点击车站可筛选该站的进/出站流向。
样本线段 {{ paxRankNumber(stationFlowOverlayState.items?.length || 0) }},匹配线路 {{ paxRankNumber(stationFlowOverlayState.stats?.matchedSegments || 0) }},当前绘制 {{ paxRankNumber(viewDataLines.filter(x => x.stationFlowOverlay).length) }}。
{{ stationFlowOverlayState.note }}
地图选项
经度:{{ namerMapMenu.lon.toFixed(6) }}
纬度:{{ namerMapMenu.lat.toFixed(6) }}
切片:{{ namerMapMenu.tile }}
{{ dt.name }} {{ seg.text }} {{ n.nm.name }} {{ n.nm.name }} {{ stationFlowHighlight.label.text }} {{ measureDist.toFixed(2) }} km {{ alignPreviewLine.label }} {{ lineAddPreview.mileageText }} {{ pt.label }} {{ d.text }}
编辑市中心
可直接拖动地图上的橘黄色市中心点来修改位置。
={{ historyBrushTimeValue }} 已选起点→点终点
选择线路:
图例绑组:{{ labelGroupFirstId==null ? '点第一个图例' : '已选第一个,点第二个图例' }} 右键橙色绑组线解绑,Esc 退出。
{{ exitTransferFirstPtId==null ? '点第一个车站点' : '已选第一个,点第二个车站点' }} 右键连线解绑,Esc 退出。
新站换乘半径 {{ minTransferDistance }}
事件判定半径
{{ data.historyMode ? '发展史时间' : '时间轴' }} {{ formatHistoryTime(data.historyTime) }}
注意你的状态
没有更多按钮

文件

存档生命周期、导入、导出与辅助工具

💾 当前存档

存档名:

🔄 存档坐标模式转换

将创建新存档,原存档保留不变

✨ 新建 / 打开存档

用表格查看存档信息、收藏和打开。

🔗 存档合并

只能合并同模式存档。架空模式会自动把新存档放到当前存档右侧。
从已有存档合并
已选:{{concatWorkName}}
从JSON文件合并

📥 工程 / 外部格式导入

工程 JSON
AARC 实际走向
直接保留 AARC 实际点位并转换线路、地形、样式、分段和站团信息。
SVG 反演
从之前导出的 SVG 恢复线路走向、车站和站名;结果为架空模式存档,功能实验性。
MetroEase
自动识别架空 / 现实模式。
aaanmoc 模组 JSON
导入格式包含 stations / routes。默认按架空模式导入,MC 的 x/z 坐标会按倍率转换为公里坐标。

📦 工程 / AARC 导出

AARC 自动变形图为实验功能;“实际走向”按当前线路曲线采样为折线。

🖨️ SVG / 图像导出

普通 SVG
导出视图独立于当前画面;无时间结果只支持七天日均视图。
导出带区间站距
区间站距当前为固定屏幕字号;请先到“设置”开启“区间站距跟随画布缩放”。
突出线路
时间点
= {{ previewHistoryTimeExpr(data.exportConfig.historyTimeExpr) }}
其他图像

📋 文本 / 辅助导出

{{ dataWikiHistoryTimeLabel }}
{{ formatDataWikiHistoryDate(dataWikiHistoryRange.min) }} {{ formatDataWikiHistoryDate(dataWikiHistoryRange.max) }}
这里的时间设置只用于本次数据文本导出/复制,独立于左侧工具里的发展史开关,不写入存档。
复制失败时可打开手动复制面板。

👥 客流粗估

第六十五阶段:仅支持现实模式。读取与 KL 共用的密度图数据,调用 KL 有效值 worker/WASM;生成阶段不生成乘客个体,而是按起点连续生成率,经目的地概率模型分配到“起点-终点-KL乘客类型pt”时间桶。寻路聚合使用 packed OD 组、微小 OD 尾部剪枝和起点内流式进度,不输出完整 OD。多人联机中也可运行,但客流有效值、粗估结果和客流视图均为本机客户端数据,不上传服务器、不广播给其他成员。
粗略系数越大计算越粗:只合并更多 12 分钟时间桶;目的地概率分母仍按全站参与。线程数 0=自动;>0 时按用户设置并受 64/站团数上限约束。本机保存,不参与多人同步。
① OD 计算与性能
影响粗估性能及可能的 OD 剪枝;“有损忽略微小 OD”默认关闭,避免改变原始粗估。
② 流量视图数据(可选)
默认 0 = 不忽略。流量视图复用本次 OD/WASM 寻路的路径样本;汇总后只保存日均流量 ≥ 阈值的线段。此阈值不改变原本的客流粗估及区间客流。修改后需重新粗估。
③ 输出精度与诊断
不含时间可减少存储;关闭时间粒度粗化会使用 840 槽。采集流量信息时使用详细寻路诊断以保证流量样本完整。
{{ paxCoarseDisabledReason() }} 运行前请先在“设置 → 切片数据”下载/补齐密度图。
粗估结果各部分大小 (分项独立压缩,大小不直接相加;包含独立缓存)
结果部分压缩前压缩后
{{ paxCoarseStatus }}
本次客流粗估全流程耗时(从开始、密度加载、有效值、目的地值、寻路、压缩直到保存):{{ ((paxLastFullRunMs || data.paxCoarseMeta.fullProcessMs)/1000).toFixed(2) }} 秒
有效值数据
压缩前:{{ formatPaxCoarseBytes(data.paxCoarseMeta && data.paxCoarseMeta.effectiveRawBytes) }}
压缩后:{{ formatPaxCoarseBytes(data.paxCoarseMeta && data.paxCoarseMeta.effectiveCompressedBytes) }}
粗估结果数据
压缩前:{{ formatPaxCoarseBytes(data.paxCoarseMeta && data.paxCoarseMeta.resultRawBytes) }}
压缩后:{{ formatPaxCoarseBytes(data.paxCoarseMeta && data.paxCoarseMeta.resultCompressedBytes) }}
区间客流缓存
区间:{{ data.paxFlowSegmentsMeta && data.paxFlowSegmentsMeta.segmentFlowCount || 0 }}
全网断面合计日均:{{ Math.round((data.paxFlowSegmentsMeta && (data.paxFlowSegmentsMeta.totalSegmentDailyAverage || data.paxFlowSegmentsMeta.totalDailyAverage)) || 0) }}
最大有向区间日均:{{ Math.round((data.paxFlowSegmentsMeta && data.paxFlowSegmentsMeta.maxSegmentDailyAverage) || 0) }}
压缩后:{{ formatPaxCoarseBytes(data.paxFlowSegmentsMeta && data.paxFlowSegmentsMeta.compressedBytes) }}
最近统计
站团:{{ (data.paxCoarseMeta && data.paxCoarseMeta.stationCount) || 0 }} · OD类型组:{{ (data.paxCoarseMeta && data.paxCoarseMeta.passengerGroupCount) || 0 }}
寻路成功:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeOkCount) || 0 }} · 失败:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeFailedCount) || 0 }}
粗略系数:{{ (data.paxCoarseMeta && data.paxCoarseMeta.roughFactor) || data.paxCoarseFactor || 10 }} · OD流量:{{ (data.paxCoarseMeta && data.paxCoarseMeta.displayedTotalPassengerCount) || 0 }}
竞争后保留:{{ (data.paxCoarseMeta && data.paxCoarseMeta.displayedRetainedPassengerCount) || 0 }} · 竞争流失:{{ (data.paxCoarseMeta && data.paxCoarseMeta.displayedCompetitionRejectedPassengerCount) || 0 }} · 寻路失败量:{{ (data.paxCoarseMeta && data.paxCoarseMeta.displayedRouteFailedPassengerCount) || 0 }}
线程:{{ (data.paxCoarseMeta && data.paxCoarseMeta.threadCount) || 4 }}{{ data.paxCoarseMeta && data.paxCoarseMeta.threadCountMode==='user' ? '(用户设置)' : '(自动)' }} · 时间桶:{{ (data.paxCoarseMeta && data.paxCoarseMeta.timeBucketMinutes) || 12 }}分钟 · 寻路批次:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeBatchCount) || 0 }}
WASM寻路:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeWasmJobCount) || 0 }} · JS回退:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeJsFallbackJobCount) || 0 }} · 路径缓存命中:{{ (data.paxCoarseMeta && data.paxCoarseMeta.routeCacheHits) || 0 }}
微小OD剪枝:{{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.earlyPrunedOdGroups) || 0) }} 组 · {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.earlyPrunedPassengerWeight) || 0) }} 人/周
寻路聚合性能:总 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && (data.paxCoarseMeta.performance.totalMs || data.paxCoarseMeta.performance.coordinatorTotalMs)) || 0) }}ms · 类型平衡 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.coordinatorTypeBalanceMs) || 0) }}ms · 寻路 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.routeSearchMs) || 0) }}ms · OD {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.odBuildMs) || 0) }}ms · 区间流 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.flowAggregateMs) || 0) }}ms · 权重桶 {{ Math.round((data.paxCoarseMeta && data.paxCoarseMeta.performance && data.paxCoarseMeta.performance.routeWeightBucketCount) || data.paxCoarseMeta.routeWeightBucketCount || 0) }}

📘 帮助与说明

查看更新日志、使用说明、滨蜀的视频,或直接问滨蜀(群128958079)。

🧰 说明

这里放不属于存档、导入、导出的辅助入口。后续新增杂项文件工具时统一归入此板块,避免文件页面再次变成混杂列表。

数据文本格式说明

线路、支线、联络线和出站换乘连线的纯文本导出规则

设置

渲染、编辑交互、性能与存档管理

🎨 渲染

Canvas 渲染
线路(含联络线)、地形、车站和站名使用 Canvas/Worker 绘制。状态:{{ canvasRendererStatus.mode }} · WASM · {{ canvasRendererStatus.lastRenderMs.toFixed(1) }}ms
流量视图渲染
默认 5;双向及多色线段自动分车道,不接触
宽度模式按流量调整线宽;不透明度模式固定线宽、用透明度表示流量,最小流量为 0%,最大流量为 100%。线性/对数映射两种模式均生效;所有流量相同时统一显示为 100%。到站流量按最终乘坐线路分组;离站流量按最初乘坐线路分组。选择“分配颜色”后按线路身份稳定分配 HSV 高对比色(不使用实际线路色)。不同颜色独立布局。
换乘站渲染为连接形状
同一站团的多个物理站点连接成统一形状。顶部栏“车站连线”与此设置完全同步;自动站名位置也会避让这些连接形状。
车站团按照全局样式渲染(默认开启)
开启时,站团自动连接和手动创建的“站团”连接统一使用「全局样式 → 换乘站样式」的图层颜色、填充、描边、虚线和偏移;如果未设置全局换乘站样式,则保留原来的白底黑边。连接段在两端使用各站自己的实际半径,中间线性过渡。
渲染图例
渲染区间站距
站距精度
区间站距跟随画布缩放
数字字号倍率 × 默认屏幕字号
数字字号 米
各种导出带区间站距
要在导出中携带区间站距,请先开启“区间站距跟随画布缩放”。固定屏幕字号无法对应稳定的导出物理尺寸。
区间站距始终水平显示;现实模式按当前纬度跨度、架空模式按当前可见公里跨度与站名共用细节剔除规则。低细节等级会在几何计算前直接退出,保证性能。
地形最大渲染不透明度
{{ Math.round(data.terrainMaxOpacity*100) }}%
高德地图不透明度{{data.amapopacity}}
渲染现实地形(水域)
现实水域不透明度{{data.realTerrainOpacity}}

🖱️ 编辑交互

开启地形交互
关闭后禁止地形点击、选中、移动、加点和编辑,适合专心编辑线路。
默认开启。开启后,移动端长按/右键不会在线路编辑中强制放“节点”,只能通过左侧“车站/节点”按钮切换新增类型。
关闭后编辑线路时不绘制鼠标假设点击的新走向和里程预览。
默认开启。关闭后,聊天浮窗只会通过右上角关闭按钮或右下角聊天按钮收起。
线路预览重绘前点数 默认 4;新增点会改变末端贝塞尔控制柄,因此预览会按此数量覆盖重绘前方真实段。
禁用站名更新时自动重新确定位置

⚡ 性能 / Worker

交互 Worker 数量
默认 10。用于点选、吸附、投影和换乘判定。当前可用:{{ interactionWorkerStatus.alive }} 个。
{{ interactionWorkerStatus.lastError }}
渲染调试信息显示主线程快照、Worker 分层耗时、实绘数量、LOD 跳过数量和缓存参数;多人联机调试信息仅联机时显示网络、服务端、Patch 应用和重绘耗时。
总 RTT:{{collabPerf.rttLast.toFixed(1)}} ms(平均 {{collabPerf.rttAvg.toFixed(1)}} ms)
上行 客户端→服务器:≈ {{collabPerf.uplinkLast.toFixed(1)}} ms(平均 {{collabPerf.uplinkAvg.toFixed(1)}} ms)
服务端处理:{{collabPerf.serverLast.toFixed(3)}} ms(平均 {{collabPerf.serverAvg.toFixed(3)}} ms);最近 Patch 中继:{{collabPerf.relayServerLast.toFixed(3)}} ms
下行 服务器→客户端:≈ {{collabPerf.downlinkLast.toFixed(1)}} ms(平均 {{collabPerf.downlinkAvg.toFixed(1)}} ms)
Patch 应用:{{collabPerf.applyLast.toFixed(1)}} ms
更新重绘:{{collabPerf.renderLast.toFixed(1)}} ms
编辑提交/确认往返:{{collabPerf.editConfirmLast.toFixed(1)}} ms;最近分块快照传输:{{collabPerf.snapshotTransferLast.toFixed(1)}} ms
最近 Patch:{{collabPerf.patchBytes}} B / {{collabPerf.patchOps}} ops;完整快照:{{collabPerf.snapshotBytes}} B
房主刷新接管:{{collabPerf.hostTakeoverLast ? '本次发生' : '本次未发生'}};累计 {{collabPerf.hostTakeoverCount}} 次;最近 {{collabPerf.hostTakeoverAt}}
接管状态:{{collabPerf.hostTakeoverNote}}
注:上下行是基于 NTP 四时间戳和客户端/服务器时钟偏移的估算;服务端处理仅统计 Hub 方法体,中间件/排队开销会落入链路估算。编辑提交/确认是业务链路总耗时,不等同于纯网络。

🎫 票价设置

照搬 KL 的票价设定:进站价 + 距离价格函数。线网组未绑定票价时,寻路粗估默认使用北京地铁票价。

🧭 自动命名

配置保存在当前存档中。普通自动命名使用内置现实地铁站数据;高级自动命名只读取已下载到浏览器 IndexedDB 的地名 / 道路切片。

普通自动命名

默认 200m;旧版 xianshiapi 调用不传阈值时仍按 200m。

高级自动命名

清洗规则只作用于高级自动命名。详细权重、预设、全局评分参数请到“命名配置”。

实时预览

方案分享

分享码不在页面展开显示。

⚙️ 命名配置

这里仅调整高级自动命名的评分模型;类型显示权重保持 0~100,大类倍率只在实际评分时乘上,不改动每个类型原本显示的权重。
预设方案
全局参数

距离权重曲线

0m500m1000m050100
⚠ {{w}}

类型权重

所有大类默认折叠。大类倍率默认 1.00,实际评分 = 类型权重 × 大类倍率 × 距离 / 方向 / 名称质量因子。
{{autoNamerCollapsed[group.id]?'▶':'▼'}} {{group.label}} ({{group.rows.length}})
{{row.type}}{{autoNamerTypeCount(row.type).toLocaleString()}} ({{autoNamerTypePercent(row.type).toFixed(2)}}%)

🧪 命名配置对比

这里的配置保存在独立 IndexedDB 中,所有存档共享。保存后可以随时加载,也可以选择多个方案,用完全相同的北京 10 个 + 上海 10 个随机样本进行公平对比。

可对比配置

四个内置预设始终可直接参与对比,且不会写入 IndexedDB。点击复选框选择;按住 Shift 再点击可连续多选或连续退选,行为类似文件资源管理器。批量删除只会删除自定义配置。
{{row.name}} (内置){{row.builtin?'只读预设':formatAutoNamerConfigDate(row.updatedAt)}}
不可删除

对比结果

以下所有方案使用同一批北京 10 个 + 上海 10 个随机坐标和相同线路方向。横向比较同一行即可观察配置差异。
#区域 / 坐标{{c.name}}
{{idx+1}}{{sample.city}}
{{sample.lon.toFixed(4)}}, {{sample.lat.toFixed(4)}}
{{c.rows[idx]?.name||'—'}}
{{c.rows[idx]?.source||''}} · {{Number(c.rows[idx].score).toFixed(1)}}

🕒 时刻表

BLD 使用 KL 的时刻表结构。当前允许 MTR、BS2 和懒人时刻表;BS 时刻表暂不允许新建或使用。线路可在线路设置中绑定时刻表;寻路和客流粗估会按时刻表估计等车时间。

🗺️ 切片数据

现实模式右键地图可下载当前 1°×1° 区域的命名数据、河流数据和密度图数据;首次进入现实模式会自动检查并下载海洋数据。切片缓存在独立 IndexedDB 中,所有存档共享;普通下载遇到已存在的同类型切片会直接跳过,不会覆盖;只有“更新所有已下载的区域”和补全类操作会主动更新/补齐。打开本页会自动检查服务器版本;红色斜纹区块表示本地版本已过期。
已下载:{{ namerTiles.length }} 个切片 · 服务器:v{{namerServerVersion}}
{{ realTerrainBulkStatus }}
{{ namerBulkUpdateStatus }}
点击左侧任意网格选择切片;未下载区域可直接在这里下载。滚轮可缩放,拖动可平移。已下载切片颜色按数据量从蓝→绿→黄→橙→红渐变。

自定义页面布局

当前编辑:{{ data.fictionalMode ? '架空模式' : '现实模式' }}。布局保存在浏览器公共 IndexedDB 中,同模式的所有存档共用,不写入工程存档。拖拽卡片调整顺序,实际工具栏始终按两列排列。
☰{{ item.label }}
布局 JSON 不在页面中展开显示。复制会直接写入剪贴板;导入请使用上方文件按钮。

移动端左侧工具栏

移动端专用。左侧工具栏和“更多”共用这一份顺序;拖动卡片可排序。关闭“外面显示”后会进入“更多”。“设置”和“更多”固定在外面,不能隐藏。
外面:{{ mobilePrimaryToolItems.length }} 项 更多:{{ mobileMoreToolItems.length }} 项
☰ {{ item.label }} {{ item.hidden ? '更多' : '外面' }}

👥 多人联机房主 / 多人服务器

当前用户 {{ multiplayerIdentity.username || '未设置用户名' }} 去首页修改用户名
普通联机由当前浏览器持有权威存档;多人服务器会把当前作品上传到服务端托管,房主关闭浏览器后其他成员仍可加入。房间名称不同于存档名,密钥请只私下分享。
密钥固定为 32 位安全随机字符串,开启房间后不能更换;需要换密钥请先关闭普通联机或多人服务器。

🔐 房客权限

提示词不为空时,第一次进入此密钥房间需阅读 10 秒,之后再次进入需阅读 2 秒。
除“地形交互”默认关闭外,其余权限默认允许。保存权限由服务器验证;下载/导出与地形交互权限用于正常客户端 UI / 交互限制。

📡 房间状态

⚠ 多人撤销/重做采用操作级因果保护:若相关对象后来被其他人修改,将拒绝撤销或重做 {{ collabStatus }} {{ collabIsHosted() ? '服务器' : '普通联机' }} revision {{ collabRevision }} · 成员 {{ collabMembers.length }} 人

👤 房客列表 / 成员历史

房主固定在最上方;其余成员先显示在线、再显示离线,每组按最后编辑时间从新到旧排列。历史信息属于存档本体,不属于设置;拉黑名单则是这个浏览器的全局公共数据。
状态 / 用户 UUID 最后编辑 IP 地区 操作总量 身份 操作
{{ m.role==='host' ? '👑 ' : (m.online ? '🟢 ' : '⚫ ') }}{{ m.username || '未知用户' }} {{ m.role==='host' ? '房主' : (m.online ? '在线' : '离线') }} {{ m.uuid }} {{ formatCollabTime(m.lastEditAt) }} {{ m.ipAddress || '未知' }} {{ m.geo?.display || '未知地区' }} {{ m.operationCount }} 群主 管理员 成员 不可操作
暂无成员记录

🌐 加入多人房间

当前用户 {{ multiplayerIdentity.username || '未设置用户名' }} 去首页修改用户名
连接会使用房间当前权威作品替换当前编辑内容;多人服务器中,房主也从这里加入自己的服务器,并自动获得房主权限。你的自动命名配置、切片 IndexedDB、渲染/性能设置、视野和页面布局都不会同步。
{{ collabStatus }}房主:{{ collabHostUsername }} · revision {{ collabRevision }}
{{ collabGuestError }}

🖥️ 我的多人服务器

这里显示当前浏览器身份创建的服务器,点击即可填入密钥或直接加入。
正在读取服务器房间…
{{ collabHostedDiscoveryError }}
当前没有由这个浏览器身份创建的多人服务器。
{{ room.mapModeLabel }} · 在线 {{ room.onlineCount || 0 }} 人 · {{ formatCollabTime(room.updatedAtUtc) }}

🌍 公共图

这里显示正在运行且已设为公共图的多人服务器。
正在读取公共图…
{{ collabPublicDiscoveryError }}
当前没有正在运行的公共图服务器。
房主:{{ room.ownerUsername || '未知房主' }} · {{ room.mapModeLabel }} · 在线 {{ room.onlineCount || 0 }} 人

⭐ 已保存的房间

房间列表独立保存在当前浏览器,只显示房间名称;点击名称会自动填入对应密钥。
还没有保存过房间。

🔐 当前房间权限

房客请求保存:{{ collabPermissions.allowGuestSave ? '允许' : '禁止' }}
下载 JSON:{{ collabPermissions.allowGuestJsonDownload ? '允许' : '禁止' }}
导出图:{{ collabPermissions.allowGuestExportImage ? '允许' : '禁止' }}
地形交互:{{ collabPermissions.allowGuestTerrainInteraction ? '允许' : '禁止' }}
公共图:{{ collabPermissions.allowPublicMap ? '开启' : '关闭' }}

👥 房间成员

只读查看。房主固定在最上方,在线成员在离线历史成员之前。
状态 / 用户 最后编辑 IP 地区 操作总量
{{ m.role==='host' ? '👑 ' : (m.online ? '🟢 ' : '⚫ ') }}{{ m.username || '未知用户' }}{{ m.role==='host' ? '房主' : (m.online ? '在线' : '离线') }} {{ formatCollabTime(m.lastEditAt) }} {{ m.ipAddress || '未知' }} {{ m.geo?.display || '未知地区' }} {{ m.operationCount }}

💾 当前存档

存档名:

🔄 存档坐标模式转换

将创建新存档,原存档保留不变

✨ 新建 / 打开存档

用表格查看存档信息、收藏和打开。

🔗 存档合并

只能合并同模式存档。架空模式会自动把新存档放到当前存档右侧。
从已有存档合并
已选:{{concatWorkName}}
从JSON文件合并
{{ data.fictionalMode ? '🌍 架空 → 现实' : '🗺️ 现实 → 架空' }}

将以所有站点的四至中心为原点 (0, 0),
按照 1km = 1个坐标单位 的比例转换为架空坐标。
新存档名:转架空_{{ data.name }}

转换范围:当前图幅 % 默认 110%,不能小于 100%;超出边界的水系会切分,不会直接消失。转换后地形为折线段模式并自动闭合。
海洋 河流

将架空坐标中心映射到指定城市,
按照 1个坐标单位 = 1km 的比例转换为现实经纬度。
新存档名:转现实_{{ data.name }}

✅ 找到城市:{{ xyTransCityResult.name }}
经度 {{ xyTransCityResult.lng.toFixed(4) }},纬度 {{ xyTransCityResult.lat.toFixed(4) }}
❌ 未找到城市,请尝试更完整的名称
{{ exportSelectModal==='line' ? '选择突出线路' : '选择突出标签' }}
{{ l.name }}
{{ t.name }}

导出配置

📌 突出线路配置
选择突出目标
线路:{{ exportHighlight.lineIds.map(id=>linesMap.get(id)?.name).filter(Boolean).join('、') || '无' }}
标签:{{ exportHighlight.tagNames.join('、') || '无' }}
未突出线路处理
导出元素
现实地形
换乘站重算
导出缩放

🕐 时间点导出配置
导出时间 = {{ previewHistoryTimeExpr(data.exportConfig.historyTimeExpr) }}
各状态导出选项
作用于高架/地下、线路样式、时间样式三个图层
状态 导出选项
{{ st[1] }}

线路节点/车站列表:{{ linePtsLine?.name || '' }}

站名
⚠
⚠
车站站名样式
单点车站设置 {{ stationStylePts(selectedNameStaId).length }}条线路对应点;0秒=继承线路
{{ stationStyleLineName(p) }}
实际停车 {{ effectivePointDwellSeconds(p) }} 秒
图例编辑
编辑区会直接实时预览富文本结果;先选中一段文字再点格式按钮,链接和图标也可插入,内容会过滤脚本和危险属性。
先选中一段文本,再点上方按钮;支持链接和本存档图标插入,颜色/底色/字号会插入安全 span,渲染和导出时会保留。
选择本存档图标
图标模式、富文本插入图标、Markdown 插入图标都使用当前存档内图标,支持多人联机同步。
预览名称链接操作
空 {{icon.name}}
{{icon.id}}
{{icon.url}}
没有图标,请先在样式 → 图标列表中新建或从“我的图标”加入。
总图例 tag 样式 缩放 排列方式 行列数量
{{ splitLineSelectModal.type==='ring' ? '选择要拆分的环线' : '选择要拆分的线路' }}
{{ c.lineName || '(未命名)' }}
{{ splitLineSelectModal.saveSplit ? '将保留拆分点' : '将删除拆分点(仅在无其他线路使用时)' }}
🗺️ 寻路详情
{{ data.names.find(x=>x.staid===pfStartStaid)?.name || '起点' }} → {{ data.names.find(x=>x.staid===pfEndStaid)?.name || '终点' }}
{{ route.strategyName || ('方案 ' + (ri + 1)) }} {{ route.strategyDesc }} 🚉 {{ route.staCnt }} 站 🔄 {{ route.transfers }} 次换乘 📏 {{ route.totalDist.toFixed(2) }} km 点击此方案查看地图
{{ sec.lineName }}
在 {{ tl.atName }} 贯通进入 {{ tl.toLineName }} ;
共 {{ sec.staCnt }} 站 · {{ sec.dist.toFixed(2) }}km
▶ {{ sec.fromName }} → {{ sec.toName }}
{{ sname || '(无名站)' }} 上车 下车
🚶
出站换乘 {{ sec.fromName }} → {{ sec.toName }} · {{ sec.dist.toFixed(3) }}km
换乘联络线 经由联络线 ({{ sec.connFromLineName }} → {{ sec.connToLineName }}) 共 {{ sec.staCnt }} 站 · {{ sec.dist.toFixed(2) }}km
▶ {{ sec.fromName }} → {{ sec.toName }}
{{ sname || '(无名站)' }} 上车 下车
{{ sec.fromName }}
📖 使用说明

不会用?看更新日志,使用说明页面,滨蜀的视频,或者是直接问滨蜀(群128958079)

架空模式入口在文件页面里面

⌨️ 快捷键

{{row[0]}} {{row[1]}}

🖱️ 左键

{{row[0]}} {{row[1]}}

🖱️ 右键

{{row[0]}} {{row[1]}}

🖱️ 中键

{{row[0]}} {{row[1]}}

显示

{{row[0]}} {{row[1]}}

线路列表 移动线路顺序(拖拽,类似aarc)

左侧 加在他前面
右侧 加在他后面

📱 移动端

长按屏幕 等同于右键
{{t.text}}
😍可爱の万🥵盛🥵酱🥵正在努力给你加载喵😘❤️~
选择编辑线路:
已选起点→点终点
选择线路:
已选起点→点终点
选择线路:
起:{{ pfStartStaid != null ? (data.names.find(x=>x.staid===pfStartStaid)?.name || pfStartStaid) : '未选' }} 终:{{ pfEndStaid != null ? (data.names.find(x=>x.staid===pfEndStaid)?.name || pfEndStaid) : '未选' }}

计算中…
{{ c.name || c.staid }}
{{ linesMap.get(contextMenu.id)?.name || '线路' }}
编辑
端点渐变,不可改色。
列表
其他
{{ ptsMap.get(contextMenu.id)?.sta ? '车站' : '节点' }}
出站换乘连线
新的事件在上,老的在下;样式从该时间开始生效。
当前位置
[x:{{ Number(contextMenu.lng).toFixed(3) }},y:{{ Number(contextMenu.lat).toFixed(3) }}]

{{ coverageRadiusBox.title }}

最大 {{ Math.round(coverageRadiusBox.maxM) }} m
覆盖半径只影响有效值计算
数值不能超过轨道制式原生上限
总覆盖半径
空=继承线路/轨道;0=该类型不覆盖。
{{ row.name }}
选择连锁删除线路
{{ anchorAlignSelState.phase === 'pickA' ? '📍 点击多选内容中的源点A' : anchorAlignSelState.phase === 'pickB' ? '📍 点击多选内容中的源点B' : anchorAlignSelState.phase === 'pickC' ? '🎯 点击地图上的目标点C(A→C)' : '🎯 点击地图上的目标点D(B→D)' }} A✓ B✓ C✓
选择站点:
线路时间分段:{{ lineHistoryEditingLine?.name }}
拖动彩色段首尾端点修改区间;点击站名打开单点时间设置。
{{ p.name }}
线路历史:{{ lineMetaHistoryLine?.name || '' }}
当前名称:{{ lineMetaHistoryLine?.name || '未命名' }}
当前颜色:{{ lineMetaHistoryLine?.color }}
历史记录表示旧值使用至该时间;列表按时间排序。
未设置线路历史
{{ item.kind==='name' ? '名称' : '颜色' }}
= {{ previewHistoryTimeExpr(item.record.time) }}

有效值信息 · {{ stationEffectiveInfoModal.name }}

站团ID {{ stationEffectiveInfoModal.staid }} · 覆盖半径 {{ Math.round(stationEffectiveInfoModal.radiusM||0) }}m · 点数 {{ stationEffectiveInfoModal.pointCount||0 }}
没有找到该站当前有效值缓存,请先在“文件 → 客流粗估”运行或刷新有效值。

线路运营信息 · {{ lineOperationInfoModal.name }}

车站 {{ lineOperationInfoModal.nodes.length }} · 流向 {{ lineOperationInfoModal.links.length }} · 站点总流量 {{ paxRankNumber(lineOperationInfoModal.total) }}
暂无线路车站数据。
#{{ i+1 }}{{ r.title }}{{ paxRankNumber(r.value) }}
暂无本线路实际区间流向数据;请确认已运行客流粗估并生成区间客流。

土地利用 · {{ lineLandUseModal.name }}

车站 {{ lineLandUseModal.rows.length }} · 有效值类型 {{ lineLandUseModal.types.length }} · 最大值 {{ lineLandUseCellText(lineLandUseModal.maxValue) }} · 表头按各自总量独立着色
暂无可显示的线路土地利用数据。请先在“文件 → 客流粗估”运行或刷新有效值。
车站
{{ t.label }}
{{ lineLandUseCellText(t.total) }}
{{ r.name }}
{{ lineLandUseCellText(r.total) }}
{{ lineLandUseCellText(c.value) }}

运营信息 · {{ stationOperationInfoModal.name }}

日均:进站 {{ stationOpDailyValueText(stationOperationInfoModal.entryTotal) }} · 出站 {{ stationOpDailyValueText(stationOperationInfoModal.exitTotal) }} · 换乘 {{ paxRankNumber(stationOperationInfoModal.transferTotal) }}
当前粗估结果没有运营拆分字段;请重新运行客流粗估。
暂无进站方向数据。
#{{ i+1 }}{{ r.label }}{{ stationOpDailyValueText(r.value) }}
暂无出站方向数据。
#{{ i+1 }}{{ r.label }}{{ stationOpDailyValueText(r.value) }}
暂无换乘方向数据。
#{{ i+1 }}{{ r.fromLabel }}→{{ r.toLabel }}{{ paxRankNumber(r.value) }}
站团历史名称
staid:{{ stationNameHistoryStaid }}
当前名称:{{ stationNameHistoryCurrentName || '未命名' }}
每条记录表示该旧名称使用至设定时间;到达该时间后切换为下一名称,最后切换为当前名称。
未设置历史名称
历史名称
使用至 / 改名时间
= {{ previewHistoryTimeExpr(r.time) }}
单点时间设置
staid:{{ singleStationHistoryStaid }}
单点数量:{{ singleStationHistoryPts.length }}
id:{{ p.id }} {{ stationStyleLineName(p) }}
未设置时间状态
= {{ previewHistoryTimeExpr(r.time) }}
时间设置
{{ lineHistoryRecordTitle(lineHistoryEditPopup.record) }}

缩略图 / 发展史动图导出






动态建设开启时,播放速度由建设速度决定。




帧率越高越平滑,但文件越大。单次更新最大帧数会限制特别长线路造成的文件膨胀;总播放时长不变。


时间字符高度占全图比例
缩略图只绘制线路走向、线路颜色和车站;忽略图例、总图例、线路样式、车站样式、高架/地下等。 时间文字会在最大像素外向下扩展,不占用线路缩略图内部空间。

实际 Worker 数不会超过:总帧数、CPU 逻辑线程数 - 1、这里设置的最大值。 数值越大不一定越快,可能增加内存占用。
推荐设置:
动态建设:关闭
建设速度:40 km/s
动态建设帧率:8 fps
单次更新最大帧数:40 帧
最大 Worker 数:20
这是当前测试中较平衡的设置:文件体积可控,导出速度较快,动态建设开启后也能保持比较顺滑。
{{ thumbnailExportProgress.title }}
{{ thumbnailExportProgress.text }}
{{ thumbnailExportProgress.detail }}
{{ Math.round(thumbnailExportProgress.percent * 100) }}%
地形
当前地形:{{ editingTerrain.name }}|点击画布继续加点,拖白点移动节点,右键白点删除节点
{{ exportProgress.title || '正在导出' }}
{{ exportProgress.text }}
{{ exportProgress.detail }}
{{ Math.round((exportProgress.percent || 0) * 100) }}%

📜 多人联机操作日志

当前显示 {{ collabLogEntries.length }} 条;每次最多加载 200 条。日志可能不完整。
时间用户操作说明
{{ formatCollabTime(e.time) }}{{ e.username }}{{ e.action }} ×{{e.count}}{{ e.detail }}
暂无操作日志
已到最早可用日志